| Index: cc/trees/layer_tree_impl.cc
|
| diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
|
| index 9932a33be03d59d47c6ea65ad437c8a46b4e76a6..48d73aab25e6ddd10a74a29835954b2be92f9112 100644
|
| --- a/cc/trees/layer_tree_impl.cc
|
| +++ b/cc/trees/layer_tree_impl.cc
|
| @@ -24,6 +24,7 @@
|
| #include "cc/trees/layer_tree_host_common.h"
|
| #include "cc/trees/layer_tree_host_impl.h"
|
| #include "ui/gfx/point_conversions.h"
|
| +#include "ui/gfx/rect_conversions.h"
|
| #include "ui/gfx/size_conversions.h"
|
| #include "ui/gfx/vector2d_conversions.h"
|
|
|
| @@ -1095,35 +1096,33 @@ static bool PointHitsRegion(const gfx::PointF& screen_space_point,
|
| gfx::ToRoundedPoint(hit_test_point_in_layer_space));
|
| }
|
|
|
| +static LayerImpl* GetNextClippingLayer(LayerImpl* layer) {
|
| + if (layer->scroll_parent())
|
| + return layer->scroll_parent();
|
| + if (layer->clip_parent())
|
| + return layer->clip_parent();
|
| + return layer->parent();
|
| +}
|
| +
|
| static bool PointIsClippedBySurfaceOrClipRect(
|
| const gfx::PointF& screen_space_point,
|
| LayerImpl* layer) {
|
| - LayerImpl* current_layer = layer;
|
| -
|
| // Walk up the layer tree and hit-test any render_surfaces and any layer
|
| // clip rects that are active.
|
| - while (current_layer) {
|
| - if (current_layer->render_surface() &&
|
| - !PointHitsRect(
|
| - screen_space_point,
|
| - current_layer->render_surface()->screen_space_transform(),
|
| - current_layer->render_surface()->content_rect(),
|
| - NULL))
|
| + for (; layer; layer = GetNextClippingLayer(layer)) {
|
| + if (layer->render_surface() &&
|
| + !PointHitsRect(screen_space_point,
|
| + layer->render_surface()->screen_space_transform(),
|
| + layer->render_surface()->content_rect(),
|
| + NULL))
|
| return true;
|
|
|
| - // Note that drawable content rects are actually in target surface space, so
|
| - // the transform we have to provide is the target surface's
|
| - // screen_space_transform.
|
| - LayerImpl* render_target = current_layer->render_target();
|
| - if (LayerClipsSubtree(current_layer) &&
|
| - !PointHitsRect(
|
| - screen_space_point,
|
| - render_target->render_surface()->screen_space_transform(),
|
| - current_layer->drawable_content_rect(),
|
| - NULL))
|
| + if (LayerClipsSubtree(layer) &&
|
| + !PointHitsRect(screen_space_point,
|
| + layer->screen_space_transform(),
|
| + gfx::Rect(layer->content_bounds()),
|
| + NULL))
|
| return true;
|
| -
|
| - current_layer = current_layer->parent();
|
| }
|
|
|
| // If we have finished walking all ancestors without having already exited,
|
|
|