158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CC_LAYERS_SCROLLBAR_LAYER_IMPL_BASE_H_ 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CC_LAYERS_SCROLLBAR_LAYER_IMPL_BASE_H_ 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "cc/base/cc_export.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "cc/input/scrollbar.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "cc/layers/layer.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "cc/layers/layer_impl.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace cc { 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class LayerTreeImpl; 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class CC_EXPORT ScrollbarLayerImplBase : public LayerImpl { 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int ScrollLayerId() const { 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scroll_layer_ ? scroll_layer_->id() : Layer::INVALID_ID; 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int ClipLayerId() const { 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return clip_layer_ ? clip_layer_->id() : Layer::INVALID_ID; 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetScrollLayerAndClipLayerByIds(int scroll_layer_id, int clip_layer_id); 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void ClearScrollLayer() { scroll_layer_ = NULL; } 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ClearClipLayer() { clip_layer_ = NULL; } 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float current_pos() const { return current_pos_; } 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool SetCurrentPos(float current_pos); 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int maximum() const { return maximum_; } 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool SetMaximum(int maximum); 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool SetVerticalAdjust(float vertical_adjust); 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool is_overlay_scrollbar() const { return is_overlay_scrollbar_; } 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void set_is_overlay_scrollbar(bool is_overlay) { 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) is_overlay_scrollbar_ = is_overlay; 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScrollbarOrientation orientation() const { return orientation_; } 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool is_left_side_vertical_scrollbar() { 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return is_left_side_vertical_scrollbar_; 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE; 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ScrollbarLayerImplBase* ToScrollbarLayer() OVERRIDE; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void PushScrollClipPropertiesTo(LayerImpl* layer); 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool SetVisibleToTotalLengthRatio(float ratio); 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual gfx::Rect ComputeThumbQuadRect() const; 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float thumb_thickness_scale_factor() { 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return thumb_thickness_scale_factor_; 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool SetThumbThicknessScaleFactor(float thumb_thickness_scale_factor); 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ScrollbarParametersDidChange(); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScrollbarLayerImplBase(LayerTreeImpl* tree_impl, 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int id, 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScrollbarOrientation orientation, 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_left_side_vertical_scrollbar, 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_overlay); 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~ScrollbarLayerImplBase(); 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Rect ScrollbarLayerRectToContentRect(const gfx::RectF& layer_rect) const; 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float visible_to_total_length_ratio() const { 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return visible_to_total_length_ratio_; 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float vertical_adjust() const { return vertical_adjust_; } 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual int ThumbThickness() const = 0; 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual int ThumbLength() const = 0; 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual float TrackLength() const = 0; 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual int TrackStart() const = 0; 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Indicates whether the thumb length can be changed without going back to the 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // main thread. 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool IsThumbResizable() const = 0; 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LayerImpl* scroll_layer_; 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LayerImpl* clip_layer_; 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool is_overlay_scrollbar_; 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float thumb_thickness_scale_factor_; 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float current_pos_; 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int maximum_; 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScrollbarOrientation orientation_; 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool is_left_side_vertical_scrollbar_; 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Difference between the clip layer's height and the visible viewport 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // height (which may differ in the presence of top-controls hiding). 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float vertical_adjust_; 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float visible_to_total_length_ratio_; 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScrollbarLayerImplBase); 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace cc 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // CC_LAYERS_SCROLLBAR_LAYER_IMPL_BASE_H_ 107