scrollbar_layer_impl_base.h revision 58537e28ecd584eab876aee8be7156509866d23a
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
12namespace cc {
13
14class LayerTreeImpl;
15
16class 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 set_thumb_thickness_scale_factor(float thumb_thickness_scale_factor) {
48    thumb_thickness_scale_factor_ = thumb_thickness_scale_factor;
49  }
50
51 protected:
52  ScrollbarLayerImplBase(LayerTreeImpl* tree_impl,
53                         int id,
54                         ScrollbarOrientation orientation,
55                         bool is_left_side_vertical_scrollbar);
56  virtual ~ScrollbarLayerImplBase() {}
57
58  gfx::Rect ScrollbarLayerRectToContentRect(gfx::RectF layer_rect) const;
59
60  float visible_to_total_length_ratio() const {
61    return visible_to_total_length_ratio_;
62  }
63  float vertical_adjust() const { return vertical_adjust_; }
64
65  virtual int ThumbThickness() const = 0;
66  virtual int ThumbLength() const = 0;
67  virtual float TrackLength() const = 0;
68  virtual int TrackStart() const = 0;
69
70 private:
71  int scroll_layer_id_;
72  bool is_overlay_scrollbar_;
73
74  float thumb_thickness_scale_factor_;
75  float current_pos_;
76  int maximum_;
77  ScrollbarOrientation orientation_;
78  bool is_left_side_vertical_scrollbar_;
79
80  // Difference between the clip layer's height and the visible viewport
81  // height (which may differ in the presence of top-controls hiding).
82  float vertical_adjust_;
83
84  float visible_to_total_length_ratio_;
85
86  DISALLOW_COPY_AND_ASSIGN(ScrollbarLayerImplBase);
87};
88
89}  // namespace cc
90
91#endif  // CC_LAYERS_SCROLLBAR_LAYER_IMPL_BASE_H_
92