Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(112)

Side by Side Diff: cc/layers/layer_impl.cc

Issue 1675963002: Move MaxScrollOffset to property_trees (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix trybot failure, remove unnecessary code Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698