1 // Copyright (c) 2011 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_BASE_SCROLL_BAR_THUMB_H_ 6 #define UI_VIEWS_CONTROLS_SCROLLBAR_BASE_SCROLL_BAR_THUMB_H_ 7 8 #include "ui/gfx/size.h" 9 #include "ui/views/controls/button/custom_button.h" 10 #include "ui/views/controls/scrollbar/scroll_bar.h" 11 #include "ui/views/view.h" 12 13 namespace gfx { 14 class Canvas; 15 } 16 17 namespace views { 18 19 class BaseScrollBar; 20 21 /////////////////////////////////////////////////////////////////////////////// 22 // 23 // BaseScrollBarThumb 24 // 25 // A view that acts as the thumb in the scroll bar track that the user can 26 // drag to scroll the associated contents view within the viewport. 27 // 28 /////////////////////////////////////////////////////////////////////////////// 29 class VIEWS_EXPORT BaseScrollBarThumb : public View { 30 public: 31 explicit BaseScrollBarThumb(BaseScrollBar* scroll_bar); 32 virtual ~BaseScrollBarThumb(); 33 34 // Sets the size (width or height) of the thumb to the specified value. 35 void SetSize(int size); 36 37 // Retrieves the size (width or height) of the thumb. 38 int GetSize() const; 39 40 // Sets the position of the thumb on the x or y axis. 41 void SetPosition(int position); 42 43 // Gets the position of the thumb on the x or y axis. 44 int GetPosition() const; 45 46 // View overrides: 47 virtual gfx::Size GetPreferredSize() OVERRIDE = 0; 48 49 protected: 50 // View overrides: 51 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE = 0; 52 virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE; 53 virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE; 54 virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; 55 virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE; 56 virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE; 57 virtual void OnMouseCaptureLost() OVERRIDE; 58 59 CustomButton::ButtonState GetState() const; 60 // Update our state and schedule a repaint when the mouse moves over us. 61 void SetState(CustomButton::ButtonState state); 62 63 BaseScrollBar* scroll_bar() { return scroll_bar_; } 64 65 private: 66 // The BaseScrollBar that owns us. 67 BaseScrollBar* scroll_bar_; 68 69 int drag_start_position_; 70 71 // The position of the mouse on the scroll axis relative to the top of this 72 // View when the drag started. 73 int mouse_offset_; 74 75 // The current state of the thumb button. 76 CustomButton::ButtonState state_; 77 78 DISALLOW_COPY_AND_ASSIGN(BaseScrollBarThumb); 79 }; 80 81 } // namespace views 82 83 #endif // UI_VIEWS_CONTROLS_SCROLLBAR_BASE_SCROLL_BAR_THUMB_H_ 84