OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/trees/layer_tree_impl.h" | 5 #include "cc/trees/layer_tree_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 1737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1748 distance_to_intersection > | 1748 distance_to_intersection > |
1749 state->closest_distance + std::numeric_limits<float>::epsilon(); | 1749 state->closest_distance + std::numeric_limits<float>::epsilon(); |
1750 | 1750 |
1751 if (!state->closest_match || in_front_of_previous_candidate) { | 1751 if (!state->closest_match || in_front_of_previous_candidate) { |
1752 state->closest_distance = distance_to_intersection; | 1752 state->closest_distance = distance_to_intersection; |
1753 state->closest_match = layer; | 1753 state->closest_match = layer; |
1754 } | 1754 } |
1755 } | 1755 } |
1756 } | 1756 } |
1757 | 1757 |
1758 static bool ScrollsAnyDrawnRenderSurfaceLayerListMember(LayerImpl* layer) { | 1758 static bool ScrollsOrScrollbarAnyDrawnRenderSurfaceLayerListMember( |
1759 if (!layer->scrollable()) | 1759 LayerImpl* layer) { |
| 1760 if (!layer->scrollable() && !layer->ToScrollbarLayer()) |
1760 return false; | 1761 return false; |
1761 if (layer->layer_or_descendant_is_drawn()) | 1762 if (layer->layer_or_descendant_is_drawn()) |
1762 return true; | 1763 return true; |
1763 | 1764 |
1764 if (!layer->scroll_children()) | 1765 if (!layer->scroll_children()) |
1765 return false; | 1766 return false; |
1766 for (std::set<LayerImpl*>::const_iterator it = | 1767 for (std::set<LayerImpl*>::const_iterator it = |
1767 layer->scroll_children()->begin(); | 1768 layer->scroll_children()->begin(); |
1768 it != layer->scroll_children()->end(); ++it) { | 1769 it != layer->scroll_children()->end(); ++it) { |
1769 if ((*it)->layer_or_descendant_is_drawn()) | 1770 if ((*it)->layer_or_descendant_is_drawn()) |
1770 return true; | 1771 return true; |
1771 } | 1772 } |
1772 return false; | 1773 return false; |
1773 } | 1774 } |
1774 | 1775 |
1775 struct FindScrollingLayerFunctor { | 1776 struct FindScrollingLayerOrScrollbarLayerFunctor { |
1776 bool operator()(LayerImpl* layer) const { | 1777 bool operator()(LayerImpl* layer) const { |
1777 return ScrollsAnyDrawnRenderSurfaceLayerListMember(layer); | 1778 return ScrollsOrScrollbarAnyDrawnRenderSurfaceLayerListMember(layer); |
1778 } | 1779 } |
1779 }; | 1780 }; |
1780 | 1781 |
1781 LayerImpl* LayerTreeImpl::FindFirstScrollingLayerThatIsHitByPoint( | 1782 LayerImpl* |
| 1783 LayerTreeImpl::FindFirstScrollingLayerOrScrollbarLayerThatIsHitByPoint( |
1782 const gfx::PointF& screen_space_point) { | 1784 const gfx::PointF& screen_space_point) { |
1783 FindClosestMatchingLayerState state; | 1785 FindClosestMatchingLayerState state; |
1784 FindClosestMatchingLayer( | 1786 FindClosestMatchingLayer(screen_space_point, root_layer(), |
1785 screen_space_point, root_layer(), FindScrollingLayerFunctor(), | 1787 FindScrollingLayerOrScrollbarLayerFunctor(), |
1786 property_trees_.transform_tree, property_trees_.clip_tree, &state); | 1788 property_trees_.transform_tree, |
| 1789 property_trees_.clip_tree, &state); |
1787 return state.closest_match; | 1790 return state.closest_match; |
1788 } | 1791 } |
1789 | 1792 |
1790 struct HitTestVisibleScrollableOrTouchableFunctor { | 1793 struct HitTestVisibleScrollableOrTouchableFunctor { |
1791 bool operator()(LayerImpl* layer) const { | 1794 bool operator()(LayerImpl* layer) const { |
1792 return layer->IsDrawnRenderSurfaceLayerListMember() || | 1795 return layer->IsDrawnRenderSurfaceLayerListMember() || |
1793 ScrollsAnyDrawnRenderSurfaceLayerListMember(layer) || | 1796 ScrollsOrScrollbarAnyDrawnRenderSurfaceLayerListMember(layer) || |
1794 !layer->touch_event_handler_region().IsEmpty(); | 1797 !layer->touch_event_handler_region().IsEmpty(); |
1795 } | 1798 } |
1796 }; | 1799 }; |
1797 | 1800 |
1798 LayerImpl* LayerTreeImpl::FindLayerThatIsHitByPoint( | 1801 LayerImpl* LayerTreeImpl::FindLayerThatIsHitByPoint( |
1799 const gfx::PointF& screen_space_point) { | 1802 const gfx::PointF& screen_space_point) { |
1800 if (!root_layer()) | 1803 if (!root_layer()) |
1801 return NULL; | 1804 return NULL; |
1802 bool update_lcd_text = false; | 1805 bool update_lcd_text = false; |
1803 if (!UpdateDrawProperties(update_lcd_text)) | 1806 if (!UpdateDrawProperties(update_lcd_text)) |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2102 } | 2105 } |
2103 | 2106 |
2104 void LayerTreeImpl::ResetAllChangeTracking(PropertyTrees::ResetFlags flag) { | 2107 void LayerTreeImpl::ResetAllChangeTracking(PropertyTrees::ResetFlags flag) { |
2105 layers_that_should_push_properties_.clear(); | 2108 layers_that_should_push_properties_.clear(); |
2106 for (auto* layer : *this) | 2109 for (auto* layer : *this) |
2107 layer->ResetChangeTracking(); | 2110 layer->ResetChangeTracking(); |
2108 property_trees_.ResetAllChangeTracking(flag); | 2111 property_trees_.ResetAllChangeTracking(flag); |
2109 } | 2112 } |
2110 | 2113 |
2111 } // namespace cc | 2114 } // namespace cc |
OLD | NEW |