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.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:
     19   int ScrollLayerId() const {
     20     return scroll_layer_ ? scroll_layer_->id() : Layer::INVALID_ID;
     21   }
     22   void ClearScrollLayer() { scroll_layer_ = NULL; }
     23   void SetScrollLayerById(int id);
     24   int ClipLayerId() const {
     25     return clip_layer_ ? clip_layer_->id() : Layer::INVALID_ID;
     26   }
     27   void ClearClipLayer() { clip_layer_ = NULL; }
     28   void SetClipLayerById(int id);
     29 
     30   float current_pos() const { return current_pos_; }
     31   void SetCurrentPos(float current_pos);
     32   int maximum() const { return maximum_; }
     33   void SetMaximum(int maximum);
     34 
     35   void SetVerticalAdjust(float vertical_adjust);
     36 
     37   bool is_overlay_scrollbar() const { return is_overlay_scrollbar_; }
     38   void set_is_overlay_scrollbar(bool is_overlay) {
     39     is_overlay_scrollbar_ = is_overlay;
     40   }
     41 
     42   ScrollbarOrientation orientation() const { return orientation_; }
     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   void SetVisibleToTotalLengthRatio(float ratio);
     52   virtual gfx::Rect ComputeThumbQuadRect() const;
     53 
     54   float thumb_thickness_scale_factor() {
     55     return thumb_thickness_scale_factor_;
     56   }
     57   void 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 
     71   float visible_to_total_length_ratio() const {
     72     return visible_to_total_length_ratio_;
     73   }
     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