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