Home | History | Annotate | Download | only in layers
      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_impl.h"
     11 
     12 namespace cc {
     13 
     14 class LayerTreeImpl;
     15 
     16 class CC_EXPORT ScrollbarLayerImplBase : public LayerImpl {
     17  public:
     18   int ScrollLayerId() const { return scroll_layer_id_; }
     19   void set_scroll_layer_id(int id) { scroll_layer_id_ = id; }
     20 
     21   float current_pos() const { return current_pos_; }
     22   void SetCurrentPos(float current_pos);
     23   int maximum() const { return maximum_; }
     24   void SetMaximum(int maximum);
     25 
     26   void SetVerticalAdjust(float vertical_adjust);
     27 
     28   bool is_overlay_scrollbar() const { return is_overlay_scrollbar_; }
     29   void set_is_overlay_scrollbar(bool is_overlay) {
     30     is_overlay_scrollbar_ = is_overlay;
     31   }
     32 
     33   ScrollbarOrientation orientation() const { return orientation_; }
     34   bool is_left_side_vertical_scrollbar() {
     35     return is_left_side_vertical_scrollbar_;
     36   }
     37 
     38   virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
     39   virtual ScrollbarLayerImplBase* ToScrollbarLayer() OVERRIDE;
     40 
     41   void SetVisibleToTotalLengthRatio(float ratio);
     42   virtual gfx::Rect ComputeThumbQuadRect() const;
     43 
     44   float thumb_thickness_scale_factor() {
     45     return thumb_thickness_scale_factor_;
     46   }
     47   void SetThumbThicknessScaleFactor(float thumb_thickness_scale_factor);
     48 
     49  protected:
     50   ScrollbarLayerImplBase(LayerTreeImpl* tree_impl,
     51                          int id,
     52                          ScrollbarOrientation orientation,
     53                          bool is_left_side_vertical_scrollbar);
     54   virtual ~ScrollbarLayerImplBase() {}
     55 
     56   gfx::Rect ScrollbarLayerRectToContentRect(gfx::RectF layer_rect) const;
     57 
     58   float visible_to_total_length_ratio() const {
     59     return visible_to_total_length_ratio_;
     60   }
     61   float vertical_adjust() const { return vertical_adjust_; }
     62 
     63   virtual int ThumbThickness() const = 0;
     64   virtual int ThumbLength() const = 0;
     65   virtual float TrackLength() const = 0;
     66   virtual int TrackStart() const = 0;
     67 
     68  private:
     69   int scroll_layer_id_;
     70   bool is_overlay_scrollbar_;
     71 
     72   float thumb_thickness_scale_factor_;
     73   float current_pos_;
     74   int maximum_;
     75   ScrollbarOrientation orientation_;
     76   bool is_left_side_vertical_scrollbar_;
     77 
     78   // Difference between the clip layer's height and the visible viewport
     79   // height (which may differ in the presence of top-controls hiding).
     80   float vertical_adjust_;
     81 
     82   float visible_to_total_length_ratio_;
     83 
     84   DISALLOW_COPY_AND_ASSIGN(ScrollbarLayerImplBase);
     85 };
     86 
     87 }  // namespace cc
     88 
     89 #endif  // CC_LAYERS_SCROLLBAR_LAYER_IMPL_BASE_H_
     90