Index: services/gfx/compositor/graph/node_def.h |
diff --git a/services/gfx/compositor/graph/node_def.h b/services/gfx/compositor/graph/node_def.h |
index 5e84d1a6634f9b27f890d40dc2da9f47c2d2103c..7448e8821b9bad600edb6c6ec770a87066b615ff 100644 |
--- a/services/gfx/compositor/graph/node_def.h |
+++ b/services/gfx/compositor/graph/node_def.h |
@@ -14,6 +14,8 @@ |
#include "services/gfx/compositor/graph/snapshot.h" |
class SkCanvas; |
+struct SkPoint; |
+class SkMatrix; |
namespace compositor { |
@@ -35,6 +37,7 @@ class NodeDef : public base::RefCounted<NodeDef> { |
NodeDef(uint32_t node_id, |
mojo::TransformPtr content_transform, |
mojo::RectPtr content_clip, |
+ mojo::gfx::composition::HitTestBehaviorPtr hit_test_behavior, |
Combinator combinator, |
const std::vector<uint32_t>& child_node_ids); |
@@ -42,6 +45,9 @@ class NodeDef : public base::RefCounted<NodeDef> { |
const mojo::Transform* content_transform() const { |
return content_transform_.get(); |
} |
+ const mojo::gfx::composition::HitTestBehavior* hit_test_behavior() const { |
+ return hit_test_behavior_.get(); |
+ } |
const mojo::Rect* content_clip() const { return content_clip_.get(); } |
Combinator combinator() const { return combinator_; } |
const std::vector<uint32_t>& child_node_ids() const { |
@@ -68,6 +74,18 @@ class NodeDef : public base::RefCounted<NodeDef> { |
const Snapshot* snapshot, |
SkCanvas* canvas) const; |
+ // Performs a hit test at the specified point. |
+ // The |point| is the hit tested point in the parent's coordinate space. |
+ // The |global_to_parent_transform| is the accumulated transform from the |
+ // global coordinate space to the parent's coordinate space. |
+ // Adds hit information for the node to |hits|. |
+ // Returns true if the search was terminated by an opaque hit. |
+ bool HitTest(const SceneContent* content, |
+ const Snapshot* snapshot, |
+ const SkPoint& parent_point, |
+ const SkMatrix& global_to_parent_transform, |
+ mojo::Array<mojo::gfx::composition::HitPtr>* hits) const; |
+ |
protected: |
friend class base::RefCounted<NodeDef>; |
virtual ~NodeDef(); |
@@ -85,10 +103,24 @@ class NodeDef : public base::RefCounted<NodeDef> { |
const Snapshot* snapshot, |
SkCanvas* canvas) const; |
+ virtual bool HitTestInner( |
+ const SceneContent* content, |
+ const Snapshot* snapshot, |
+ const SkPoint& local_point, |
+ const SkMatrix& global_to_local_transform, |
+ mojo::Array<mojo::gfx::composition::HitPtr>* hits) const; |
+ |
private: |
+ bool HitTestSelf(const SceneContent* content, |
+ const Snapshot* snapshot, |
+ const SkPoint& local_point, |
+ const SkMatrix& global_to_local_transform, |
+ mojo::Array<mojo::gfx::composition::HitPtr>* hits) const; |
+ |
uint32_t const node_id_; |
mojo::TransformPtr const content_transform_; |
mojo::RectPtr const content_clip_; |
+ mojo::gfx::composition::HitTestBehaviorPtr const hit_test_behavior_; |
Combinator const combinator_; |
std::vector<uint32_t> const child_node_ids_; |
@@ -103,6 +135,7 @@ class RectNodeDef : public NodeDef { |
RectNodeDef(uint32_t node_id, |
mojo::TransformPtr content_transform, |
mojo::RectPtr content_clip, |
+ mojo::gfx::composition::HitTestBehaviorPtr hit_test_behavior, |
Combinator combinator, |
const std::vector<uint32_t>& child_node_ids, |
const mojo::Rect& content_rect, |
@@ -133,6 +166,7 @@ class ImageNodeDef : public NodeDef { |
ImageNodeDef(uint32_t node_id, |
mojo::TransformPtr content_transform, |
mojo::RectPtr content_clip, |
+ mojo::gfx::composition::HitTestBehaviorPtr hit_test_behavior, |
Combinator combinator, |
const std::vector<uint32_t>& child_node_ids, |
const mojo::Rect& content_rect, |
@@ -171,6 +205,7 @@ class SceneNodeDef : public NodeDef { |
SceneNodeDef(uint32_t node_id, |
mojo::TransformPtr content_transform, |
mojo::RectPtr content_clip, |
+ mojo::gfx::composition::HitTestBehaviorPtr hit_test_behavior, |
Combinator combinator, |
const std::vector<uint32_t>& child_node_ids, |
uint32_t scene_resource_id, |
@@ -191,6 +226,13 @@ class SceneNodeDef : public NodeDef { |
const Snapshot* snapshot, |
SkCanvas* canvas) const override; |
+ bool HitTestInner( |
+ const SceneContent* content, |
+ const Snapshot* snapshot, |
+ const SkPoint& local_point, |
+ const SkMatrix& global_to_local_transform, |
+ mojo::Array<mojo::gfx::composition::HitPtr>* hits) const override; |
+ |
private: |
uint32_t const scene_resource_id_; |
uint32_t const scene_version_; |
@@ -206,6 +248,7 @@ class LayerNodeDef : public NodeDef { |
LayerNodeDef(uint32_t node_id, |
mojo::TransformPtr content_transform, |
mojo::RectPtr content_clip, |
+ mojo::gfx::composition::HitTestBehaviorPtr hit_test_behavior, |
Combinator combinator, |
const std::vector<uint32_t>& child_node_ids, |
const mojo::Size& size, |