Chromium Code Reviews| Index: mojo/services/gfx/composition/interfaces/hit_tests.mojom |
| diff --git a/mojo/services/gfx/composition/interfaces/hit_tests.mojom b/mojo/services/gfx/composition/interfaces/hit_tests.mojom |
| index d18d868d63c481f534c3aced72d4b30bbea680a8..756e25ae387b4587d1ab3a7b546179f3ed9f8109 100644 |
| --- a/mojo/services/gfx/composition/interfaces/hit_tests.mojom |
| +++ b/mojo/services/gfx/composition/interfaces/hit_tests.mojom |
| @@ -8,35 +8,98 @@ module mojo.gfx.composition; |
| import "mojo/services/geometry/interfaces/geometry.mojom"; |
| import "mojo/services/gfx/composition/interfaces/scene_token.mojom"; |
| -// Indicates that hit testing is not needed for a given node. |
| -const uint32 kHitIdNone = 0; |
| +// Determines how a node behaves during hit testing. |
| +// |
| +// See |Node| for more details of the hit testing traversal process. |
| +struct HitTestBehavior { |
| + // The visibility specifies how a node itself is hit and its effect on |
| + // the hit testing traversal. |
| + enum Visibility { |
| + // The node can be hit and prevents other targets visually behind the |
| + // node from being hit. This is the default. |
| + // |
| + // Opaque targets are useful for UI elements like buttons which cover and |
| + // block interaction with content visually behind them. |
| + OPAQUE, |
| -// Provides information about the point of intersection of a hit test with |
| -// a node in a scene graph. |
| -struct Hit { |
| - // The scene token of the scene which was hit. |
| + // The node can be hit and allows other targets visually behind the node |
| + // to also be hit. |
| + // |
| + // Translucent targets are useful for UI elements like dimissed drawers |
| + // which may not obscure content visually behind them but which do need |
| + // to intercept gestures in that area (perhaps to reveal themselves). |
| + TRANSLUCENT, |
| + |
| + // The node cannot be hit. |
| + // |
| + // Invisible targets are useful for explicitly suppressing hit testing |
| + // for a node and its children when combined with the |prune| flag. |
| + INVISIBLE, |
| + }; |
| + |
| + // Specifies the visibility of the node for hit testing purposes. |
| + // The default is opaque. |
| + Visibility visibility = Visibility.OPAQUE; |
| + |
| + // When set to true, prevents a node's children from being hit tested. |
| + bool prune = false; |
| + |
| + // The rectangle within the node's content space to test for hits. |
| + // If null, the node's entire clip region is tested for hits. |
| + // |
| + // TODO(jeffbrown): Support more complex hit test regions and masks. |
| + mojo.Rect? hit_rect; |
| +}; |
| + |
| +// The result of a hit test operation. |
| +// |
| +// Hit test results form a tree which describes which nodes were hit within |
| +// the scene graph. It is essentially a subtree of the scene graph which |
| +// only includes nodes which were hit by the hit test. Structural information |
| +// about the scene graph is retained but only limited information about the |
| +// nodes themselves is included. |
| +// |
| +// To walk the hits in dispatch order, perform a post-order traversal of the |
| +// hit tree, processing children before their parents. |
| +struct HitTestResult { |
| + // If a hit occurred, contains information about hits which occurred within |
| + // the root scene of the scene graph. |
| + SceneHit? scene_hit; |
| +}; |
| + |
| +// Describes a collection of hits within a scene in the scene graph. |
| +struct SceneHit { |
| + // The scene token of the scene which contains the hit. |
| SceneToken scene_token; |
| - // The version of the scene which was consulted as part of evaluating the |
| - // hit test. |
| + // The version of the scene which was consulted at the time the hit test |
| + // was performed. |
| uint32 scene_version; |
| + // The nodes which were hit, in order of traversal. |
| + // This list always contains at least one node. |
| + array<NodeHit> node_hits; |
| +}; |
| + |
| +// Describes the point of intersection of a hit test with a particular |
| +// node within a scene. |
| +struct NodeHit { |
| // The node id of the node which was hit. |
| uint32 node_id; |
| - // The hit test id of the node which was hit. |
| - uint32 hit_id; |
| + // True if the node was visible to hit testing and would like to receive |
| + // events related to the hit. False if the node is only being included |
| + // for structural reasons because of a scene which it references which |
| + // was hit. |
| + bool visible; |
| // The coordinates of the hit within the node's content space. |
| mojo.Point intersection; |
| -}; |
| -// The result of a hit test operation. |
| -struct HitTestResult { |
| - // A sorted list of hits in dispatch order from the top-most hit node |
| - // to the nodes underneath it and containing it, or an empty array if none. |
| - // Omits nodes for which the hit_id was |kHitIdNone|. |
| - array<Hit> hits; |
| + // If the node had a |SceneNodeOp| and a hit occurred within the scene |
| + // which it referenced, contains information about the hits which occurred |
| + // within that scene. |
| + SceneHit? scene_hit; |
| }; |
|
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
|
| // A hit testing service for scene graphs. |