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

Unified Diff: cc/trees/layer_tree_host.cc

Issue 16679011: Add viewport scrollbar class to support overlay scrollbars for pinch zoom virtual viewport. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add scrollbars layers in compositor, plumb layer ids to LayerTreeImpl. Created 7 years, 6 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/trees/layer_tree_host.cc
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index 5e19eb3eb3c8acb70f68dba1d64863f6bb806297..bb81ee8a4497a084e8c2f91df0286007db1512a9 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -20,6 +20,7 @@
#include "cc/base/thread.h"
#include "cc/debug/overdraw_metrics.h"
#include "cc/debug/rendering_stats_instrumentation.h"
+#include "cc/input/inner_viewport_scrollbar.h"
#include "cc/input/top_controls_manager.h"
#include "cc/layers/heads_up_display_layer.h"
#include "cc/layers/heads_up_display_layer_impl.h"
@@ -314,6 +315,14 @@ void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) {
sync_tree->FindRootScrollLayer();
+ if (settings_.use_pinch_virtual_viewport && page_scale_layer_) {
+ DCHECK(inner_viewport_scroll_layer_);
+ DCHECK(outer_viewport_scroll_layer_);
+ sync_tree->SetPinchViewportLayerIds(page_scale_layer_->id(),
+ inner_viewport_scroll_layer_->id(),
+ outer_viewport_scroll_layer_->id());
+ }
+
float page_scale_delta, sent_page_scale_delta;
if (settings_.impl_side_painting) {
// Update the delta from the active tree, which may have
@@ -544,6 +553,58 @@ void LayerTreeHost::SetRootLayer(scoped_refptr<Layer> root_layer) {
SetNeedsFullTreeSync();
}
+static void SetupInnerViewportScrollbar(Layer* parent,
+ scoped_refptr<Layer>& scrollbar,
+ scoped_refptr<Layer> scroll_layer,
+ scoped_refptr<Layer> clip_layer,
+ ScrollbarOrientation orientation) {
+ int scrollbar_thickness =
+ orientation == HORIZONTAL ? parent->bounds().height()
+ : parent->bounds().width();
+ scrollbar = ScrollbarLayer::Create(
+ make_scoped_ptr(new InnerViewportScrollbar(
+ scroll_layer, clip_layer, orientation, scrollbar_thickness))
+ .PassAs<Scrollbar>(),
+ scroll_layer->id());
+ parent->RemoveAllChildren();
+ parent->AddChild(scrollbar);
+ scrollbar->SetBounds(parent->bounds());
+ scrollbar->SetIsDrawable(true);
+}
+
+void LayerTreeHost::RegisterPinchViewportLayers(
+ scoped_refptr<Layer> inner_viewport_clip_layer,
+ scoped_refptr<Layer> page_scale_layer,
+ scoped_refptr<Layer> inner_viewport_scroll_layer,
+ scoped_refptr<Layer> outer_viewport_scroll_layer,
+ scoped_refptr<Layer> inner_viewport_horizontal_scrollbar_layer,
+ scoped_refptr<Layer> inner_viewport_vertical_scrollbar_layer) {
+ inner_viewport_clip_layer_ = inner_viewport_clip_layer;
+ page_scale_layer_ = page_scale_layer;
+ inner_viewport_scroll_layer_ = inner_viewport_scroll_layer;
+ outer_viewport_scroll_layer_ = outer_viewport_scroll_layer;
+
+ if (inner_viewport_horizontal_scrollbar_layer) {
+ SetupInnerViewportScrollbar(inner_viewport_horizontal_scrollbar_layer,
+ inner_viewport_horizontal_scrollbar_layer_,
+ inner_viewport_scroll_layer,
+ inner_viewport_clip_layer,
+ HORIZONTAL);
+ } else {
+ inner_viewport_horizontal_scrollbar_layer_ = nullptr;
+ }
+
+ if (inner_viewport_vertical_scrollbar_layer) {
+ SetupInnerViewportScrollbar(inner_viewport_vertical_scrollbar_layer,
+ inner_viewport_vertical_scrollbar_layer_,
+ inner_viewport_scroll_layer,
+ inner_viewport_clip_layer,
+ VERTICAL);
+ } else {
+ inner_viewport_vertical_scrollbar_layer_ = nullptr;
+ }
+}
+
void LayerTreeHost::SetDebugState(const LayerTreeDebugState& debug_state) {
LayerTreeDebugState new_debug_state =
LayerTreeDebugState::Unite(settings_.initial_debug_state, debug_state);
@@ -717,6 +778,8 @@ void LayerTreeHost::UpdateLayers(Layer* root_layer,
UpdateHudLayer();
Layer* root_scroll = FindFirstScrollableLayer(root_layer);
+ Layer* page_scale_layer =
+ page_scale_layer_ ? page_scale_layer_.get() : root_scroll;
TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::CalcDrawProps");
LayerTreeHostCommon::CalculateDrawProperties(
@@ -725,7 +788,7 @@ void LayerTreeHost::UpdateLayers(Layer* root_layer,
gfx::Transform(),
device_scale_factor_,
page_scale_factor_,
- root_scroll,
+ page_scale_layer,
GetRendererCapabilities().max_texture_size,
settings_.can_use_lcd_text,
settings_.layer_transforms_should_scale_layer_contents,

Powered by Google App Engine
This is Rietveld 408576698