// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_VIEWS_CONTROLS_SCROLLBAR_SCROLL_BAR_H_ #define UI_VIEWS_CONTROLS_SCROLLBAR_SCROLL_BAR_H_ #include "base/basictypes.h" #include "base/compiler_specific.h" #include "ui/views/view.h" #include "ui/views/views_export.h" namespace views { class ScrollBar; ///////////////////////////////////////////////////////////////////////////// // // ScrollBarController // // ScrollBarController defines the method that should be implemented to // receive notification from a scrollbar // ///////////////////////////////////////////////////////////////////////////// class VIEWS_EXPORT ScrollBarController { public: // Invoked by the scrollbar when the scrolling position changes // This method typically implements the actual scrolling. // // The provided position is expressed in pixels. It is the new X or Y // position which is in the GetMinPosition() / GetMaxPosition range. virtual void ScrollToPosition(ScrollBar* source, int position) = 0; // Returns the amount to scroll. The amount to scroll may be requested in // two different amounts. If is_page is true the 'page scroll' amount is // requested. The page scroll amount typically corresponds to the // visual size of the view. If is_page is false, the 'line scroll' amount // is being requested. The line scroll amount typically corresponds to the // size of one row/column. // // The return value should always be positive. A value <= 0 results in // scrolling by a fixed amount. virtual int GetScrollIncrement(ScrollBar* source, bool is_page, bool is_positive) = 0; }; ///////////////////////////////////////////////////////////////////////////// // // ScrollBar // // A View subclass to wrap to implement a ScrollBar. Our current windows // version simply wraps a native windows scrollbar. // // A scrollbar is either horizontal or vertical // ///////////////////////////////////////////////////////////////////////////// class VIEWS_EXPORT ScrollBar : public View { public: virtual ~ScrollBar(); // Overridden from View: virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; // Returns whether this scrollbar is horizontal. bool IsHorizontal() const; void set_controller(ScrollBarController* controller) { controller_ = controller; } ScrollBarController* controller() const { return controller_; } // Update the scrollbar appearance given a viewport size, content size and // current position virtual void Update(int viewport_size, int content_size, int current_pos); // Returns the max and min positions. int GetMaxPosition() const; int GetMinPosition() const; // Returns the position of the scrollbar. virtual int GetPosition() const = 0; // Get the width or height of this scrollbar, for use in layout calculations. // For a vertical scrollbar, this is the width of the scrollbar, likewise it // is the height for a horizontal scrollbar. virtual int GetLayoutSize() const = 0; // Get the width or height for this scrollbar which overlaps with the content. // Default is 0. virtual int GetContentOverlapSize() const; virtual void OnMouseEnteredScrollView(const ui::MouseEvent& event); virtual void OnMouseExitedScrollView(const ui::MouseEvent& event); protected: // Create new scrollbar, either horizontal or vertical. These are protected // since you need to be creating either a NativeScrollBar or a // ImageScrollBar. explicit ScrollBar(bool is_horiz); private: const bool is_horiz_; ScrollBarController* controller_; int max_pos_; DISALLOW_COPY_AND_ASSIGN(ScrollBar); }; } // namespace views #endif // UI_VIEWS_CONTROLS_SCROLLBAR_SCROLL_BAR_H_