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

Unified Diff: cc/layer_tree_impl.cc

Issue 12093015: Move page scale ownership to LayerTreeImpl. (Closed) Base URL: http://git.chromium.org/chromium/src.git@coordchange3
Patch Set: Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: cc/layer_tree_impl.cc
diff --git a/cc/layer_tree_impl.cc b/cc/layer_tree_impl.cc
index 7107b0c4e467752926fecfeeeb34ac581e4e4258..058f0c7f8be922d8a7c75c7097d77bd042b5d03b 100644
--- a/cc/layer_tree_impl.cc
+++ b/cc/layer_tree_impl.cc
@@ -19,6 +19,11 @@ LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl)
, currently_scrolling_layer_(0)
, background_color_(0)
, has_transparent_background_(false)
+ , page_scale_factor_(1)
+ , page_scale_delta_(1)
+ , sent_page_scale_delta_(1)
+ , min_page_scale_factor_(0)
+ , max_page_scale_factor_(0)
, scrolling_layer_id_from_previous_tree_(0)
, contents_textures_purged_(false)
, needs_update_draw_properties_(true) {
@@ -94,6 +99,60 @@ void LayerTreeImpl::ClearCurrentlyScrollingLayer() {
scrolling_layer_id_from_previous_tree_ = 0;
}
+void LayerTreeImpl::SetPageScaleFactorAndLimits(float page_scale_factor,
+ float min_page_scale_factor, float max_page_scale_factor)
+{
+ if (!page_scale_factor)
+ return;
+
+ min_page_scale_factor_ = min_page_scale_factor;
+ max_page_scale_factor_ = max_page_scale_factor;
+ page_scale_factor_ = page_scale_factor;
+}
+
+void LayerTreeImpl::SetPageScaleDelta(float delta)
+{
+ // Clamp to the current min/max limits.
+ float total = page_scale_factor_ * delta;
+ if (min_page_scale_factor_ && total < min_page_scale_factor_)
+ delta = min_page_scale_factor_ / page_scale_factor_;
+ else if (max_page_scale_factor_ && total > max_page_scale_factor_)
+ delta = max_page_scale_factor_ / page_scale_factor_;
+
+ if (delta == page_scale_delta_)
+ return;
+
+ page_scale_delta_ = delta;
+
+ if (IsActiveTree())
+ {
danakj 2013/01/28 20:29:03 nit: { on previous line
aelias_OOO_until_Jul13 2013/01/29 06:05:14 Done.
+ LayerTreeImpl* pending_tree = layer_tree_host_impl_->pendingTree();
danakj 2013/01/28 20:29:03 2 space indents and 80 col
aelias_OOO_until_Jul13 2013/01/29 06:05:14 Done.
+ if (pending_tree) {
+ DCHECK_EQ(1, pending_tree->sent_page_scale_delta());
+ pending_tree->SetPageScaleDelta(page_scale_delta_ / sent_page_scale_delta_);
+ }
+ }
+
+#if 0
+ if (layerTreeImpl()->IsActiveTree())
+ {
+ LayerImpl* pending_twin = layerTreeImpl()->FindPendingTreeLayerById(id());
+ if (pending_twin) {
+ // The pending twin can't mirror the scroll delta of the active
+ // layer. Although the delta - sent scroll delta difference is
+ // identical for both twins, the sent scroll delta for the pending
+ // layer is zero, as anything that has been sent has been baked
+ // into the layer's position/scroll offset as a part of commit.
+ DCHECK(pending_twin->sentScrollDelta().IsZero());
+ pending_twin->setScrollDelta(scrollDelta - sentScrollDelta());
+ }
+ }
+#endif
+
+ UpdateMaxScrollOffset();
+ set_needs_update_draw_properties();
+}
+
gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const {
gfx::SizeF view_bounds;
// The clip layer should be used for scrolling bounds if available since it
@@ -108,7 +167,7 @@ gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const {
view_bounds = gfx::ScaleSize(device_viewport_size(),
1 / device_scale_factor());
}
- view_bounds.Scale(1 / pinch_zoom_viewport().total_page_scale_factor());
+ view_bounds.Scale(1 / total_page_scale_factor());
return view_bounds;
}
@@ -127,6 +186,14 @@ void LayerTreeImpl::UpdateMaxScrollOffset() {
root_scroll_layer_->setMaxScrollOffset(gfx::ToFlooredVector2d(max_scroll));
}
+gfx::Transform LayerTreeImpl::ImplTransform() const {
+ gfx::Transform transform;
+ transform.Scale(page_scale_delta_, page_scale_delta_);
+ if (settings().pageScalePinchZoomEnabled)
+ transform.Scale(page_scale_factor_, page_scale_factor_);
+ return transform;
+}
+
struct UpdateTilePrioritiesForLayer {
void operator()(LayerImpl *layer) {
layer->updateTilePriorities();
@@ -152,8 +219,7 @@ void LayerTreeImpl::UpdateDrawProperties(UpdateDrawPropertiesReason reason) {
return;
if (root_scroll_layer_) {
- root_scroll_layer_->setImplTransform(
- layer_tree_host_impl_->implTransform());
+ root_scroll_layer_->setImplTransform(ImplTransform());
// Setting the impl transform re-sets this.
needs_update_draw_properties_ = false;
}
@@ -167,7 +233,7 @@ void LayerTreeImpl::UpdateDrawProperties(UpdateDrawPropertiesReason reason) {
RootLayer(),
device_viewport_size(),
device_scale_factor(),
- pinch_zoom_viewport().total_page_scale_factor(),
+ total_page_scale_factor(),
MaxTextureSize(),
settings().canUseLCDText,
render_surface_layer_list_,
@@ -363,8 +429,4 @@ AnimationRegistrar* LayerTreeImpl::animationRegistrar() const {
return layer_tree_host_impl_->animationRegistrar();
}
-const PinchZoomViewport& LayerTreeImpl::pinch_zoom_viewport() const {
- return layer_tree_host_impl_->pinchZoomViewport();
-}
-
} // namespace cc
« cc/layer_tree_host_impl.cc ('K') | « cc/layer_tree_impl.h ('k') | cc/pinch_zoom_viewport.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698