OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/layers/layer_impl.h" | 5 #include "cc/layers/layer_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <utility> | 10 #include <utility> |
(...skipping 1010 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1021 bounds_.height() + bounds_delta_.y()); | 1021 bounds_.height() + bounds_delta_.y()); |
1022 } | 1022 } |
1023 | 1023 |
1024 void LayerImpl::SetBounds(const gfx::Size& bounds) { | 1024 void LayerImpl::SetBounds(const gfx::Size& bounds) { |
1025 if (bounds_ == bounds) | 1025 if (bounds_ == bounds) |
1026 return; | 1026 return; |
1027 | 1027 |
1028 bounds_ = bounds; | 1028 bounds_ = bounds; |
1029 | 1029 |
1030 layer_tree_impl()->DidUpdateScrollState(id()); | 1030 layer_tree_impl()->DidUpdateScrollState(id()); |
| 1031 |
1031 if (masks_to_bounds()) | 1032 if (masks_to_bounds()) |
1032 NoteLayerPropertyChangedForSubtree(); | 1033 NoteLayerPropertyChangedForSubtree(); |
1033 else | 1034 else |
1034 NoteLayerPropertyChanged(); | 1035 NoteLayerPropertyChanged(); |
1035 } | 1036 } |
1036 | 1037 |
1037 void LayerImpl::SetBoundsDelta(const gfx::Vector2dF& bounds_delta) { | 1038 void LayerImpl::SetBoundsDelta(const gfx::Vector2dF& bounds_delta) { |
1038 DCHECK(IsActive()); | 1039 DCHECK(IsActive()); |
1039 if (bounds_delta_ == bounds_delta) | 1040 if (bounds_delta_ == bounds_delta) |
1040 return; | 1041 return; |
1041 | 1042 |
1042 bounds_delta_ = bounds_delta; | 1043 bounds_delta_ = bounds_delta; |
1043 | 1044 |
1044 TransformTree& transform_tree = | 1045 PropertyTrees* property_trees = layer_tree_impl()->property_trees(); |
1045 layer_tree_impl()->property_trees()->transform_tree; | |
1046 if (this == layer_tree_impl()->InnerViewportContainerLayer()) | 1046 if (this == layer_tree_impl()->InnerViewportContainerLayer()) |
1047 transform_tree.SetInnerViewportBoundsDelta(bounds_delta); | 1047 property_trees->SetInnerViewportContainerBoundsDelta(bounds_delta); |
1048 else if (this == layer_tree_impl()->OuterViewportContainerLayer()) | 1048 else if (this == layer_tree_impl()->OuterViewportContainerLayer()) |
1049 transform_tree.SetOuterViewportBoundsDelta(bounds_delta); | 1049 property_trees->SetOuterViewportContainerBoundsDelta(bounds_delta); |
| 1050 else if (this == layer_tree_impl()->InnerViewportScrollLayer()) |
| 1051 property_trees->SetInnerViewportScrollBoundsDelta(bounds_delta); |
1050 | 1052 |
1051 layer_tree_impl()->DidUpdateScrollState(id()); | 1053 layer_tree_impl()->DidUpdateScrollState(id()); |
1052 | 1054 |
1053 if (masks_to_bounds()) { | 1055 if (masks_to_bounds()) { |
1054 // If layer is clipping, then update the clip node using the new bounds. | 1056 // If layer is clipping, then update the clip node using the new bounds. |
1055 ClipNode* clip_node = | 1057 ClipNode* clip_node = property_trees->clip_tree.Node(clip_tree_index()); |
1056 layer_tree_impl()->property_trees()->clip_tree.Node(clip_tree_index()); | |
1057 if (clip_node) { | 1058 if (clip_node) { |
1058 DCHECK(id() == clip_node->owner_id); | 1059 DCHECK(id() == clip_node->owner_id); |
1059 clip_node->data.clip = gfx::RectF( | 1060 clip_node->data.clip = gfx::RectF( |
1060 gfx::PointF() + offset_to_transform_parent(), gfx::SizeF(bounds())); | 1061 gfx::PointF() + offset_to_transform_parent(), gfx::SizeF(bounds())); |
1061 layer_tree_impl()->property_trees()->clip_tree.set_needs_update(true); | 1062 property_trees->clip_tree.set_needs_update(true); |
1062 } | 1063 } |
1063 | 1064 |
1064 NoteLayerPropertyChangedForSubtree(); | 1065 NoteLayerPropertyChangedForSubtree(); |
1065 } else { | 1066 } else { |
1066 NoteLayerPropertyChanged(); | 1067 NoteLayerPropertyChanged(); |
1067 } | 1068 } |
1068 } | 1069 } |
1069 | 1070 |
1070 void LayerImpl::SetMaskLayer(scoped_ptr<LayerImpl> mask_layer) { | 1071 void LayerImpl::SetMaskLayer(scoped_ptr<LayerImpl> mask_layer) { |
1071 int new_layer_id = mask_layer ? mask_layer->id() : -1; | 1072 int new_layer_id = mask_layer ? mask_layer->id() : -1; |
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1612 } | 1613 } |
1613 | 1614 |
1614 void LayerImpl::DidBeginTracing() {} | 1615 void LayerImpl::DidBeginTracing() {} |
1615 | 1616 |
1616 void LayerImpl::ReleaseResources() {} | 1617 void LayerImpl::ReleaseResources() {} |
1617 | 1618 |
1618 void LayerImpl::RecreateResources() { | 1619 void LayerImpl::RecreateResources() { |
1619 } | 1620 } |
1620 | 1621 |
1621 gfx::ScrollOffset LayerImpl::MaxScrollOffset() const { | 1622 gfx::ScrollOffset LayerImpl::MaxScrollOffset() const { |
1622 LayerImpl* scroll_clip_layer = | 1623 return layer_tree_impl()->property_trees()->scroll_tree.MaxScrollOffset( |
1623 layer_tree_impl()->LayerById(scroll_clip_layer_id_); | 1624 scroll_tree_index()); |
1624 if (!scroll_clip_layer || bounds().IsEmpty()) | |
1625 return gfx::ScrollOffset(); | |
1626 | |
1627 LayerImpl const* page_scale_layer = layer_tree_impl()->PageScaleLayer(); | |
1628 DCHECK(this != page_scale_layer); | |
1629 DCHECK(this != layer_tree_impl()->InnerViewportScrollLayer() || | |
1630 IsContainerForFixedPositionLayers()); | |
1631 | |
1632 float scale_factor = 1.f; | |
1633 DCHECK(scroll_clip_layer != page_scale_layer); | |
1634 if (!scroll_clip_layer->IsAffectedByPageScale() && IsAffectedByPageScale()) | |
1635 scale_factor = layer_tree_impl()->current_page_scale_factor(); | |
1636 | |
1637 gfx::SizeF scaled_scroll_bounds = | |
1638 gfx::ScaleSize(BoundsForScrolling(), scale_factor); | |
1639 scaled_scroll_bounds.SetSize(std::floor(scaled_scroll_bounds.width()), | |
1640 std::floor(scaled_scroll_bounds.height())); | |
1641 | |
1642 gfx::ScrollOffset max_offset( | |
1643 scaled_scroll_bounds.width() - scroll_clip_layer->bounds().width(), | |
1644 scaled_scroll_bounds.height() - scroll_clip_layer->bounds().height()); | |
1645 // We need the final scroll offset to be in CSS coords. | |
1646 max_offset.Scale(1 / scale_factor); | |
1647 max_offset.SetToMax(gfx::ScrollOffset()); | |
1648 return max_offset; | |
1649 } | 1625 } |
1650 | 1626 |
1651 gfx::ScrollOffset LayerImpl::ClampScrollOffsetToLimits( | 1627 gfx::ScrollOffset LayerImpl::ClampScrollOffsetToLimits( |
1652 gfx::ScrollOffset offset) const { | 1628 gfx::ScrollOffset offset) const { |
1653 offset.SetToMin(MaxScrollOffset()); | 1629 offset.SetToMin(MaxScrollOffset()); |
1654 offset.SetToMax(gfx::ScrollOffset()); | 1630 offset.SetToMax(gfx::ScrollOffset()); |
1655 return offset; | 1631 return offset; |
1656 } | 1632 } |
1657 | 1633 |
1658 gfx::Vector2dF LayerImpl::ClampScrollToMaxScrollOffset() { | 1634 gfx::Vector2dF LayerImpl::ClampScrollToMaxScrollOffset() { |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1918 .layer_transforms_should_scale_layer_contents) { | 1894 .layer_transforms_should_scale_layer_contents) { |
1919 return default_scale; | 1895 return default_scale; |
1920 } | 1896 } |
1921 | 1897 |
1922 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( | 1898 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( |
1923 DrawTransform(), default_scale); | 1899 DrawTransform(), default_scale); |
1924 return std::max(transform_scales.x(), transform_scales.y()); | 1900 return std::max(transform_scales.x(), transform_scales.y()); |
1925 } | 1901 } |
1926 | 1902 |
1927 } // namespace cc | 1903 } // namespace cc |
OLD | NEW |