Chromium Code Reviews| 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 |