| Index: views/controls/scrollbar/bitmap_scroll_bar.h
|
| ===================================================================
|
| --- views/controls/scrollbar/bitmap_scroll_bar.h (revision 98466)
|
| +++ views/controls/scrollbar/bitmap_scroll_bar.h (working copy)
|
| @@ -6,7 +6,11 @@
|
| #define VIEWS_CONTROLS_SCROLLBAR_BITMAP_SCROLL_BAR_H_
|
| #pragma once
|
|
|
| -#include "views/controls/scrollbar/base_scroll_bar.h"
|
| +#include "views/context_menu_controller.h"
|
| +#include "views/controls/button/image_button.h"
|
| +#include "views/controls/menu/menu.h"
|
| +#include "views/controls/scrollbar/scroll_bar.h"
|
| +#include "views/repeat_controller.h"
|
|
|
| namespace views {
|
|
|
| @@ -23,13 +27,24 @@
|
| // well as for the thumb and track. This is intended for creating UIs that
|
| // have customized, non-native appearances, like floating HUDs etc.
|
| //
|
| +// Maybe TODO(beng): (Cleanup) If we need to, we may want to factor rendering
|
| +// out of this altogether and have the user supply
|
| +// Background impls for each component, and just use those
|
| +// to render, so that for example we get native theme
|
| +// rendering.
|
| +//
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -class VIEWS_EXPORT BitmapScrollBar : public BaseScrollBar,
|
| - public ButtonListener {
|
| +class BitmapScrollBar : public ScrollBar,
|
| + public ButtonListener,
|
| + public ContextMenuController,
|
| + public Menu::Delegate {
|
| public:
|
| BitmapScrollBar(bool horizontal, bool show_scroll_buttons);
|
| virtual ~BitmapScrollBar() { }
|
|
|
| + // Get the bounds of the "track" area that the thumb is free to slide within.
|
| + gfx::Rect GetTrackBounds() const;
|
| +
|
| // A list of parts that the user may supply bitmaps for.
|
| enum ScrollBarPart {
|
| // The button used to represent scrolling up/left by 1 line.
|
| @@ -56,31 +71,122 @@
|
| CustomButton::ButtonState state,
|
| SkBitmap* bitmap);
|
|
|
| + // An enumeration of different amounts of incremental scroll, representing
|
| + // events sent from different parts of the UI/keyboard.
|
| + enum ScrollAmount {
|
| + SCROLL_NONE = 0,
|
| + SCROLL_START,
|
| + SCROLL_END,
|
| + SCROLL_PREV_LINE,
|
| + SCROLL_NEXT_LINE,
|
| + SCROLL_PREV_PAGE,
|
| + SCROLL_NEXT_PAGE,
|
| + };
|
|
|
| - gfx::Rect GetTrackBounds() const;
|
| + // Scroll the contents by the specified type (see ScrollAmount above).
|
| + void ScrollByAmount(ScrollAmount amount);
|
|
|
| - protected:
|
| + // Scroll the contents to the appropriate position given the supplied
|
| + // position of the thumb (thumb track coordinates). If |scroll_to_middle| is
|
| + // true, then the conversion assumes |thumb_position| is in the middle of the
|
| + // thumb rather than the top.
|
| + void ScrollToThumbPosition(int thumb_position, bool scroll_to_middle);
|
| +
|
| + // Scroll the contents by the specified offset (contents coordinates).
|
| + void ScrollByContentsOffset(int contents_offset);
|
| +
|
| // View overrides:
|
| virtual gfx::Size GetPreferredSize() OVERRIDE;
|
| virtual void Layout() OVERRIDE;
|
| - virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
|
| + virtual bool OnMousePressed(const MouseEvent& event) OVERRIDE;
|
| + virtual void OnMouseReleased(const MouseEvent& event) OVERRIDE;
|
| + virtual void OnMouseCaptureLost() OVERRIDE;
|
| + virtual bool OnKeyPressed(const KeyEvent& event) OVERRIDE;
|
| + virtual bool OnMouseWheel(const MouseWheelEvent& event) OVERRIDE;
|
|
|
| - // ScrollBar overrides:
|
| - virtual int GetLayoutSize() const OVERRIDE;
|
| -
|
| // BaseButton::ButtonListener overrides:
|
| virtual void ButtonPressed(Button* sender,
|
| const views::Event& event) OVERRIDE;
|
|
|
| + // ScrollBar overrides:
|
| + virtual void Update(int viewport_size,
|
| + int content_size,
|
| + int contents_scroll_offset) OVERRIDE;
|
| + virtual int GetLayoutSize() const OVERRIDE;
|
| + virtual int GetPosition() const OVERRIDE;
|
| +
|
| + // ContextMenuController overrides.
|
| + virtual void ShowContextMenuForView(View* source,
|
| + const gfx::Point& p,
|
| + bool is_mouse_gesture) OVERRIDE;
|
| +
|
| + // Menu::Delegate overrides:
|
| + virtual std::wstring GetLabel(int id) const OVERRIDE;
|
| + virtual bool IsCommandEnabled(int id) const OVERRIDE;
|
| + virtual void ExecuteCommand(int id) OVERRIDE;
|
| +
|
| + protected:
|
| + // View overrides:
|
| + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
|
| +
|
| private:
|
| - // Up/Down/Left/Right buttons.
|
| - ImageButton* prev_button_;
|
| - ImageButton* next_button_;
|
| + // Called when the mouse is pressed down in the track area.
|
| + void TrackClicked();
|
|
|
| + // Responsible for scrolling the contents and also updating the UI to the
|
| + // current value of the Scroll Offset.
|
| + void ScrollContentsToOffset();
|
| +
|
| + // Returns the size (width or height) of the track area of the ScrollBar.
|
| + int GetTrackSize() const;
|
| +
|
| + // Calculate the position of the thumb within the track based on the
|
| + // specified scroll offset of the contents.
|
| + int CalculateThumbPosition(int contents_scroll_offset) const;
|
| +
|
| + // Calculates the current value of the contents offset (contents coordinates)
|
| + // based on the current thumb position (thumb track coordinates). See
|
| + // |ScrollToThumbPosition| for an explanation of |scroll_to_middle|.
|
| + int CalculateContentsOffset(int thumb_position,
|
| + bool scroll_to_middle) const;
|
| +
|
| + // Called when the state of the thumb track changes (e.g. by the user
|
| + // pressing the mouse button down in it).
|
| + void SetThumbTrackState(CustomButton::ButtonState state);
|
| +
|
| // The thumb needs to be able to access the part images.
|
| friend BitmapScrollBarThumb;
|
| SkBitmap* images_[PART_COUNT][CustomButton::BS_COUNT];
|
|
|
| + // The size of the scrolled contents, in pixels.
|
| + int contents_size_;
|
| +
|
| + // The current amount the contents is offset by in the viewport.
|
| + int contents_scroll_offset_;
|
| +
|
| + // Up/Down/Left/Right buttons and the Thumb.
|
| + ImageButton* prev_button_;
|
| + ImageButton* next_button_;
|
| + BitmapScrollBarThumb* thumb_;
|
| +
|
| + // The state of the scrollbar track. Typically, the track will highlight when
|
| + // the user presses the mouse on them (during page scrolling).
|
| + CustomButton::ButtonState thumb_track_state_;
|
| +
|
| + // The last amount of incremental scroll that this scrollbar performed. This
|
| + // is accessed by the callbacks for the auto-repeat up/down buttons to know
|
| + // what direction to repeatedly scroll in.
|
| + ScrollAmount last_scroll_amount_;
|
| +
|
| + // An instance of a RepeatController which scrolls the scrollbar continuously
|
| + // as the user presses the mouse button down on the up/down buttons or the
|
| + // track.
|
| + RepeatController repeater_;
|
| +
|
| + // The position of the mouse within the scroll bar when the context menu
|
| + // was invoked.
|
| + int context_menu_mouse_position_;
|
| +
|
| // True if the scroll buttons at each end of the scroll bar should be shown.
|
| bool show_scroll_buttons_;
|
|
|
|
|