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 layer other than this one, prevent the scroll from | |
ajuma
2016/03/16 21:49:24
"a node"
sunxd
2016/03/16 23:30:23
Done.
| |
1670 // propagating to this layer. | |
ajuma
2016/03/16 21:49:24
"this node"
sunxd
2016/03/16 23:30:23
Done.
| |
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 |