diff options
author | skobes <skobes@chromium.org> | 2015-08-04 13:38:05 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-04 20:39:48 +0000 |
commit | 93102bcfca81af17e97fcad1c28b027fa7cad114 (patch) | |
tree | d1b1392ef7ec0828370b0dea648734b2761156fc | |
parent | 07ea627e1310ea81313db708d044753e7507b100 (diff) | |
download | chromium_src-93102bcfca81af17e97fcad1c28b027fa7cad114.zip chromium_src-93102bcfca81af17e97fcad1c28b027fa7cad114.tar.gz chromium_src-93102bcfca81af17e97fcad1c28b027fa7cad114.tar.bz2 |
Don't hide pinch viewport scrollbars near min-scale with device emulation.
Depends on http://crrev.com/1269813004.
BUG=515746
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1267603004
Cr-Commit-Position: refs/heads/master@{#341784}
-rw-r--r-- | cc/trees/layer_tree_host.cc | 5 | ||||
-rw-r--r-- | cc/trees/layer_tree_host.h | 5 | ||||
-rw-r--r-- | cc/trees/layer_tree_impl.cc | 26 | ||||
-rw-r--r-- | cc/trees/layer_tree_impl.h | 7 | ||||
-rw-r--r-- | cc/trees/layer_tree_impl_unittest.cc | 6 | ||||
-rw-r--r-- | cc/trees/layer_tree_settings.cc | 1 | ||||
-rw-r--r-- | cc/trees/layer_tree_settings.h | 1 | ||||
-rw-r--r-- | content/renderer/gpu/render_widget_compositor.cc | 9 | ||||
-rw-r--r-- | content/renderer/gpu/render_widget_compositor.h | 1 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 7 |
10 files changed, 45 insertions, 23 deletions
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc index 179d34c..4d72eb2 100644 --- a/cc/trees/layer_tree_host.cc +++ b/cc/trees/layer_tree_host.cc @@ -101,6 +101,7 @@ LayerTreeHost::LayerTreeHost(InitParams* params) top_controls_shrink_blink_size_(false), top_controls_height_(0.f), top_controls_shown_ratio_(0.f), + hide_pinch_scrollbars_near_min_scale_(false), device_scale_factor_(1.f), visible_(true), page_scale_factor_(1.f), @@ -301,6 +302,10 @@ void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) { // Setting property trees must happen before pushing the page scale. sync_tree->SetPropertyTrees(property_trees_); + + sync_tree->set_hide_pinch_scrollbars_near_min_scale( + hide_pinch_scrollbars_near_min_scale_); + sync_tree->PushPageScaleFromMainThread( page_scale_factor_, min_page_scale_factor_, max_page_scale_factor_); sync_tree->elastic_overscroll()->PushFromMainThread(elastic_overscroll_); diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h index 8015c34..c04e8e7 100644 --- a/cc/trees/layer_tree_host.h +++ b/cc/trees/layer_tree_host.h @@ -211,6 +211,10 @@ class CC_EXPORT LayerTreeHost : public MutatorHostClient { void SetTopControlsHeight(float height, bool shrink); void SetTopControlsShownRatio(float ratio); + void set_hide_pinch_scrollbars_near_min_scale(bool hide) { + hide_pinch_scrollbars_near_min_scale_ = hide; + } + gfx::Size device_viewport_size() const { return device_viewport_size_; } void ApplyPageScaleDeltaFromImplSide(float page_scale_delta); @@ -443,6 +447,7 @@ class CC_EXPORT LayerTreeHost : public MutatorHostClient { bool top_controls_shrink_blink_size_; float top_controls_height_; float top_controls_shown_ratio_; + bool hide_pinch_scrollbars_near_min_scale_; float device_scale_factor_; bool visible_; diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index 1996302..aba949e 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc @@ -58,6 +58,7 @@ LayerTreeImpl::LayerTreeImpl( page_scale_factor_(page_scale_factor), min_page_scale_factor_(0), max_page_scale_factor_(0), + hide_pinch_scrollbars_near_min_scale_(false), elastic_overscroll_(elastic_overscroll), viewport_size_invalid_(false), needs_update_draw_properties_(true), @@ -230,6 +231,9 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { target_tree->set_top_controls_height(top_controls_height_); target_tree->PushTopControls(nullptr); + target_tree->set_hide_pinch_scrollbars_near_min_scale( + hide_pinch_scrollbars_near_min_scale_); + // Active tree already shares the page_scale_factor object with pending // tree so only the limits need to be provided. target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(), @@ -465,11 +469,10 @@ void LayerTreeImpl::DidUpdatePageScale() { } ForceScrollbarParameterUpdateAfterScaleChange(PageScaleLayer()); - - HideInnerViewportScrollbarsIfNearMinimumScale(); + HideInnerViewportScrollbarsIfNeeded(); } -void LayerTreeImpl::HideInnerViewportScrollbarsIfNearMinimumScale() { +void LayerTreeImpl::HideInnerViewportScrollbarsIfNeeded() { if (!InnerViewportContainerLayer()) return; @@ -479,15 +482,14 @@ void LayerTreeImpl::HideInnerViewportScrollbarsIfNearMinimumScale() { if (!scrollbars) return; + float minimum_scale_to_show_at = min_page_scale_factor() * 1.05f; + bool hide_scrollbars = + hide_pinch_scrollbars_near_min_scale_ && + (current_page_scale_factor() < minimum_scale_to_show_at); + for (LayerImpl::ScrollbarSet::iterator it = scrollbars->begin(); - it != scrollbars->end(); - ++it) { - ScrollbarLayerImplBase* scrollbar = *it; - float minimum_scale_to_show_at = - min_page_scale_factor() * settings().scrollbar_show_scale_threshold; - scrollbar->SetHideLayerAndSubtree( - current_page_scale_factor() < minimum_scale_to_show_at); - } + it != scrollbars->end(); ++it) + (*it)->SetHideLayerAndSubtree(hide_scrollbars); } SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() { @@ -543,7 +545,7 @@ void LayerTreeImpl::SetViewportLayersFromIds( inner_viewport_scroll_layer_id_ = inner_viewport_scroll_layer_id; outer_viewport_scroll_layer_id_ = outer_viewport_scroll_layer_id; - HideInnerViewportScrollbarsIfNearMinimumScale(); + HideInnerViewportScrollbarsIfNeeded(); } void LayerTreeImpl::ClearViewportLayers() { diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h index 476d8aa..afd4dfa 100644 --- a/cc/trees/layer_tree_impl.h +++ b/cc/trees/layer_tree_impl.h @@ -198,6 +198,10 @@ class CC_EXPORT LayerTreeImpl { SyncedProperty<ScaleGroup>* page_scale_factor(); const SyncedProperty<ScaleGroup>* page_scale_factor() const; + void set_hide_pinch_scrollbars_near_min_scale(bool hide) { + hide_pinch_scrollbars_near_min_scale_ = hide; + } + SyncedElasticOverscroll* elastic_overscroll() { return elastic_overscroll_.get(); } @@ -392,7 +396,7 @@ class CC_EXPORT LayerTreeImpl { bool SetPageScaleFactorLimits(float min_page_scale_factor, float max_page_scale_factor); void DidUpdatePageScale(); - void HideInnerViewportScrollbarsIfNearMinimumScale(); + void HideInnerViewportScrollbarsIfNeeded(); void PushTopControls(const float* top_controls_shown_ratio); LayerTreeHostImpl* layer_tree_host_impl_; int source_frame_number_; @@ -414,6 +418,7 @@ class CC_EXPORT LayerTreeImpl { scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor_; float min_page_scale_factor_; float max_page_scale_factor_; + bool hide_pinch_scrollbars_near_min_scale_; scoped_refptr<SyncedElasticOverscroll> elastic_overscroll_; diff --git a/cc/trees/layer_tree_impl_unittest.cc b/cc/trees/layer_tree_impl_unittest.cc index 9e8fee5..5681418 100644 --- a/cc/trees/layer_tree_impl_unittest.cc +++ b/cc/trees/layer_tree_impl_unittest.cc @@ -25,7 +25,6 @@ class LayerTreeImplTest : public LayerTreeHostCommonTest { LayerTreeImplTest() { LayerTreeSettings settings; settings.layer_transforms_should_scale_layer_contents = true; - settings.scrollbar_show_scale_threshold = 1.1f; host_impl_.reset(new FakeLayerTreeHostImpl( settings, &proxy_, &shared_bitmap_manager_, &task_graph_runner_)); EXPECT_TRUE(host_impl_->InitializeRenderer(FakeOutputSurface::Create3d())); @@ -1296,6 +1295,7 @@ TEST_F(LayerTreeImplTest, MakeScrollbarsInvisibleNearMinPageScale) { const bool kIsOverlayScrollbar = true; LayerTreeImpl* active_tree = host_impl().active_tree(); + active_tree->set_hide_pinch_scrollbars_near_min_scale(true); scoped_ptr<LayerImpl> scroll_layer = LayerImpl::Create(active_tree, 1); scoped_ptr<SolidColorScrollbarLayerImpl> vertical_scrollbar_layer = @@ -1343,11 +1343,11 @@ TEST_F(LayerTreeImplTest, MakeScrollbarsInvisibleNearMinPageScale) { EXPECT_TRUE(vertical_scrollbar_layer->hide_layer_and_subtree()); EXPECT_TRUE(horizontal_scrollbar_layer->hide_layer_and_subtree()); - active_tree->PushPageScaleFromMainThread(1.05f, 1.0f, 4.0f); + active_tree->PushPageScaleFromMainThread(1.04f, 1.0f, 4.0f); EXPECT_TRUE(vertical_scrollbar_layer->hide_layer_and_subtree()); EXPECT_TRUE(horizontal_scrollbar_layer->hide_layer_and_subtree()); - active_tree->PushPageScaleFromMainThread(1.1f, 1.0f, 4.0f); + active_tree->PushPageScaleFromMainThread(1.06f, 1.0f, 4.0f); EXPECT_FALSE(vertical_scrollbar_layer->hide_layer_and_subtree()); EXPECT_FALSE(horizontal_scrollbar_layer->hide_layer_and_subtree()); diff --git a/cc/trees/layer_tree_settings.cc b/cc/trees/layer_tree_settings.cc index 2a2d92b..0869e92 100644 --- a/cc/trees/layer_tree_settings.cc +++ b/cc/trees/layer_tree_settings.cc @@ -36,7 +36,6 @@ LayerTreeSettings::LayerTreeSettings() scrollbar_fade_delay_ms(0), scrollbar_fade_resize_delay_ms(0), scrollbar_fade_duration_ms(0), - scrollbar_show_scale_threshold(1.0f), solid_color_scrollbar_color(SK_ColorWHITE), timeout_and_draw_when_animation_checkerboards(true), layer_transforms_should_scale_layer_contents(false), diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h index 4820aca..27e80af 100644 --- a/cc/trees/layer_tree_settings.h +++ b/cc/trees/layer_tree_settings.h @@ -51,7 +51,6 @@ class CC_EXPORT LayerTreeSettings { int scrollbar_fade_delay_ms; int scrollbar_fade_resize_delay_ms; int scrollbar_fade_duration_ms; - float scrollbar_show_scale_threshold; SkColor solid_color_scrollbar_color; bool timeout_and_draw_when_animation_checkerboards; bool layer_transforms_should_scale_layer_contents; diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc index 4895617..942470b 100644 --- a/content/renderer/gpu/render_widget_compositor.cc +++ b/content/renderer/gpu/render_widget_compositor.cc @@ -452,11 +452,6 @@ void RenderWidgetCompositor::Initialize() { settings.scrollbar_fade_delay_ms = 500; settings.scrollbar_fade_resize_delay_ms = 500; settings.scrollbar_fade_duration_ms = 300; - - // When pinching in, only show the pinch-viewport overlay scrollbars if the - // page scale is at least some threshold away from the minimum. i.e. don't - // show the pinch scrollbars when at minimum scale. - settings.scrollbar_show_scale_threshold = 1.05f; #endif if (cmd->HasSwitch(switches::kEnableLowResTiling)) @@ -869,6 +864,10 @@ void RenderWidgetCompositor::setTopControlsShownRatio(float ratio) { layer_tree_host_->SetTopControlsShownRatio(ratio); } +void RenderWidgetCompositor::setHidePinchScrollbarsNearMinScale(bool hide) { + layer_tree_host_->set_hide_pinch_scrollbars_near_min_scale(hide); +} + void RenderWidgetCompositor::WillBeginMainFrame() { widget_->WillBeginCompositorFrame(); } diff --git a/content/renderer/gpu/render_widget_compositor.h b/content/renderer/gpu/render_widget_compositor.h index 91522ae..52dbf6e 100644 --- a/content/renderer/gpu/render_widget_compositor.h +++ b/content/renderer/gpu/render_widget_compositor.h @@ -136,6 +136,7 @@ class CONTENT_EXPORT RenderWidgetCompositor bool animate); virtual void setTopControlsHeight(float height, bool shrink); virtual void setTopControlsShownRatio(float); + virtual void setHidePinchScrollbarsNearMinScale(bool) override; // cc::LayerTreeHostClient implementation. void WillBeginMainFrame() override; diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index d45583e..1b8e1d9 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -1186,6 +1186,13 @@ void RenderView::ApplyWebPreferences(const WebPreferences& prefs, settings->setDoubleTapToZoomEnabled(true); web_view->setMaximumLegibleScale(prefs.default_maximum_page_scale_factor); #endif + +#if !defined(OS_ANDROID) && !defined(OS_MACOSX) + // On platforms where the pinch viewport and the layout viewport can + // both show scrollbars, hide pinch scrollbars when we are near minimum + // page scale. (See http://crbug.com/446411 and http://crbug.com/515746.) + settings->setHidePinchScrollbarsNearMinScale(true); +#endif } /*static*/ |