OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "cc/base/math_util.h" | 11 #include "cc/base/math_util.h" |
12 #include "cc/input/main_thread_scrolling_reason.h" | 12 #include "cc/input/main_thread_scrolling_reason.h" |
| 13 #include "cc/input/scroll_state.h" |
13 #include "cc/layers/layer_impl.h" | 14 #include "cc/layers/layer_impl.h" |
14 #include "cc/proto/gfx_conversions.h" | 15 #include "cc/proto/gfx_conversions.h" |
15 #include "cc/proto/property_tree.pb.h" | 16 #include "cc/proto/property_tree.pb.h" |
16 #include "cc/proto/scroll_offset.pb.h" | 17 #include "cc/proto/scroll_offset.pb.h" |
17 #include "cc/proto/synced_property_conversions.h" | 18 #include "cc/proto/synced_property_conversions.h" |
18 #include "cc/proto/transform.pb.h" | 19 #include "cc/proto/transform.pb.h" |
19 #include "cc/proto/vector2df.pb.h" | 20 #include "cc/proto/vector2df.pb.h" |
20 #include "cc/trees/layer_tree_host_common.h" | 21 #include "cc/trees/layer_tree_host_common.h" |
21 #include "cc/trees/layer_tree_impl.h" | 22 #include "cc/trees/layer_tree_impl.h" |
22 #include "cc/trees/property_tree.h" | 23 #include "cc/trees/property_tree.h" |
(...skipping 1627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1650 int layer_id) const { | 1651 int layer_id) const { |
1651 DCHECK(!property_trees()->is_main_thread); | 1652 DCHECK(!property_trees()->is_main_thread); |
1652 if (synced_scroll_offset(layer_id)) | 1653 if (synced_scroll_offset(layer_id)) |
1653 return property_trees()->is_active | 1654 return property_trees()->is_active |
1654 ? synced_scroll_offset(layer_id)->Delta() | 1655 ? synced_scroll_offset(layer_id)->Delta() |
1655 : synced_scroll_offset(layer_id)->PendingDelta().get(); | 1656 : synced_scroll_offset(layer_id)->PendingDelta().get(); |
1656 else | 1657 else |
1657 return gfx::ScrollOffset(); | 1658 return gfx::ScrollOffset(); |
1658 } | 1659 } |
1659 | 1660 |
| 1661 void ScrollTree::DistributeScroll(ScrollNode* scroll_node, |
| 1662 ScrollState* scroll_state) { |
| 1663 DCHECK(scroll_node && scroll_state); |
| 1664 if (scroll_state->FullyConsumed()) |
| 1665 return; |
| 1666 scroll_state->DistributeToScrollChainDescendant(); |
| 1667 |
| 1668 // If the scroll doesn't propagate, and we're currently scrolling |
| 1669 // a node other than this one, prevent the scroll from |
| 1670 // propagating to this node. |
| 1671 if (!scroll_state->should_propagate() && |
| 1672 scroll_state->delta_consumed_for_scroll_sequence() && |
| 1673 scroll_state->current_native_scrolling_node()->id != scroll_node->id) { |
| 1674 return; |
| 1675 } |
| 1676 |
| 1677 scroll_state->layer_tree_impl()->ApplyScroll(scroll_node, scroll_state); |
| 1678 } |
| 1679 |
| 1680 gfx::Vector2dF ScrollTree::ScrollBy(ScrollNode* scroll_node, |
| 1681 const gfx::Vector2dF& scroll, |
| 1682 LayerTreeImpl* layer_tree_impl) { |
| 1683 gfx::ScrollOffset adjusted_scroll(scroll); |
| 1684 if (!scroll_node->data.user_scrollable_horizontal) |
| 1685 adjusted_scroll.set_x(0); |
| 1686 if (!scroll_node->data.user_scrollable_vertical) |
| 1687 adjusted_scroll.set_y(0); |
| 1688 DCHECK(scroll_node->data.scrollable); |
| 1689 gfx::ScrollOffset old_offset = current_scroll_offset(scroll_node->owner_id); |
| 1690 gfx::ScrollOffset new_offset = |
| 1691 ClampScrollOffsetToLimits(old_offset + adjusted_scroll, scroll_node); |
| 1692 if (SetScrollOffset(scroll_node->owner_id, new_offset)) |
| 1693 layer_tree_impl->DidUpdateScrollOffset(scroll_node->owner_id, |
| 1694 scroll_node->data.transform_id); |
| 1695 |
| 1696 gfx::ScrollOffset unscrolled = |
| 1697 old_offset + gfx::ScrollOffset(scroll) - new_offset; |
| 1698 return gfx::Vector2dF(unscrolled.x(), unscrolled.y()); |
| 1699 } |
| 1700 |
| 1701 gfx::ScrollOffset ScrollTree::ClampScrollOffsetToLimits( |
| 1702 gfx::ScrollOffset offset, |
| 1703 ScrollNode* scroll_node) const { |
| 1704 offset.SetToMin(MaxScrollOffset(scroll_node->id)); |
| 1705 offset.SetToMax(gfx::ScrollOffset()); |
| 1706 return offset; |
| 1707 } |
| 1708 |
1660 PropertyTrees::PropertyTrees() | 1709 PropertyTrees::PropertyTrees() |
1661 : needs_rebuild(true), | 1710 : needs_rebuild(true), |
1662 non_root_surfaces_enabled(true), | 1711 non_root_surfaces_enabled(true), |
1663 changed(false), | 1712 changed(false), |
1664 full_tree_damaged(false), | 1713 full_tree_damaged(false), |
1665 sequence_number(0), | 1714 sequence_number(0), |
1666 is_main_thread(true), | 1715 is_main_thread(true), |
1667 is_active(false) { | 1716 is_active(false) { |
1668 transform_tree.SetPropertyTrees(this); | 1717 transform_tree.SetPropertyTrees(this); |
1669 effect_tree.SetPropertyTrees(this); | 1718 effect_tree.SetPropertyTrees(this); |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1801 break; | 1850 break; |
1802 case ALL_TREES: | 1851 case ALL_TREES: |
1803 transform_tree.ResetChangeTracking(); | 1852 transform_tree.ResetChangeTracking(); |
1804 effect_tree.ResetChangeTracking(); | 1853 effect_tree.ResetChangeTracking(); |
1805 } | 1854 } |
1806 changed = false; | 1855 changed = false; |
1807 full_tree_damaged = false; | 1856 full_tree_damaged = false; |
1808 } | 1857 } |
1809 | 1858 |
1810 } // namespace cc | 1859 } // namespace cc |
OLD | NEW |