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

Side by Side Diff: mojo/services/gfx/composition/interfaces/hit_tests.mojom

Issue 1748363002: Mozart: Add hit testing interfaces. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-1
Patch Set: Created 4 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 [DartPackage="mojo_services"] 5 [DartPackage="mojo_services"]
6 module mojo.gfx.composition; 6 module mojo.gfx.composition;
7 7
8 import "mojo/services/geometry/interfaces/geometry.mojom"; 8 import "mojo/services/geometry/interfaces/geometry.mojom";
9 import "mojo/services/gfx/composition/interfaces/scene_token.mojom"; 9 import "mojo/services/gfx/composition/interfaces/scene_token.mojom";
10 10
11 // Indicates that hit testing is not needed for a given node. 11 // Determines how a node behaves during hit testing.
12 const uint32 kHitIdNone = 0; 12 //
13 // See |Node| for more details of the hit testing traversal process.
14 struct HitTestBehavior {
15 // The visibility specifies how a node itself is hit and its effect on
16 // the hit testing traversal.
17 enum Visibility {
18 // The node can be hit and prevents other targets visually behind the
19 // node from being hit. This is the default.
20 //
21 // Opaque targets are useful for UI elements like buttons which cover and
22 // block interaction with content visually behind them.
23 OPAQUE,
13 24
14 // Provides information about the point of intersection of a hit test with 25 // The node can be hit and allows other targets visually behind the node
15 // a node in a scene graph. 26 // to also be hit.
16 struct Hit { 27 //
17 // The scene token of the scene which was hit. 28 // Translucent targets are useful for UI elements like dimissed drawers
29 // which may not obscure content visually behind them but which do need
30 // to intercept gestures in that area (perhaps to reveal themselves).
31 TRANSLUCENT,
32
33 // The node cannot be hit.
34 //
35 // Invisible targets are useful for explicitly suppressing hit testing
36 // for a node and its children when combined with the |prune| flag.
37 INVISIBLE,
38 };
39
40 // Specifies the visibility of the node for hit testing purposes.
41 // The default is opaque.
42 Visibility visibility = Visibility.OPAQUE;
43
44 // When set to true, prevents a node's children from being hit tested.
45 bool prune = false;
46
47 // The rectangle within the node's content space to test for hits.
48 // If null, the node's entire clip region is tested for hits.
49 //
50 // TODO(jeffbrown): Support more complex hit test regions and masks.
51 mojo.Rect? hit_rect;
52 };
53
54 // The result of a hit test operation.
55 //
56 // Hit test results form a tree which describes which nodes were hit within
57 // the scene graph. It is essentially a subtree of the scene graph which
58 // only includes nodes which were hit by the hit test. Structural information
59 // about the scene graph is retained but only limited information about the
60 // nodes themselves is included.
61 //
62 // To walk the hits in dispatch order, perform a post-order traversal of the
63 // hit tree, processing children before their parents.
64 struct HitTestResult {
65 // If a hit occurred, contains information about hits which occurred within
66 // the root scene of the scene graph.
67 SceneHit? scene_hit;
68 };
69
70 // Describes a collection of hits within a scene in the scene graph.
71 struct SceneHit {
72 // The scene token of the scene which contains the hit.
18 SceneToken scene_token; 73 SceneToken scene_token;
19 74
20 // The version of the scene which was consulted as part of evaluating the 75 // The version of the scene which was consulted at the time the hit test
21 // hit test. 76 // was performed.
22 uint32 scene_version; 77 uint32 scene_version;
23 78
79 // The nodes which were hit, in order of traversal.
80 // This list always contains at least one node.
81 array<NodeHit> node_hits;
82 };
83
84 // Describes the point of intersection of a hit test with a particular
85 // node within a scene.
86 struct NodeHit {
24 // The node id of the node which was hit. 87 // The node id of the node which was hit.
25 uint32 node_id; 88 uint32 node_id;
26 89
27 // The hit test id of the node which was hit. 90 // True if the node was visible to hit testing and would like to receive
28 uint32 hit_id; 91 // events related to the hit. False if the node is only being included
92 // for structural reasons because of a scene which it references which
93 // was hit.
94 bool visible;
29 95
30 // The coordinates of the hit within the node's content space. 96 // The coordinates of the hit within the node's content space.
31 mojo.Point intersection; 97 mojo.Point intersection;
32 };
33 98
34 // The result of a hit test operation. 99 // If the node had a |SceneNodeOp| and a hit occurred within the scene
35 struct HitTestResult { 100 // which it referenced, contains information about the hits which occurred
36 // A sorted list of hits in dispatch order from the top-most hit node 101 // within that scene.
37 // to the nodes underneath it and containing it, or an empty array if none. 102 SceneHit? scene_hit;
38 // Omits nodes for which the hit_id was |kHitIdNone|.
39 array<Hit> hits;
40 }; 103 };
abarth 2016/03/01 17:33:43 I was expecting NodeHit to have an array<NodeHit>,
jeffbrown 2016/03/02 00:51:52 Good point. I'm not reflecting the entire node st
41 104
42 // A hit testing service for scene graphs. 105 // A hit testing service for scene graphs.
43 interface HitTester { 106 interface HitTester {
44 // Performs a hit test on the specified point. 107 // Performs a hit test on the specified point.
45 // 108 //
46 // TODO(jeffbrown): Specify a timestamp to allow for hit-tests of geometry 109 // TODO(jeffbrown): Specify a timestamp to allow for hit-tests of geometry
47 // as it appeared in the recent past. 110 // as it appeared in the recent past.
48 HitTest(mojo.Point point) => (HitTestResult result); 111 HitTest(mojo.Point point) => (HitTestResult result);
49 }; 112 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698