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 13namespace gfx { 14class Canvas; 15} 16 17namespace views { 18 19class 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/////////////////////////////////////////////////////////////////////////////// 29class 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() const 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