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

Unified Diff: cc/trees/layer_tree_impl.cc

Issue 328753002: Clean up PointIsClippedBySurfaceOrClipRect (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 6 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: 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,

Powered by Google App Engine
This is Rietveld 408576698