From c784a6f02ed8f2cffe131c2c067c4805cd752610 Mon Sep 17 00:00:00 2001 From: bokan Date: Tue, 27 Jan 2015 20:11:50 -0800 Subject: Hide pinch viewport scrollbars when near minimum scale. This patch prevents the overlay scrollbars from showing up when we're near the minimum scale. The threshold can be set per-platform; by default it's 0 so the scrollbars will be visible regardless of the scale. On Windows/Linux/CrOS we'd like to prevent the scrollbars from overlaying over the window scrollbars so we set a small non-0 threshold. BUG=446411 Review URL: https://codereview.chromium.org/877863002 Cr-Commit-Position: refs/heads/master@{#313431} --- cc/trees/layer_tree_impl_unittest.cc | 69 ++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) (limited to 'cc/trees/layer_tree_impl_unittest.cc') diff --git a/cc/trees/layer_tree_impl_unittest.cc b/cc/trees/layer_tree_impl_unittest.cc index 2c5dd05..67f98e65 100644 --- a/cc/trees/layer_tree_impl_unittest.cc +++ b/cc/trees/layer_tree_impl_unittest.cc @@ -6,6 +6,7 @@ #include "cc/layers/heads_up_display_layer_impl.h" #include "cc/layers/layer.h" +#include "cc/layers/solid_color_scrollbar_layer_impl.h" #include "cc/test/fake_impl_proxy.h" #include "cc/test/fake_layer_tree_host_impl.h" #include "cc/test/fake_output_surface.h" @@ -23,6 +24,7 @@ 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_)); EXPECT_TRUE(host_impl_->InitializeRenderer(FakeOutputSurface::Create3d())); @@ -1371,6 +1373,73 @@ TEST_F(LayerTreeImplTest, EXPECT_FALSE(result_layer); } +TEST_F(LayerTreeImplTest, MakeScrollbarsInvisibleNearMinPageScale) { + const int kThumbThickness = 10; + const int kTrackStart = 0; + const bool kIsLeftSideVerticalScrollbar = false; + const bool kIsOverlayScrollbar = true; + + LayerTreeImpl* active_tree = host_impl().active_tree(); + + scoped_ptr scroll_layer = LayerImpl::Create(active_tree, 1); + scoped_ptr vertical_scrollbar_layer = + SolidColorScrollbarLayerImpl::Create(active_tree, + 2, + VERTICAL, + kThumbThickness, + kTrackStart, + kIsLeftSideVerticalScrollbar, + kIsOverlayScrollbar); + scoped_ptr horizontal_scrollbar_layer = + SolidColorScrollbarLayerImpl::Create(active_tree, + 3, + HORIZONTAL, + kThumbThickness, + kTrackStart, + kIsLeftSideVerticalScrollbar, + kIsOverlayScrollbar); + + scoped_ptr clip_layer = LayerImpl::Create(active_tree, 4); + scoped_ptr page_scale_layer = LayerImpl::Create(active_tree, 5); + + scroll_layer->SetScrollClipLayer(clip_layer->id()); + + LayerImpl* scroll_layer_ptr = scroll_layer.get(); + LayerImpl* page_scale_layer_ptr = page_scale_layer.get(); + + clip_layer->AddChild(page_scale_layer.Pass()); + page_scale_layer_ptr->AddChild(scroll_layer.Pass()); + + vertical_scrollbar_layer->SetScrollLayerAndClipLayerByIds( + scroll_layer_ptr->id(), + clip_layer->id()); + horizontal_scrollbar_layer->SetScrollLayerAndClipLayerByIds( + scroll_layer_ptr->id(), + clip_layer->id()); + + active_tree->PushPageScaleFromMainThread(1.0f, 1.0f, 4.0f); + active_tree->SetViewportLayersFromIds( + Layer::INVALID_ID, // Overscroll + page_scale_layer_ptr->id(), + scroll_layer_ptr->id(), + Layer::INVALID_ID); // Outer Scroll + + 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); + 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); + EXPECT_FALSE(vertical_scrollbar_layer->hide_layer_and_subtree()); + EXPECT_FALSE(horizontal_scrollbar_layer->hide_layer_and_subtree()); + + active_tree->PushPageScaleFromMainThread(1.5f, 1.0f, 4.0f); + EXPECT_FALSE(vertical_scrollbar_layer->hide_layer_and_subtree()); + EXPECT_FALSE(horizontal_scrollbar_layer->hide_layer_and_subtree()); +} + TEST_F(LayerTreeImplTest, HitCheckingTouchHandlerRegionsForSinglePositionedLayer) { scoped_ptr root = -- cgit v1.1