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

Unified 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: 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
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..49c055bfc1a94c9bd6dedf42b842a4bdb2f5d7df 100644
--- a/mojo/services/gfx/composition/interfaces/hit_tests.mojom
+++ b/mojo/services/gfx/composition/interfaces/hit_tests.mojom
@@ -8,42 +8,100 @@ 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.
- SceneToken scene_token;
-
- // The version of the scene which was consulted as part of evaluating the
- // hit test.
- uint32 scene_version;
+ // 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 id of the node which was hit.
- uint32 node_id;
+ // 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,
+ };
- // The hit test id of the node which was hit.
- uint32 hit_id;
+ // Specifies the visibility of the node for hit testing purposes.
+ // The default is opaque.
+ Visibility visibility = Visibility.OPAQUE;
- // The coordinates of the hit within the node's content space.
- mojo.Point intersection;
-};
+ // When set to true, prevents a node's children from being hit tested.
+ bool prune = false;
-// 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;
+ // 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;
};
// A hit testing service for scene graphs.
interface HitTester {
// Performs a hit test on the specified point.
//
- // TODO(jeffbrown): Specify a timestamp to allow for hit-tests of geometry
- // as it appeared in the recent past.
+ // TODO(jeffbrown): Specify a presentation timestamp to allow for
+ // hit-tests of geometry as it appeared to the user in the recent past.
HitTest(mojo.Point point) => (HitTestResult result);
};
+
+// The result of a hit test operation.
+//
+// Hit test results form a hit tree with information about the nodes which
+// were hit and the scenes which contain them. The structure of the hit
+// tree reflects the path that the scene graph was traversed during the
+// hit test.
+//
+// To walk the hit nodes in dispatch order, perform a post-order traversal
+// of the hit tree starting at |root| and processing children before their
+// parents.
+struct HitTestResult {
+ // A tree of hits beginning at the root scene, or null if nothing was hit.
+ SceneHit? root;
+};
+
+// An element in a hit tree.
+// This either contains a reference to another scene which contains hits or
+// to a specific node within the containing scene which was hit.
+union Hit {
+ SceneHit scene;
+ NodeHit node;
+};
+
+// Describes a collection of hits within a scene.
+struct SceneHit {
+ // The scene token of the scene which contains hits.
+ SceneToken scene_token;
+
+ // The version of the scene which was consulted at the time the hit test
+ // was performed.
+ uint32 scene_version;
+
+ // The array of hits within this scene, in dispatch order.
+ // This list always contains at least one entry.
+ array<Hit> hits;
+};
+
+// Describes the point of intersection of a hit test with a node.
+struct NodeHit {
+ // The node id of the node which was hit.
+ uint32 node_id;
+
+ // The coordinates of the hit within the node's content space.
+ mojo.Point intersection;
+};
« no previous file with comments | « mojo/services/gfx/composition/cpp/formatting.cc ('k') | mojo/services/gfx/composition/interfaces/nodes.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698