From 93102bcfca81af17e97fcad1c28b027fa7cad114 Mon Sep 17 00:00:00 2001 From: skobes Date: Tue, 4 Aug 2015 13:38:05 -0700 Subject: 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} --- cc/trees/layer_tree_host.cc | 5 +++++ cc/trees/layer_tree_host.h | 5 +++++ cc/trees/layer_tree_impl.cc | 26 ++++++++++++++------------ cc/trees/layer_tree_impl.h | 7 ++++++- cc/trees/layer_tree_impl_unittest.cc | 6 +++--- cc/trees/layer_tree_settings.cc | 1 - cc/trees/layer_tree_settings.h | 1 - 7 files changed, 33 insertions(+), 18 deletions(-) (limited to 'cc/trees') 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* 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* page_scale_factor(); const SyncedProperty* 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> page_scale_factor_; float min_page_scale_factor_; float max_page_scale_factor_; + bool hide_pinch_scrollbars_near_min_scale_; scoped_refptr 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 scroll_layer = LayerImpl::Create(active_tree, 1); scoped_ptr 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; -- cgit v1.1