// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_LAYERS_SCROLLBAR_LAYER_IMPL_BASE_H_ #define CC_LAYERS_SCROLLBAR_LAYER_IMPL_BASE_H_ #include "cc/base/cc_export.h" #include "cc/input/scrollbar.h" #include "cc/layers/layer.h" #include "cc/layers/layer_impl.h" namespace cc { class LayerTreeImpl; class CC_EXPORT ScrollbarLayerImplBase : public LayerImpl { public: int ScrollLayerId() const { return scroll_layer_ ? scroll_layer_->id() : Layer::INVALID_ID; } int ClipLayerId() const { return clip_layer_ ? clip_layer_->id() : Layer::INVALID_ID; } void SetScrollLayerAndClipLayerByIds(int scroll_layer_id, int clip_layer_id); void ClearScrollLayer() { scroll_layer_ = NULL; } void ClearClipLayer() { clip_layer_ = NULL; } float current_pos() const { return current_pos_; } void SetCurrentPos(float current_pos); int maximum() const { return maximum_; } void SetMaximum(int maximum); void SetVerticalAdjust(float vertical_adjust); bool is_overlay_scrollbar() const { return is_overlay_scrollbar_; } void set_is_overlay_scrollbar(bool is_overlay) { is_overlay_scrollbar_ = is_overlay; } ScrollbarOrientation orientation() const { return orientation_; } bool is_left_side_vertical_scrollbar() { return is_left_side_vertical_scrollbar_; } virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE; virtual ScrollbarLayerImplBase* ToScrollbarLayer() OVERRIDE; void PushScrollClipPropertiesTo(LayerImpl* layer); void SetVisibleToTotalLengthRatio(float ratio); virtual gfx::Rect ComputeThumbQuadRect() const; float thumb_thickness_scale_factor() { return thumb_thickness_scale_factor_; } void SetThumbThicknessScaleFactor(float thumb_thickness_scale_factor); void ScrollbarParametersDidChange(); protected: ScrollbarLayerImplBase(LayerTreeImpl* tree_impl, int id, ScrollbarOrientation orientation, bool is_left_side_vertical_scrollbar, bool is_overlay); virtual ~ScrollbarLayerImplBase(); gfx::Rect ScrollbarLayerRectToContentRect(const gfx::RectF& layer_rect) const; float visible_to_total_length_ratio() const { return visible_to_total_length_ratio_; } float vertical_adjust() const { return vertical_adjust_; } virtual int ThumbThickness() const = 0; virtual int ThumbLength() const = 0; virtual float TrackLength() const = 0; virtual int TrackStart() const = 0; // Indicates whether the thumb length can be changed without going back to the // main thread. virtual bool IsThumbResizable() const = 0; private: LayerImpl* scroll_layer_; LayerImpl* clip_layer_; bool is_overlay_scrollbar_; float thumb_thickness_scale_factor_; float current_pos_; int maximum_; ScrollbarOrientation orientation_; bool is_left_side_vertical_scrollbar_; // Difference between the clip layer's height and the visible viewport // height (which may differ in the presence of top-controls hiding). float vertical_adjust_; float visible_to_total_length_ratio_; DISALLOW_COPY_AND_ASSIGN(ScrollbarLayerImplBase); }; } // namespace cc #endif // CC_LAYERS_SCROLLBAR_LAYER_IMPL_BASE_H_