Chromium Code Reviews| Index: ui/views/controls/scroll_view.cc |
| diff --git a/ui/views/controls/scroll_view.cc b/ui/views/controls/scroll_view.cc |
| index 74cefcc61f7e9dd75aea8fc1593af824d7066290..18f498cd631a5a86e72ef18112df6f1fa1d8df2e 100644 |
| --- a/ui/views/controls/scroll_view.cc |
| +++ b/ui/views/controls/scroll_view.cc |
| @@ -32,6 +32,11 @@ const base::Feature kToolkitViewsScrollWithLayers { |
| #endif |
| }; |
| +// Set if the kToolkitViewsScrollWithLayers feature is enabled. |
| +// TODO(ananta) |
| +// Remove this when the feature is enabled by default. |
| +bool g_scroll_with_layers_enabled = false; |
| + |
| class ScrollCornerView : public View { |
| public: |
| ScrollCornerView() {} |
| @@ -67,7 +72,8 @@ void ConstrainScrollToBounds(View* viewport, View* view) { |
| // Note that even when ScrollView::ScrollsWithLayers() is true, the header row |
| // scrolls by repainting. |
| - const bool scrolls_with_layers = viewport->layer() != nullptr; |
| + const bool scrolls_with_layers = |
| + g_scroll_with_layers_enabled && viewport->layer() != nullptr; |
|
sky
2017/04/17 15:24:01
Make ScrollView have a member for scroll_with_laye
ananta
2017/04/18 03:04:25
Done.
|
| if (scrolls_with_layers) { |
| DCHECK(view->layer()); |
| DCHECK_EQ(0, view->x()); |
| @@ -166,8 +172,11 @@ ScrollView::ScrollView() |
| vert_sb_->set_controller(this); |
| corner_view_->SetVisible(false); |
| - if (!base::FeatureList::IsEnabled(kToolkitViewsScrollWithLayers)) |
| + g_scroll_with_layers_enabled = |
| + base::FeatureList::IsEnabled(kToolkitViewsScrollWithLayers); |
| + if (!g_scroll_with_layers_enabled) |
| return; |
| + |
| EnableViewPortLayer(); |
| } |
| @@ -527,6 +536,10 @@ void ScrollView::OnNativeThemeChanged(const ui::NativeTheme* theme) { |
| UpdateBorder(); |
| } |
| +void ScrollView::OnChildLayerChanged(View* child) { |
| + EnableViewPortLayer(); |
| +} |
| + |
| void ScrollView::ScrollToPosition(ScrollBar* source, int position) { |
| if (!contents_) |
| return; |
| @@ -717,12 +730,18 @@ void ScrollView::ScrollToOffset(const gfx::ScrollOffset& offset) { |
| } |
| bool ScrollView::ScrollsWithLayers() const { |
| + if (!g_scroll_with_layers_enabled) |
| + return false; |
| // Just check for the presence of a layer since it's cheaper than querying the |
| // Feature flag each time. |
| return contents_viewport_->layer() != nullptr; |
| } |
| void ScrollView::EnableViewPortLayer() { |
| + if (viewport_layer_enabled_) |
| + return; |
| + |
| + viewport_layer_enabled_ = true; |
| background_color_ = SK_ColorWHITE; |
| contents_viewport_->set_background( |
| Background::CreateSolidBackground(background_color_)); |