| Index: cc/trees/layer_tree_host_common.cc
|
| diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc
|
| index 8a5a552cee1be34d5a7b4f8a5c238ddc39774f36..a9af3efc8ef9a61ecad065d0912dc234239be9f0 100644
|
| --- a/cc/trees/layer_tree_host_common.cc
|
| +++ b/cc/trees/layer_tree_host_common.cc
|
| @@ -16,7 +16,6 @@
|
| #include "cc/layers/render_surface_impl.h"
|
| #include "cc/trees/layer_sorter.h"
|
| #include "cc/trees/layer_tree_impl.h"
|
| -#include "ui/gfx/point_conversions.h"
|
| #include "ui/gfx/rect_conversions.h"
|
| #include "ui/gfx/transform.h"
|
|
|
| @@ -2427,220 +2426,4 @@ void LayerTreeHostCommon::CalculateDrawProperties(
|
| DCHECK(inputs->root_layer->render_surface());
|
| }
|
|
|
| -static bool PointHitsRect(
|
| - const gfx::PointF& screen_space_point,
|
| - const gfx::Transform& local_space_to_screen_space_transform,
|
| - const gfx::RectF& local_space_rect) {
|
| - // If the transform is not invertible, then assume that this point doesn't hit
|
| - // this rect.
|
| - gfx::Transform inverse_local_space_to_screen_space(
|
| - gfx::Transform::kSkipInitialization);
|
| - if (!local_space_to_screen_space_transform.GetInverse(
|
| - &inverse_local_space_to_screen_space))
|
| - return false;
|
| -
|
| - // Transform the hit test point from screen space to the local space of the
|
| - // given rect.
|
| - bool clipped = false;
|
| - gfx::PointF hit_test_point_in_local_space = MathUtil::ProjectPoint(
|
| - inverse_local_space_to_screen_space, screen_space_point, &clipped);
|
| -
|
| - // If ProjectPoint could not project to a valid value, then we assume that
|
| - // this point doesn't hit this rect.
|
| - if (clipped)
|
| - return false;
|
| -
|
| - return local_space_rect.Contains(hit_test_point_in_local_space);
|
| -}
|
| -
|
| -static bool PointHitsRegion(const gfx::PointF& screen_space_point,
|
| - const gfx::Transform& screen_space_transform,
|
| - const Region& layer_space_region,
|
| - float layer_content_scale_x,
|
| - float layer_content_scale_y) {
|
| - // If the transform is not invertible, then assume that this point doesn't hit
|
| - // this region.
|
| - gfx::Transform inverse_screen_space_transform(
|
| - gfx::Transform::kSkipInitialization);
|
| - if (!screen_space_transform.GetInverse(&inverse_screen_space_transform))
|
| - return false;
|
| -
|
| - // Transform the hit test point from screen space to the local space of the
|
| - // given region.
|
| - bool clipped = false;
|
| - gfx::PointF hit_test_point_in_content_space = MathUtil::ProjectPoint(
|
| - inverse_screen_space_transform, screen_space_point, &clipped);
|
| - gfx::PointF hit_test_point_in_layer_space =
|
| - gfx::ScalePoint(hit_test_point_in_content_space,
|
| - 1.f / layer_content_scale_x,
|
| - 1.f / layer_content_scale_y);
|
| -
|
| - // If ProjectPoint could not project to a valid value, then we assume that
|
| - // this point doesn't hit this region.
|
| - if (clipped)
|
| - return false;
|
| -
|
| - return layer_space_region.Contains(
|
| - gfx::ToRoundedPoint(hit_test_point_in_layer_space));
|
| -}
|
| -
|
| -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()))
|
| - 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()))
|
| - return true;
|
| -
|
| - current_layer = current_layer->parent();
|
| - }
|
| -
|
| - // If we have finished walking all ancestors without having already exited,
|
| - // then the point is not clipped by any ancestors.
|
| - return false;
|
| -}
|
| -
|
| -static bool PointHitsLayer(LayerImpl* layer,
|
| - const gfx::PointF& screen_space_point) {
|
| - gfx::RectF content_rect(layer->content_bounds());
|
| - if (!PointHitsRect(
|
| - screen_space_point, layer->screen_space_transform(), content_rect))
|
| - return false;
|
| -
|
| - // At this point, we think the point does hit the layer, but we need to walk
|
| - // up the parents to ensure that the layer was not clipped in such a way
|
| - // that the hit point actually should not hit the layer.
|
| - if (PointIsClippedBySurfaceOrClipRect(screen_space_point, layer))
|
| - return false;
|
| -
|
| - // Skip the HUD layer.
|
| - if (layer == layer->layer_tree_impl()->hud_layer())
|
| - return false;
|
| -
|
| - return true;
|
| -}
|
| -
|
| -LayerImpl* LayerTreeHostCommon::FindFirstScrollingLayerThatIsHitByPoint(
|
| - const gfx::PointF& screen_space_point,
|
| - const LayerImplList& render_surface_layer_list) {
|
| - typedef LayerIterator<LayerImpl> LayerIteratorType;
|
| - LayerIteratorType end = LayerIteratorType::End(&render_surface_layer_list);
|
| - for (LayerIteratorType it =
|
| - LayerIteratorType::Begin(&render_surface_layer_list);
|
| - it != end;
|
| - ++it) {
|
| - // We don't want to consider render_surfaces for hit testing.
|
| - if (!it.represents_itself())
|
| - continue;
|
| -
|
| - LayerImpl* current_layer = (*it);
|
| - if (!PointHitsLayer(current_layer, screen_space_point))
|
| - continue;
|
| -
|
| - if (current_layer->scrollable())
|
| - return current_layer;
|
| - }
|
| -
|
| - return NULL;
|
| -}
|
| -
|
| -LayerImpl* LayerTreeHostCommon::FindLayerThatIsHitByPoint(
|
| - const gfx::PointF& screen_space_point,
|
| - const LayerImplList& render_surface_layer_list) {
|
| - LayerImpl* found_layer = NULL;
|
| -
|
| - typedef LayerIterator<LayerImpl> LayerIteratorType;
|
| - LayerIteratorType end = LayerIteratorType::End(&render_surface_layer_list);
|
| - for (LayerIteratorType
|
| - it = LayerIteratorType::Begin(&render_surface_layer_list);
|
| - it != end;
|
| - ++it) {
|
| - // We don't want to consider render_surfaces for hit testing.
|
| - if (!it.represents_itself())
|
| - continue;
|
| -
|
| - LayerImpl* current_layer = (*it);
|
| - if (!PointHitsLayer(current_layer, screen_space_point))
|
| - continue;
|
| -
|
| - found_layer = current_layer;
|
| - break;
|
| - }
|
| -
|
| - // This can potentially return NULL, which means the screen_space_point did
|
| - // not successfully hit test any layers, not even the root layer.
|
| - return found_layer;
|
| -}
|
| -
|
| -LayerImpl* LayerTreeHostCommon::FindLayerThatIsHitByPointInTouchHandlerRegion(
|
| - const gfx::PointF& screen_space_point,
|
| - const LayerImplList& render_surface_layer_list) {
|
| - typedef LayerIterator<LayerImpl> LayerIteratorType;
|
| - LayerIteratorType end = LayerIteratorType::End(&render_surface_layer_list);
|
| - for (LayerIteratorType it =
|
| - LayerIteratorType::Begin(&render_surface_layer_list);
|
| - it != end;
|
| - ++it) {
|
| - // We don't want to consider render_surfaces for hit testing.
|
| - if (!it.represents_itself())
|
| - continue;
|
| -
|
| - LayerImpl* current_layer = (*it);
|
| - if (!PointHitsLayer(current_layer, screen_space_point))
|
| - continue;
|
| -
|
| - if (LayerTreeHostCommon::LayerHasTouchEventHandlersAt(screen_space_point,
|
| - current_layer))
|
| - return current_layer;
|
| -
|
| - // Note that we could stop searching if we hit a layer we know to be
|
| - // opaque to hit-testing, but knowing that reliably is tricky (eg. due to
|
| - // CSS pointer-events: none). Also blink has an optimization for the
|
| - // common case of an entire document having handlers where it doesn't
|
| - // report any rects for child layers (since it knows they can't exceed
|
| - // the document bounds).
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -bool LayerTreeHostCommon::LayerHasTouchEventHandlersAt(
|
| - const gfx::PointF& screen_space_point,
|
| - LayerImpl* layer_impl) {
|
| - if (layer_impl->touch_event_handler_region().IsEmpty())
|
| - return false;
|
| -
|
| - if (!PointHitsRegion(screen_space_point,
|
| - layer_impl->screen_space_transform(),
|
| - layer_impl->touch_event_handler_region(),
|
| - layer_impl->contents_scale_x(),
|
| - layer_impl->contents_scale_y()))
|
| - return false;
|
| -
|
| - // At this point, we think the point does hit the touch event handler region
|
| - // on the layer, but we need to walk up the parents to ensure that the layer
|
| - // was not clipped in such a way that the hit point actually should not hit
|
| - // the layer.
|
| - if (PointIsClippedBySurfaceOrClipRect(screen_space_point, layer_impl))
|
| - return false;
|
| -
|
| - return true;
|
| -}
|
| } // namespace cc
|
|
|