1 // Copyright (c) 2012 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 UI_VIEWS_CONTROLS_SCROLLBAR_SCROLL_BAR_H_ 6 #define UI_VIEWS_CONTROLS_SCROLLBAR_SCROLL_BAR_H_ 7 8 #include "base/basictypes.h" 9 #include "base/compiler_specific.h" 10 #include "ui/views/view.h" 11 #include "ui/views/views_export.h" 12 13 namespace views { 14 15 class ScrollBar; 16 17 ///////////////////////////////////////////////////////////////////////////// 18 // 19 // ScrollBarController 20 // 21 // ScrollBarController defines the method that should be implemented to 22 // receive notification from a scrollbar 23 // 24 ///////////////////////////////////////////////////////////////////////////// 25 class VIEWS_EXPORT ScrollBarController { 26 public: 27 // Invoked by the scrollbar when the scrolling position changes 28 // This method typically implements the actual scrolling. 29 // 30 // The provided position is expressed in pixels. It is the new X or Y 31 // position which is in the GetMinPosition() / GetMaxPosition range. 32 virtual void ScrollToPosition(ScrollBar* source, int position) = 0; 33 34 // Returns the amount to scroll. The amount to scroll may be requested in 35 // two different amounts. If is_page is true the 'page scroll' amount is 36 // requested. The page scroll amount typically corresponds to the 37 // visual size of the view. If is_page is false, the 'line scroll' amount 38 // is being requested. The line scroll amount typically corresponds to the 39 // size of one row/column. 40 // 41 // The return value should always be positive. A value <= 0 results in 42 // scrolling by a fixed amount. 43 virtual int GetScrollIncrement(ScrollBar* source, 44 bool is_page, 45 bool is_positive) = 0; 46 }; 47 48 ///////////////////////////////////////////////////////////////////////////// 49 // 50 // ScrollBar 51 // 52 // A View subclass to wrap to implement a ScrollBar. Our current windows 53 // version simply wraps a native windows scrollbar. 54 // 55 // A scrollbar is either horizontal or vertical 56 // 57 ///////////////////////////////////////////////////////////////////////////// 58 class VIEWS_EXPORT ScrollBar : public View { 59 public: 60 virtual ~ScrollBar(); 61 62 // Overridden from View: 63 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; 64 65 // Returns whether this scrollbar is horizontal. 66 bool IsHorizontal() const; 67 68 void set_controller(ScrollBarController* controller) { 69 controller_ = controller; 70 } 71 ScrollBarController* controller() const { return controller_; } 72 73 // Update the scrollbar appearance given a viewport size, content size and 74 // current position 75 virtual void Update(int viewport_size, int content_size, int current_pos); 76 77 // Returns the max and min positions. 78 int GetMaxPosition() const; 79 int GetMinPosition() const; 80 81 // Returns the position of the scrollbar. 82 virtual int GetPosition() const = 0; 83 84 // Get the width or height of this scrollbar, for use in layout calculations. 85 // For a vertical scrollbar, this is the width of the scrollbar, likewise it 86 // is the height for a horizontal scrollbar. 87 virtual int GetLayoutSize() const = 0; 88 89 // Get the width or height for this scrollbar which overlaps with the content. 90 // Default is 0. 91 virtual int GetContentOverlapSize() const; 92 93 virtual void OnMouseEnteredScrollView(const ui::MouseEvent& event); 94 virtual void OnMouseExitedScrollView(const ui::MouseEvent& event); 95 96 protected: 97 // Create new scrollbar, either horizontal or vertical. These are protected 98 // since you need to be creating either a NativeScrollBar or a 99 // ImageScrollBar. 100 explicit ScrollBar(bool is_horiz); 101 102 private: 103 const bool is_horiz_; 104 105 ScrollBarController* controller_; 106 107 int max_pos_; 108 109 DISALLOW_COPY_AND_ASSIGN(ScrollBar); 110 }; 111 112 } // namespace views 113 114 #endif // UI_VIEWS_CONTROLS_SCROLLBAR_SCROLL_BAR_H_ 115