Home | History | Annotate | Download | only in scrollbar
      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() 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