Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/layers/scrollbar_layer_impl_base.h" | 5 #include "cc/layers/scrollbar_layer_impl_base.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include "cc/trees/effect_node.h" | 8 #include "cc/trees/effect_node.h" |
| 9 #include "cc/trees/layer_tree_impl.h" | 9 #include "cc/trees/layer_tree_impl.h" |
| 10 #include "ui/gfx/geometry/rect_conversions.h" | 10 #include "ui/gfx/geometry/rect_conversions.h" |
| 11 | 11 |
| 12 namespace cc { | 12 namespace cc { |
| 13 | 13 |
| 14 ScrollbarLayerImplBase::ScrollbarLayerImplBase( | 14 ScrollbarLayerImplBase::ScrollbarLayerImplBase( |
| 15 LayerTreeImpl* tree_impl, | 15 LayerTreeImpl* tree_impl, |
| 16 int id, | 16 int id, |
| 17 ScrollbarOrientation orientation, | 17 ScrollbarOrientation orientation, |
| 18 bool is_left_side_vertical_scrollbar, | 18 bool is_left_side_vertical_scrollbar, |
| 19 bool is_overlay) | 19 bool is_overlay) |
| 20 : LayerImpl(tree_impl, id), | 20 : LayerImpl(tree_impl, id), |
| 21 scroll_layer_id_(Layer::INVALID_ID), | |
| 22 is_overlay_scrollbar_(is_overlay), | 21 is_overlay_scrollbar_(is_overlay), |
| 23 thumb_thickness_scale_factor_(1.f), | 22 thumb_thickness_scale_factor_(1.f), |
| 24 current_pos_(0.f), | 23 current_pos_(0.f), |
| 25 clip_layer_length_(0.f), | 24 clip_layer_length_(0.f), |
| 26 scroll_layer_length_(0.f), | 25 scroll_layer_length_(0.f), |
| 27 orientation_(orientation), | 26 orientation_(orientation), |
| 28 is_left_side_vertical_scrollbar_(is_left_side_vertical_scrollbar), | 27 is_left_side_vertical_scrollbar_(is_left_side_vertical_scrollbar), |
| 29 vertical_adjust_(0.f) {} | 28 vertical_adjust_(0.f) {} |
| 30 | 29 |
| 31 ScrollbarLayerImplBase::~ScrollbarLayerImplBase() { | 30 ScrollbarLayerImplBase::~ScrollbarLayerImplBase() { |
| 32 layer_tree_impl()->UnregisterScrollbar(this); | 31 layer_tree_impl()->UnregisterScrollbar(this); |
| 33 } | 32 } |
| 34 | 33 |
| 35 void ScrollbarLayerImplBase::PushPropertiesTo(LayerImpl* layer) { | 34 void ScrollbarLayerImplBase::PushPropertiesTo(LayerImpl* layer) { |
| 36 LayerImpl::PushPropertiesTo(layer); | 35 LayerImpl::PushPropertiesTo(layer); |
| 37 DCHECK(layer->ToScrollbarLayer()); | 36 DCHECK(layer->ToScrollbarLayer()); |
| 38 layer->ToScrollbarLayer()->set_is_overlay_scrollbar(is_overlay_scrollbar_); | 37 layer->ToScrollbarLayer()->set_is_overlay_scrollbar(is_overlay_scrollbar_); |
| 39 layer->ToScrollbarLayer()->SetScrollInfo(ScrollLayerId(), | 38 layer->ToScrollbarLayer()->SetScrollElementId(scroll_element_id()); |
| 40 scroll_element_id()); | |
| 41 } | 39 } |
| 42 | 40 |
| 43 ScrollbarLayerImplBase* ScrollbarLayerImplBase::ToScrollbarLayer() { | 41 ScrollbarLayerImplBase* ScrollbarLayerImplBase::ToScrollbarLayer() { |
| 44 return this; | 42 return this; |
| 45 } | 43 } |
| 46 | 44 |
| 47 void ScrollbarLayerImplBase::SetScrollInfo(int scroll_layer_id, | 45 void ScrollbarLayerImplBase::SetScrollElementId(ElementId scroll_element_id) { |
| 48 ElementId scroll_element_id) { | 46 if (scroll_element_id_ == scroll_element_id) |
|
wkorman
2017/04/20 17:53:47
Can we add a unit test that would have caught this
| |
| 49 if (scroll_layer_id_ == scroll_layer_id && | |
| 50 scroll_element_id == scroll_element_id) | |
| 51 return; | 47 return; |
| 52 | 48 |
| 53 layer_tree_impl()->UnregisterScrollbar(this); | 49 layer_tree_impl()->UnregisterScrollbar(this); |
| 54 | |
| 55 scroll_layer_id_ = scroll_layer_id; | |
| 56 scroll_element_id_ = scroll_element_id; | 50 scroll_element_id_ = scroll_element_id; |
| 57 | |
| 58 layer_tree_impl()->RegisterScrollbar(this); | 51 layer_tree_impl()->RegisterScrollbar(this); |
| 59 } | 52 } |
| 60 | 53 |
| 61 bool ScrollbarLayerImplBase::SetCurrentPos(float current_pos) { | 54 bool ScrollbarLayerImplBase::SetCurrentPos(float current_pos) { |
| 62 if (current_pos_ == current_pos) | 55 if (current_pos_ == current_pos) |
| 63 return false; | 56 return false; |
| 64 current_pos_ = current_pos; | 57 current_pos_ = current_pos; |
| 65 NoteLayerPropertyChanged(); | 58 NoteLayerPropertyChanged(); |
| 66 return true; | 59 return true; |
| 67 } | 60 } |
| 68 | 61 |
| 69 bool ScrollbarLayerImplBase::CanScrollOrientation() const { | 62 bool ScrollbarLayerImplBase::CanScrollOrientation() const { |
| 70 LayerImpl* scroll_layer = layer_tree_impl()->LayerById(scroll_layer_id_); | 63 // TODO(pdr): Refactor this to not depend on layers by using the associated |
| 64 // scroll node's user_scrollable values. | |
| 65 LayerImpl* scroll_layer = | |
| 66 layer_tree_impl()->LayerByElementId(scroll_element_id_); | |
| 71 if (!scroll_layer) | 67 if (!scroll_layer) |
| 72 return false; | 68 return false; |
| 73 return scroll_layer->user_scrollable(orientation()) && | 69 return scroll_layer->user_scrollable(orientation()) && |
| 74 clip_layer_length_ < scroll_layer_length_; | 70 clip_layer_length_ < scroll_layer_length_; |
| 75 } | 71 } |
| 76 | 72 |
| 77 bool ScrollbarLayerImplBase::SetVerticalAdjust(float vertical_adjust) { | 73 bool ScrollbarLayerImplBase::SetVerticalAdjust(float vertical_adjust) { |
| 78 if (vertical_adjust_ == vertical_adjust) | 74 if (vertical_adjust_ == vertical_adjust) |
| 79 return false; | 75 return false; |
| 80 vertical_adjust_ = vertical_adjust; | 76 vertical_adjust_ = vertical_adjust; |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 230 layer_tree_impl()->AddToOpacityAnimationsMap(id(), opacity); | 226 layer_tree_impl()->AddToOpacityAnimationsMap(id(), opacity); |
| 231 | 227 |
| 232 node->opacity = opacity; | 228 node->opacity = opacity; |
| 233 node->effect_changed = true; | 229 node->effect_changed = true; |
| 234 property_trees->changed = true; | 230 property_trees->changed = true; |
| 235 property_trees->effect_tree.set_needs_update(true); | 231 property_trees->effect_tree.set_needs_update(true); |
| 236 layer_tree_impl()->set_needs_update_draw_properties(); | 232 layer_tree_impl()->set_needs_update_draw_properties(); |
| 237 } | 233 } |
| 238 | 234 |
| 239 } // namespace cc | 235 } // namespace cc |
| OLD | NEW |