| Index: cc/layer_tree_impl.cc
|
| diff --git a/cc/layer_tree_impl.cc b/cc/layer_tree_impl.cc
|
| index cbc2ee1fa1e021d530bbca427e6ce1aaca16a807..a0bab1465f2fa4da7ab475ad84626252ce089b61 100644
|
| --- a/cc/layer_tree_impl.cc
|
| +++ b/cc/layer_tree_impl.cc
|
| @@ -5,6 +5,7 @@
|
| #include "cc/layer_tree_impl.h"
|
|
|
| #include "base/debug/trace_event.h"
|
| +#include "cc/heads_up_display_layer_impl.h"
|
| #include "cc/layer_tree_host_common.h"
|
| #include "cc/layer_tree_host_impl.h"
|
| #include "ui/gfx/vector2d_conversions.h"
|
| @@ -19,6 +20,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) {
|
| @@ -79,6 +85,32 @@ scoped_ptr<LayerImpl> LayerTreeImpl::DetachLayerTree() {
|
| return root_layer_.Pass();
|
| }
|
|
|
| +void LayerTreeImpl::pushPropertiesTo(LayerTreeImpl* target_tree) {
|
| + target_tree->SetPageScaleFactorAndLimits(
|
| + page_scale_factor(), min_page_scale_factor(), max_page_scale_factor());
|
| + target_tree->SetPageScaleDelta(
|
| + target_tree->page_scale_delta() / target_tree->sent_page_scale_delta());
|
| + target_tree->set_sent_page_scale_delta(1);
|
| +
|
| + // This should match the property synchronization in
|
| + // LayerTreeHost::finishCommitOnImplThread().
|
| + target_tree->set_source_frame_number(source_frame_number());
|
| + target_tree->set_background_color(background_color());
|
| + target_tree->set_has_transparent_background(has_transparent_background());
|
| +
|
| + if (ContentsTexturesPurged())
|
| + target_tree->SetContentsTexturesPurged();
|
| + else
|
| + target_tree->ResetContentsTexturesPurged();
|
| +
|
| + if (hud_layer())
|
| + target_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(
|
| + LayerTreeHostCommon::findLayerInSubtree(
|
| + target_tree->RootLayer(), hud_layer()->id())));
|
| + else
|
| + target_tree->set_hud_layer(NULL);
|
| +}
|
| +
|
| LayerImpl* LayerTreeImpl::RootScrollLayer() {
|
| DCHECK(IsActiveTree());
|
| return root_scroll_layer_;
|
| @@ -94,6 +126,43 @@ 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()) {
|
| + LayerTreeImpl* pending_tree = layer_tree_host_impl_->pendingTree();
|
| + if (pending_tree) {
|
| + DCHECK_EQ(1, pending_tree->sent_page_scale_delta());
|
| + pending_tree->SetPageScaleDelta(page_scale_delta_ / sent_page_scale_delta_);
|
| + }
|
| + }
|
| +
|
| + 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 +177,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 +196,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 +229,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 +243,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_,
|
| @@ -367,8 +443,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
|
|
|