Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(363)

Unified Diff: mojo/dart/packages/mojo_services/lib/mojo/gfx/composition/hit_tests.mojom.dart

Issue 1748363002: Mozart: Add hit testing interfaces. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-1
Patch Set: simplify interfaces a bit Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | mojo/dart/packages/mojo_services/lib/mojo/gfx/composition/nodes.mojom.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/dart/packages/mojo_services/lib/mojo/gfx/composition/hit_tests.mojom.dart
diff --git a/mojo/dart/packages/mojo_services/lib/mojo/gfx/composition/hit_tests.mojom.dart b/mojo/dart/packages/mojo_services/lib/mojo/gfx/composition/hit_tests.mojom.dart
index acf982b8419aded42d03805662232a9e39704215..59bcd8b4ae3a8238a80436c28b60ff0318576006 100644
--- a/mojo/dart/packages/mojo_services/lib/mojo/gfx/composition/hit_tests.mojom.dart
+++ b/mojo/dart/packages/mojo_services/lib/mojo/gfx/composition/hit_tests.mojom.dart
@@ -9,23 +9,81 @@ import 'package:mojo/core.dart' as core;
import 'package:mojo/mojo/bindings/types/service_describer.mojom.dart' as service_describer;
import 'package:mojo_services/mojo/geometry.mojom.dart' as geometry_mojom;
import 'package:mojo_services/mojo/gfx/composition/scene_token.mojom.dart' as scene_token_mojom;
-const int kHitIdNone = 0;
-class Hit extends bindings.Struct {
+class HitTestBehaviorVisibility extends bindings.MojoEnum {
+ static const HitTestBehaviorVisibility opaque = const HitTestBehaviorVisibility._(0);
+ static const HitTestBehaviorVisibility translucent = const HitTestBehaviorVisibility._(1);
+ static const HitTestBehaviorVisibility invisible = const HitTestBehaviorVisibility._(2);
+
+ const HitTestBehaviorVisibility._(int v) : super(v);
+
+ static const Map<String, HitTestBehaviorVisibility> valuesMap = const {
+ "opaque": opaque,
+ "translucent": translucent,
+ "invisible": invisible,
+ };
+ static const List<HitTestBehaviorVisibility> values = const [
+ opaque,
+ translucent,
+ invisible,
+ ];
+
+ static HitTestBehaviorVisibility valueOf(String name) => valuesMap[name];
+
+ factory HitTestBehaviorVisibility(int v) {
+ switch (v) {
+ case 0:
+ return HitTestBehaviorVisibility.opaque;
+ case 1:
+ return HitTestBehaviorVisibility.translucent;
+ case 2:
+ return HitTestBehaviorVisibility.invisible;
+ default:
+ return null;
+ }
+ }
+
+ static HitTestBehaviorVisibility decode(bindings.Decoder decoder0, int offset) {
+ int v = decoder0.decodeUint32(offset);
+ HitTestBehaviorVisibility result = new HitTestBehaviorVisibility(v);
+ if (result == null) {
+ throw new bindings.MojoCodecError(
+ 'Bad value $v for enum HitTestBehaviorVisibility.');
+ }
+ return result;
+ }
+
+ String toString() {
+ switch(this) {
+ case opaque:
+ return 'HitTestBehaviorVisibility.opaque';
+ case translucent:
+ return 'HitTestBehaviorVisibility.translucent';
+ case invisible:
+ return 'HitTestBehaviorVisibility.invisible';
+ default:
+ return null;
+ }
+ }
+
+ int toJson() => mojoEnumValue;
+}
+
+
+
+class HitTestBehavior extends bindings.Struct {
static const List<bindings.StructDataHeader> kVersions = const [
- const bindings.StructDataHeader(40, 0)
+ const bindings.StructDataHeader(24, 0)
];
- scene_token_mojom.SceneToken sceneToken = null;
- int sceneVersion = 0;
- int nodeId = 0;
- int hitId = 0;
- geometry_mojom.Point intersection = null;
+ HitTestBehaviorVisibility visibility = new HitTestBehaviorVisibility(0);
+ bool prune = false;
+ geometry_mojom.Rect hitRect = null;
- Hit() : super(kVersions.last.size);
+ HitTestBehavior() : super(kVersions.last.size);
- static Hit deserialize(bindings.Message message) {
+ static HitTestBehavior deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
if (decoder.excessHandles != null) {
@@ -34,11 +92,11 @@ class Hit extends bindings.Struct {
return result;
}
- static Hit decode(bindings.Decoder decoder0) {
+ static HitTestBehavior decode(bindings.Decoder decoder0) {
if (decoder0 == null) {
return null;
}
- Hit result = new Hit();
+ HitTestBehavior result = new HitTestBehavior();
var mainDataHeader = decoder0.decodeStructDataHeader();
if (mainDataHeader.version <= kVersions.last.version) {
@@ -60,25 +118,20 @@ class Hit extends bindings.Struct {
}
if (mainDataHeader.version >= 0) {
- var decoder1 = decoder0.decodePointer(8, false);
- result.sceneToken = scene_token_mojom.SceneToken.decode(decoder1);
- }
- if (mainDataHeader.version >= 0) {
-
- result.sceneVersion = decoder0.decodeUint32(16);
- }
- if (mainDataHeader.version >= 0) {
-
- result.nodeId = decoder0.decodeUint32(20);
+ result.visibility = HitTestBehaviorVisibility.decode(decoder0, 8);
+ if (result.visibility == null) {
+ throw new bindings.MojoCodecError(
+ 'Trying to decode null union for non-nullable HitTestBehaviorVisibility.');
+ }
}
if (mainDataHeader.version >= 0) {
- result.hitId = decoder0.decodeUint32(24);
+ result.prune = decoder0.decodeBool(12, 0);
}
if (mainDataHeader.version >= 0) {
- var decoder1 = decoder0.decodePointer(32, false);
- result.intersection = geometry_mojom.Point.decode(decoder1);
+ var decoder1 = decoder0.decodePointer(16, true);
+ result.hitRect = geometry_mojom.Rect.decode(decoder1);
}
return result;
}
@@ -86,58 +139,115 @@ class Hit extends bindings.Struct {
void encode(bindings.Encoder encoder) {
var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last);
try {
- encoder0.encodeStruct(sceneToken, 8, false);
+ encoder0.encodeEnum(visibility, 8);
} on bindings.MojoCodecError catch(e) {
e.message = "Error encountered while encoding field "
- "sceneToken of struct Hit: $e";
+ "visibility of struct HitTestBehavior: $e";
rethrow;
}
try {
- encoder0.encodeUint32(sceneVersion, 16);
+ encoder0.encodeBool(prune, 12, 0);
} on bindings.MojoCodecError catch(e) {
e.message = "Error encountered while encoding field "
- "sceneVersion of struct Hit: $e";
+ "prune of struct HitTestBehavior: $e";
rethrow;
}
try {
- encoder0.encodeUint32(nodeId, 20);
+ encoder0.encodeStruct(hitRect, 16, true);
} on bindings.MojoCodecError catch(e) {
e.message = "Error encountered while encoding field "
- "nodeId of struct Hit: $e";
+ "hitRect of struct HitTestBehavior: $e";
rethrow;
}
- try {
- encoder0.encodeUint32(hitId, 24);
- } on bindings.MojoCodecError catch(e) {
- e.message = "Error encountered while encoding field "
- "hitId of struct Hit: $e";
- rethrow;
+ }
+
+ String toString() {
+ return "HitTestBehavior("
+ "visibility: $visibility" ", "
+ "prune: $prune" ", "
+ "hitRect: $hitRect" ")";
+ }
+
+ Map toJson() {
+ Map map = new Map();
+ map["visibility"] = visibility;
+ map["prune"] = prune;
+ map["hitRect"] = hitRect;
+ return map;
+ }
+}
+
+
+
+
+class HitTestResult extends bindings.Struct {
+ static const List<bindings.StructDataHeader> kVersions = const [
+ const bindings.StructDataHeader(16, 0)
+ ];
+ SceneHit root = null;
+
+ HitTestResult() : super(kVersions.last.size);
+
+ static HitTestResult deserialize(bindings.Message message) {
+ var decoder = new bindings.Decoder(message);
+ var result = decode(decoder);
+ if (decoder.excessHandles != null) {
+ decoder.excessHandles.forEach((h) => h.close());
+ }
+ return result;
+ }
+
+ static HitTestResult decode(bindings.Decoder decoder0) {
+ if (decoder0 == null) {
+ return null;
+ }
+ HitTestResult result = new HitTestResult();
+
+ var mainDataHeader = decoder0.decodeStructDataHeader();
+ if (mainDataHeader.version <= kVersions.last.version) {
+ // Scan in reverse order to optimize for more recent versions.
+ for (int i = kVersions.length - 1; i >= 0; --i) {
+ if (mainDataHeader.version >= kVersions[i].version) {
+ if (mainDataHeader.size == kVersions[i].size) {
+ // Found a match.
+ break;
+ }
+ throw new bindings.MojoCodecError(
+ 'Header size doesn\'t correspond to known version size.');
+ }
+ }
+ } else if (mainDataHeader.size < kVersions.last.size) {
+ throw new bindings.MojoCodecError(
+ 'Message newer than the last known version cannot be shorter than '
+ 'required by the last known version.');
+ }
+ if (mainDataHeader.version >= 0) {
+
+ var decoder1 = decoder0.decodePointer(8, true);
+ result.root = SceneHit.decode(decoder1);
}
+ return result;
+ }
+
+ void encode(bindings.Encoder encoder) {
+ var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last);
try {
- encoder0.encodeStruct(intersection, 32, false);
+ encoder0.encodeStruct(root, 8, true);
} on bindings.MojoCodecError catch(e) {
e.message = "Error encountered while encoding field "
- "intersection of struct Hit: $e";
+ "root of struct HitTestResult: $e";
rethrow;
}
}
String toString() {
- return "Hit("
- "sceneToken: $sceneToken" ", "
- "sceneVersion: $sceneVersion" ", "
- "nodeId: $nodeId" ", "
- "hitId: $hitId" ", "
- "intersection: $intersection" ")";
+ return "HitTestResult("
+ "root: $root" ")";
}
Map toJson() {
Map map = new Map();
- map["sceneToken"] = sceneToken;
- map["sceneVersion"] = sceneVersion;
- map["nodeId"] = nodeId;
- map["hitId"] = hitId;
- map["intersection"] = intersection;
+ map["root"] = root;
return map;
}
}
@@ -145,15 +255,17 @@ class Hit extends bindings.Struct {
-class HitTestResult extends bindings.Struct {
+class SceneHit extends bindings.Struct {
static const List<bindings.StructDataHeader> kVersions = const [
- const bindings.StructDataHeader(16, 0)
+ const bindings.StructDataHeader(32, 0)
];
+ scene_token_mojom.SceneToken sceneToken = null;
+ int sceneVersion = 0;
List<Hit> hits = null;
- HitTestResult() : super(kVersions.last.size);
+ SceneHit() : super(kVersions.last.size);
- static HitTestResult deserialize(bindings.Message message) {
+ static SceneHit deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
if (decoder.excessHandles != null) {
@@ -162,11 +274,11 @@ class HitTestResult extends bindings.Struct {
return result;
}
- static HitTestResult decode(bindings.Decoder decoder0) {
+ static SceneHit decode(bindings.Decoder decoder0) {
if (decoder0 == null) {
return null;
}
- HitTestResult result = new HitTestResult();
+ SceneHit result = new SceneHit();
var mainDataHeader = decoder0.decodeStructDataHeader();
if (mainDataHeader.version <= kVersions.last.version) {
@@ -189,13 +301,25 @@ class HitTestResult extends bindings.Struct {
if (mainDataHeader.version >= 0) {
var decoder1 = decoder0.decodePointer(8, false);
+ result.sceneToken = scene_token_mojom.SceneToken.decode(decoder1);
+ }
+ if (mainDataHeader.version >= 0) {
+
+ result.sceneVersion = decoder0.decodeUint32(16);
+ }
+ if (mainDataHeader.version >= 0) {
+
+ var decoder1 = decoder0.decodePointer(24, false);
{
- var si1 = decoder1.decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength);
+ var si1 = decoder1.decodeDataHeaderForUnionArray(bindings.kUnspecifiedArrayLength);
result.hits = new List<Hit>(si1.numElements);
for (int i1 = 0; i1 < si1.numElements; ++i1) {
- var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
- result.hits[i1] = Hit.decode(decoder2);
+ result.hits[i1] = Hit.decode(decoder1, bindings.ArrayDataHeader.kHeaderSize + bindings.kUnionSize * i1);
+ if (result.hits[i1] == null) {
+ throw new bindings.MojoCodecError(
+ 'Trying to decode null union for non-nullable Hit.');
+ }
}
}
}
@@ -205,28 +329,46 @@ class HitTestResult extends bindings.Struct {
void encode(bindings.Encoder encoder) {
var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last);
try {
+ encoder0.encodeStruct(sceneToken, 8, false);
+ } on bindings.MojoCodecError catch(e) {
+ e.message = "Error encountered while encoding field "
+ "sceneToken of struct SceneHit: $e";
+ rethrow;
+ }
+ try {
+ encoder0.encodeUint32(sceneVersion, 16);
+ } on bindings.MojoCodecError catch(e) {
+ e.message = "Error encountered while encoding field "
+ "sceneVersion of struct SceneHit: $e";
+ rethrow;
+ }
+ try {
if (hits == null) {
- encoder0.encodeNullPointer(8, false);
+ encoder0.encodeNullPointer(24, false);
} else {
- var encoder1 = encoder0.encodePointerArray(hits.length, 8, bindings.kUnspecifiedArrayLength);
+ var encoder1 = encoder0.encodeUnionArray(hits.length, 24, bindings.kUnspecifiedArrayLength);
for (int i0 = 0; i0 < hits.length; ++i0) {
- encoder1.encodeStruct(hits[i0], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, false);
+ encoder1.encodeUnion(hits[i0], bindings.ArrayDataHeader.kHeaderSize + bindings.kUnionSize * i0, false);
}
}
} on bindings.MojoCodecError catch(e) {
e.message = "Error encountered while encoding field "
- "hits of struct HitTestResult: $e";
+ "hits of struct SceneHit: $e";
rethrow;
}
}
String toString() {
- return "HitTestResult("
+ return "SceneHit("
+ "sceneToken: $sceneToken" ", "
+ "sceneVersion: $sceneVersion" ", "
"hits: $hits" ")";
}
Map toJson() {
Map map = new Map();
+ map["sceneToken"] = sceneToken;
+ map["sceneVersion"] = sceneVersion;
map["hits"] = hits;
return map;
}
@@ -235,6 +377,95 @@ class HitTestResult extends bindings.Struct {
+class NodeHit extends bindings.Struct {
+ static const List<bindings.StructDataHeader> kVersions = const [
+ const bindings.StructDataHeader(24, 0)
+ ];
+ int nodeId = 0;
+ geometry_mojom.Point intersection = null;
+
+ NodeHit() : super(kVersions.last.size);
+
+ static NodeHit deserialize(bindings.Message message) {
+ var decoder = new bindings.Decoder(message);
+ var result = decode(decoder);
+ if (decoder.excessHandles != null) {
+ decoder.excessHandles.forEach((h) => h.close());
+ }
+ return result;
+ }
+
+ static NodeHit decode(bindings.Decoder decoder0) {
+ if (decoder0 == null) {
+ return null;
+ }
+ NodeHit result = new NodeHit();
+
+ var mainDataHeader = decoder0.decodeStructDataHeader();
+ if (mainDataHeader.version <= kVersions.last.version) {
+ // Scan in reverse order to optimize for more recent versions.
+ for (int i = kVersions.length - 1; i >= 0; --i) {
+ if (mainDataHeader.version >= kVersions[i].version) {
+ if (mainDataHeader.size == kVersions[i].size) {
+ // Found a match.
+ break;
+ }
+ throw new bindings.MojoCodecError(
+ 'Header size doesn\'t correspond to known version size.');
+ }
+ }
+ } else if (mainDataHeader.size < kVersions.last.size) {
+ throw new bindings.MojoCodecError(
+ 'Message newer than the last known version cannot be shorter than '
+ 'required by the last known version.');
+ }
+ if (mainDataHeader.version >= 0) {
+
+ result.nodeId = decoder0.decodeUint32(8);
+ }
+ if (mainDataHeader.version >= 0) {
+
+ var decoder1 = decoder0.decodePointer(16, false);
+ result.intersection = geometry_mojom.Point.decode(decoder1);
+ }
+ return result;
+ }
+
+ void encode(bindings.Encoder encoder) {
+ var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last);
+ try {
+ encoder0.encodeUint32(nodeId, 8);
+ } on bindings.MojoCodecError catch(e) {
+ e.message = "Error encountered while encoding field "
+ "nodeId of struct NodeHit: $e";
+ rethrow;
+ }
+ try {
+ encoder0.encodeStruct(intersection, 16, false);
+ } on bindings.MojoCodecError catch(e) {
+ e.message = "Error encountered while encoding field "
+ "intersection of struct NodeHit: $e";
+ rethrow;
+ }
+ }
+
+ String toString() {
+ return "NodeHit("
+ "nodeId: $nodeId" ", "
+ "intersection: $intersection" ")";
+ }
+
+ Map toJson() {
+ Map map = new Map();
+ map["nodeId"] = nodeId;
+ map["intersection"] = intersection;
+ return map;
+ }
+}
+
+
+
+
class _HitTesterHitTestParams extends bindings.Struct {
static const List<bindings.StructDataHeader> kVersions = const [
const bindings.StructDataHeader(16, 0)
@@ -385,6 +616,113 @@ class HitTesterHitTestResponseParams extends bindings.Struct {
+
+enum HitTag {
+ scene,
+ node,
+ unknown
+}
+
+class Hit extends bindings.Union {
+ static final _tag_to_int = const {
+ HitTag.scene: 0,
+ HitTag.node: 1,
+ };
+
+ static final _int_to_tag = const {
+ 0: HitTag.scene,
+ 1: HitTag.node,
+ };
+
+ var _data;
+ HitTag _tag = HitTag.unknown;
+
+ HitTag get tag => _tag;
+ SceneHit get scene {
+ if (_tag != HitTag.scene) {
+ throw new bindings.UnsetUnionTagError(_tag, HitTag.scene);
+ }
+ return _data;
+ }
+
+ set scene(SceneHit value) {
+ _tag = HitTag.scene;
+ _data = value;
+ }
+ NodeHit get node {
+ if (_tag != HitTag.node) {
+ throw new bindings.UnsetUnionTagError(_tag, HitTag.node);
+ }
+ return _data;
+ }
+
+ set node(NodeHit value) {
+ _tag = HitTag.node;
+ _data = value;
+ }
+
+ static Hit decode(bindings.Decoder decoder0, int offset) {
+ int size = decoder0.decodeUint32(offset);
+ if (size == 0) {
+ return null;
+ }
+ Hit result = new Hit();
+
+
+ HitTag tag = _int_to_tag[decoder0.decodeUint32(offset + 4)];
+ switch (tag) {
+ case HitTag.scene:
+
+ var decoder1 = decoder0.decodePointer(offset + 8, false);
+ result.scene = SceneHit.decode(decoder1);
+ break;
+ case HitTag.node:
+
+ var decoder1 = decoder0.decodePointer(offset + 8, false);
+ result.node = NodeHit.decode(decoder1);
+ break;
+ default:
+ throw new bindings.MojoCodecError("Bad union tag: $tag");
+ }
+
+ return result;
+ }
+
+ void encode(bindings.Encoder encoder0, int offset) {
+
+ encoder0.encodeUint32(16, offset);
+ encoder0.encodeUint32(_tag_to_int[_tag], offset + 4);
+ switch (_tag) {
+ case HitTag.scene:
+ encoder0.encodeStruct(scene, offset + 8, false);
+ break;
+ case HitTag.node:
+ encoder0.encodeStruct(node, offset + 8, false);
+ break;
+ default:
+ throw new bindings.MojoCodecError("Bad union tag: $_tag");
+ }
+ }
+
+ String toString() {
+ String result = "Hit(";
+ switch (_tag) {
+ case HitTag.scene:
+ result += "scene";
+ break;
+ case HitTag.node:
+ result += "node";
+ break;
+ default:
+ result += "unknown";
+ }
+ result += ": $_data)";
+ return result;
+ }
+}
+
+
+
const int _HitTester_hitTestName = 0;
« no previous file with comments | « no previous file | mojo/dart/packages/mojo_services/lib/mojo/gfx/composition/nodes.mojom.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698