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 3 // found in the LICENSE file. 4 5 #ifndef CC_LAYERS_SCROLLBAR_LAYER_IMPL_BASE_H_ 6 #define CC_LAYERS_SCROLLBAR_LAYER_IMPL_BASE_H_ 7 8 #include "cc/base/cc_export.h" 9 #include "cc/input/scrollbar.h" 10 #include "cc/layers/layer.h" 11 #include "cc/layers/layer_impl.h" 12 13 namespace cc { 14 15 class LayerTreeImpl; 16 17 class CC_EXPORT ScrollbarLayerImplBase : public LayerImpl { 18 public: ScrollLayerId()19 int ScrollLayerId() const { 20 return scroll_layer_ ? scroll_layer_->id() : Layer::INVALID_ID; 21 } ClipLayerId()22 int ClipLayerId() const { 23 return clip_layer_ ? clip_layer_->id() : Layer::INVALID_ID; 24 } 25 26 void SetScrollLayerAndClipLayerByIds(int scroll_layer_id, int clip_layer_id); ClearScrollLayer()27 void ClearScrollLayer() { scroll_layer_ = NULL; } ClearClipLayer()28 void ClearClipLayer() { clip_layer_ = NULL; } 29 current_pos()30 float current_pos() const { return current_pos_; } 31 bool SetCurrentPos(float current_pos); maximum()32 int maximum() const { return maximum_; } 33 bool SetMaximum(int maximum); 34 35 bool SetVerticalAdjust(float vertical_adjust); 36 is_overlay_scrollbar()37 bool is_overlay_scrollbar() const { return is_overlay_scrollbar_; } set_is_overlay_scrollbar(bool is_overlay)38 void set_is_overlay_scrollbar(bool is_overlay) { 39 is_overlay_scrollbar_ = is_overlay; 40 } 41 orientation()42 ScrollbarOrientation orientation() const { return orientation_; } is_left_side_vertical_scrollbar()43 bool is_left_side_vertical_scrollbar() { 44 return is_left_side_vertical_scrollbar_; 45 } 46 47 virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE; 48 virtual ScrollbarLayerImplBase* ToScrollbarLayer() OVERRIDE; 49 void PushScrollClipPropertiesTo(LayerImpl* layer); 50 51 bool SetVisibleToTotalLengthRatio(float ratio); 52 virtual gfx::Rect ComputeThumbQuadRect() const; 53 thumb_thickness_scale_factor()54 float thumb_thickness_scale_factor() { 55 return thumb_thickness_scale_factor_; 56 } 57 bool SetThumbThicknessScaleFactor(float thumb_thickness_scale_factor); 58 59 void ScrollbarParametersDidChange(); 60 61 protected: 62 ScrollbarLayerImplBase(LayerTreeImpl* tree_impl, 63 int id, 64 ScrollbarOrientation orientation, 65 bool is_left_side_vertical_scrollbar, 66 bool is_overlay); 67 virtual ~ScrollbarLayerImplBase(); 68 69 gfx::Rect ScrollbarLayerRectToContentRect(const gfx::RectF& layer_rect) const; 70 visible_to_total_length_ratio()71 float visible_to_total_length_ratio() const { 72 return visible_to_total_length_ratio_; 73 } vertical_adjust()74 float vertical_adjust() const { return vertical_adjust_; } 75 76 virtual int ThumbThickness() const = 0; 77 virtual int ThumbLength() const = 0; 78 virtual float TrackLength() const = 0; 79 virtual int TrackStart() const = 0; 80 // Indicates whether the thumb length can be changed without going back to the 81 // main thread. 82 virtual bool IsThumbResizable() const = 0; 83 84 private: 85 LayerImpl* scroll_layer_; 86 LayerImpl* clip_layer_; 87 bool is_overlay_scrollbar_; 88 89 float thumb_thickness_scale_factor_; 90 float current_pos_; 91 int maximum_; 92 ScrollbarOrientation orientation_; 93 bool is_left_side_vertical_scrollbar_; 94 95 // Difference between the clip layer's height and the visible viewport 96 // height (which may differ in the presence of top-controls hiding). 97 float vertical_adjust_; 98 99 float visible_to_total_length_ratio_; 100 101 DISALLOW_COPY_AND_ASSIGN(ScrollbarLayerImplBase); 102 }; 103 104 } // namespace cc 105 106 #endif // CC_LAYERS_SCROLLBAR_LAYER_IMPL_BASE_H_ 107