Chromium Code Reviews| Index: cc/trees/layer_tree_impl.cc |
| diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc |
| index faff70eb1bf074bc58ee764404d643c686f3c045..217e577ac88de3ae2282e41362ab1b435984d77e 100644 |
| --- a/cc/trees/layer_tree_impl.cc |
| +++ b/cc/trees/layer_tree_impl.cc |
| @@ -9,6 +9,7 @@ |
| #include "cc/animation/scrollbar_animation_controller.h" |
| #include "cc/debug/traced_value.h" |
| #include "cc/layers/heads_up_display_layer_impl.h" |
| +#include "cc/layers/layer.h" |
| #include "cc/layers/render_surface_impl.h" |
| #include "cc/layers/scrollbar_layer_impl_base.h" |
| #include "cc/trees/layer_tree_host_common.h" |
| @@ -27,6 +28,9 @@ LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) |
| root_layer_scroll_offset_delegate_(NULL), |
| background_color_(0), |
| has_transparent_background_(false), |
| + page_scale_layer_(NULL), |
| + inner_viewport_scroll_layer_(NULL), |
| + outer_viewport_scroll_layer_(NULL), |
| page_scale_factor_(1), |
| page_scale_delta_(1), |
| sent_page_scale_delta_(1), |
| @@ -115,6 +119,13 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { |
| target_tree->page_scale_delta() / target_tree->sent_page_scale_delta()); |
| target_tree->set_sent_page_scale_delta(1); |
| + if (settings().use_pinch_virtual_viewport) { |
| + target_tree->SetViewportLayersFromIds( |
| + page_scale_layer_->id(), |
| + inner_viewport_scroll_layer_->id(), |
| + outer_viewport_scroll_layer_ ? outer_viewport_scroll_layer_->id() |
| + : Layer::INVALID_ID); |
| + } |
| // This should match the property synchronization in |
| // LayerTreeHost::finishCommitOnImplThread(). |
| target_tree->set_source_frame_number(source_frame_number()); |
| @@ -257,6 +268,29 @@ void LayerTreeImpl::ApplyScrollDeltasSinceBeginFrame() { |
| root_layer(), base::Bind(&ApplyScrollDeltasSinceBeginFrameTo)); |
| } |
| +void LayerTreeImpl::SetViewportLayersFromIds( |
| + int page_scale_layer_id, |
| + int inner_viewport_scroll_layer_id, |
| + int outer_viewport_scroll_layer_id) { |
| + page_scale_layer_ = LayerById(page_scale_layer_id); |
| + DCHECK(page_scale_layer_); |
| + |
| + inner_viewport_scroll_layer_ = |
| + LayerById(inner_viewport_scroll_layer_id); |
| + DCHECK(inner_viewport_scroll_layer_); |
| + |
| + outer_viewport_scroll_layer_ = |
| + LayerById(outer_viewport_scroll_layer_id); |
| + DCHECK(outer_viewport_scroll_layer_ || |
| + outer_viewport_scroll_layer_id == Layer::INVALID_ID); |
| +} |
| + |
| +void LayerTreeImpl::ClearViewportLayers() { |
| + page_scale_layer_ = 0; |
|
enne (OOO)
2013/09/12 18:57:02
s/0/NULL/g
wjmaclean
2013/09/12 19:06:17
Done.
|
| + inner_viewport_scroll_layer_ = 0; |
| + outer_viewport_scroll_layer_ = 0; |
| +} |
| + |
| // TODO(wjmaclean) This needs to go away, and be replaced with a single core |
| // of login that works for both scrollbar layer types. This is already planned |
| // as part of the larger pinch-zoom re-factoring viewport. |
| @@ -316,13 +350,15 @@ void LayerTreeImpl::UpdateDrawProperties() { |
| IsActiveTree(), |
| "SourceFrameNumber", |
| source_frame_number_); |
| + LayerImpl* page_scale_layer = |
| + page_scale_layer_ ? page_scale_layer_ : RootContainerLayer(); |
| LayerTreeHostCommon::CalcDrawPropsImplInputs inputs( |
| root_layer(), |
| DrawViewportSize(), |
| layer_tree_host_impl_->DrawTransform(), |
| device_scale_factor(), |
| total_page_scale_factor(), |
| - root_scroll_layer_ ? root_scroll_layer_->parent() : NULL, |
| + page_scale_layer, |
| MaxTextureSize(), |
| settings().can_use_lcd_text, |
| settings().layer_transforms_should_scale_layer_contents, |