| Index: views/controls/scrollbar/bitmap_scroll_bar.cc
|
| diff --git a/views/controls/scrollbar/bitmap_scroll_bar.cc b/views/controls/scrollbar/bitmap_scroll_bar.cc
|
| index b52e8d91a3884119e35d87c834af47ae431c8763..7bbd3a415a3e067d3fc23cd7a84a3b1e36416672 100644
|
| --- a/views/controls/scrollbar/bitmap_scroll_bar.cc
|
| +++ b/views/controls/scrollbar/bitmap_scroll_bar.cc
|
| @@ -97,59 +97,14 @@ class AutorepeatButton : public ImageButton {
|
| // drag to scroll the associated contents view within the viewport.
|
| //
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -class BitmapScrollBarThumb : public View {
|
| +class BitmapScrollBarThumb : public BaseScrollBarThumb {
|
| public:
|
| explicit BitmapScrollBarThumb(BitmapScrollBar* scroll_bar)
|
| - : scroll_bar_(scroll_bar),
|
| - drag_start_position_(-1),
|
| - mouse_offset_(-1),
|
| - state_(CustomButton::BS_NORMAL) {
|
| + : BaseScrollBarThumb(scroll_bar),
|
| + scroll_bar_(scroll_bar) {
|
| }
|
| virtual ~BitmapScrollBarThumb() { }
|
|
|
| - // Sets the size (width or height) of the thumb to the specified value.
|
| - void SetSize(int size) {
|
| - // Make sure the thumb is never sized smaller than its minimum possible
|
| - // display size.
|
| - gfx::Size prefsize = GetPreferredSize();
|
| - size = std::max(size, scroll_bar_->IsHorizontal() ? prefsize.width() :
|
| - prefsize.height());
|
| - gfx::Rect thumb_bounds = bounds();
|
| - if (scroll_bar_->IsHorizontal()) {
|
| - thumb_bounds.set_width(size);
|
| - } else {
|
| - thumb_bounds.set_height(size);
|
| - }
|
| - SetBoundsRect(thumb_bounds);
|
| - }
|
| -
|
| - // Retrieves the size (width or height) of the thumb.
|
| - int GetSize() const {
|
| - if (scroll_bar_->IsHorizontal())
|
| - return width();
|
| - return height();
|
| - }
|
| -
|
| - // Sets the position of the thumb on the x or y axis.
|
| - void SetPosition(int position) {
|
| - gfx::Rect thumb_bounds = bounds();
|
| - gfx::Rect track_bounds = scroll_bar_->GetTrackBounds();
|
| - if (scroll_bar_->IsHorizontal()) {
|
| - thumb_bounds.set_x(track_bounds.x() + position);
|
| - } else {
|
| - thumb_bounds.set_y(track_bounds.y() + position);
|
| - }
|
| - SetBoundsRect(thumb_bounds);
|
| - }
|
| -
|
| - // Gets the position of the thumb on the x or y axis.
|
| - int GetPosition() const {
|
| - gfx::Rect track_bounds = scroll_bar_->GetTrackBounds();
|
| - if (scroll_bar_->IsHorizontal())
|
| - return x() - track_bounds.x();
|
| - return y() - track_bounds.y();
|
| - }
|
| -
|
| // View overrides:
|
| virtual gfx::Size GetPreferredSize() OVERRIDE {
|
| return gfx::Size(background_bitmap()->width(),
|
| @@ -176,71 +131,21 @@ class BitmapScrollBarThumb : public View {
|
| canvas->DrawBitmapInt(*grippy_bitmap(), grippy_x, grippy_y);
|
| }
|
|
|
| - virtual void OnMouseEntered(const MouseEvent& event) OVERRIDE {
|
| - SetState(CustomButton::BS_HOT);
|
| - }
|
| -
|
| - virtual void OnMouseExited(const MouseEvent& event) OVERRIDE {
|
| - SetState(CustomButton::BS_NORMAL);
|
| - }
|
| -
|
| - virtual bool OnMousePressed(const MouseEvent& event) OVERRIDE {
|
| - mouse_offset_ = scroll_bar_->IsHorizontal() ? event.x() : event.y();
|
| - drag_start_position_ = GetPosition();
|
| - SetState(CustomButton::BS_PUSHED);
|
| - return true;
|
| - }
|
| -
|
| - virtual bool OnMouseDragged(const MouseEvent& event) OVERRIDE {
|
| - // If the user moves the mouse more than |kScrollThumbDragOutSnap| outside
|
| - // the bounds of the thumb, the scrollbar will snap the scroll back to the
|
| - // point it was at before the drag began.
|
| - if (scroll_bar_->IsHorizontal()) {
|
| - if ((event.y() < y() - kScrollThumbDragOutSnap) ||
|
| - (event.y() > (y() + height() + kScrollThumbDragOutSnap))) {
|
| - scroll_bar_->ScrollToThumbPosition(drag_start_position_, false);
|
| - return true;
|
| - }
|
| - } else {
|
| - if ((event.x() < x() - kScrollThumbDragOutSnap) ||
|
| - (event.x() > (x() + width() + kScrollThumbDragOutSnap))) {
|
| - scroll_bar_->ScrollToThumbPosition(drag_start_position_, false);
|
| - return true;
|
| - }
|
| - }
|
| - if (scroll_bar_->IsHorizontal()) {
|
| - int thumb_x = event.x() - mouse_offset_;
|
| - scroll_bar_->ScrollToThumbPosition(x() + thumb_x, false);
|
| - } else {
|
| - int thumb_y = event.y() - mouse_offset_;
|
| - scroll_bar_->ScrollToThumbPosition(y() + thumb_y, false);
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - virtual void OnMouseReleased(const MouseEvent& event) OVERRIDE {
|
| - OnMouseCaptureLost();
|
| - }
|
| -
|
| - virtual void OnMouseCaptureLost() OVERRIDE {
|
| - SetState(CustomButton::BS_HOT);
|
| - }
|
| -
|
| private:
|
| // Returns the bitmap rendered at the start of the thumb.
|
| SkBitmap* start_cap_bitmap() const {
|
| - return scroll_bar_->images_[BitmapScrollBar::THUMB_START_CAP][state_];
|
| + return scroll_bar_->images_[BitmapScrollBar::THUMB_START_CAP][GetState()];
|
| }
|
|
|
| // Returns the bitmap rendered at the end of the thumb.
|
| SkBitmap* end_cap_bitmap() const {
|
| - return scroll_bar_->images_[BitmapScrollBar::THUMB_END_CAP][state_];
|
| + return scroll_bar_->images_[BitmapScrollBar::THUMB_END_CAP][GetState()];
|
| }
|
|
|
| // Returns the bitmap that is tiled in the background of the thumb between
|
| // the start and the end caps.
|
| SkBitmap* background_bitmap() const {
|
| - return scroll_bar_->images_[BitmapScrollBar::THUMB_MIDDLE][state_];
|
| + return scroll_bar_->images_[BitmapScrollBar::THUMB_MIDDLE][GetState()];
|
| }
|
|
|
| // Returns the bitmap that is rendered in the middle of the thumb
|
| @@ -250,24 +155,9 @@ class BitmapScrollBarThumb : public View {
|
| [CustomButton::BS_NORMAL];
|
| }
|
|
|
| - // Update our state and schedule a repaint when the mouse moves over us.
|
| - void SetState(CustomButton::ButtonState state) {
|
| - state_ = state;
|
| - SchedulePaint();
|
| - }
|
| -
|
| // The BitmapScrollBar that owns us.
|
| BitmapScrollBar* scroll_bar_;
|
|
|
| - int drag_start_position_;
|
| -
|
| - // The position of the mouse on the scroll axis relative to the top of this
|
| - // View when the drag started.
|
| - int mouse_offset_;
|
| -
|
| - // The current state of the thumb button.
|
| - CustomButton::ButtonState state_;
|
| -
|
| DISALLOW_COPY_AND_ASSIGN(BitmapScrollBarThumb);
|
| };
|
|
|
| @@ -277,11 +167,10 @@ class BitmapScrollBarThumb : public View {
|
| // BitmapScrollBar, public:
|
|
|
| BitmapScrollBar::BitmapScrollBar(bool horizontal, bool show_scroll_buttons)
|
| - : contents_size_(0),
|
| + : BaseScrollBar(horizontal, new BitmapScrollBarThumb(this)),
|
| contents_scroll_offset_(0),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(prev_button_(new AutorepeatButton(this))),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(next_button_(new AutorepeatButton(this))),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(thumb_(new BitmapScrollBarThumb(this))),
|
| thumb_track_state_(CustomButton::BS_NORMAL),
|
| last_scroll_amount_(SCROLL_NONE),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(repeater_(
|
| @@ -297,29 +186,10 @@ BitmapScrollBar::BitmapScrollBar(bool horizontal, bool show_scroll_buttons)
|
|
|
| AddChildView(prev_button_);
|
| AddChildView(next_button_);
|
| - AddChildView(thumb_);
|
|
|
| set_context_menu_controller(this);
|
| prev_button_->set_context_menu_controller(this);
|
| next_button_->set_context_menu_controller(this);
|
| - thumb_->set_context_menu_controller(this);
|
| -}
|
| -
|
| -gfx::Rect BitmapScrollBar::GetTrackBounds() const {
|
| - gfx::Size prefsize = prev_button_->GetPreferredSize();
|
| - if (IsHorizontal()) {
|
| - if (!show_scroll_buttons_)
|
| - prefsize.set_width(0);
|
| - int new_width =
|
| - std::max(0, width() - (prefsize.width() * 2));
|
| - gfx::Rect track_bounds(prefsize.width(), 0, new_width, prefsize.height());
|
| - return track_bounds;
|
| - }
|
| - if (!show_scroll_buttons_)
|
| - prefsize.set_height(0);
|
| - gfx::Rect track_bounds(0, prefsize.height(), prefsize.width(),
|
| - std::max(0, height() - (prefsize.height() * 2)));
|
| - return track_bounds;
|
| }
|
|
|
| void BitmapScrollBar::SetImage(ScrollBarPart part,
|
| @@ -344,71 +214,39 @@ void BitmapScrollBar::SetImage(ScrollBarPart part,
|
| }
|
| }
|
|
|
| -void BitmapScrollBar::ScrollByAmount(ScrollAmount amount) {
|
| - ScrollBarController* controller = GetController();
|
| - int offset = contents_scroll_offset_;
|
| - switch (amount) {
|
| - case SCROLL_START:
|
| - offset = GetMinPosition();
|
| - break;
|
| - case SCROLL_END:
|
| - offset = GetMaxPosition();
|
| - break;
|
| - case SCROLL_PREV_LINE:
|
| - offset -= controller->GetScrollIncrement(this, false, false);
|
| - offset = std::max(GetMinPosition(), offset);
|
| - break;
|
| - case SCROLL_NEXT_LINE:
|
| - offset += controller->GetScrollIncrement(this, false, true);
|
| - offset = std::min(GetMaxPosition(), offset);
|
| - break;
|
| - case SCROLL_PREV_PAGE:
|
| - offset -= controller->GetScrollIncrement(this, true, false);
|
| - offset = std::max(GetMinPosition(), offset);
|
| - break;
|
| - case SCROLL_NEXT_PAGE:
|
| - offset += controller->GetScrollIncrement(this, true, true);
|
| - offset = std::min(GetMaxPosition(), offset);
|
| - break;
|
| - }
|
| - contents_scroll_offset_ = offset;
|
| - ScrollContentsToOffset();
|
| -}
|
| -
|
| -void BitmapScrollBar::ScrollToThumbPosition(int thumb_position,
|
| - bool scroll_to_middle) {
|
| - contents_scroll_offset_ =
|
| - CalculateContentsOffset(thumb_position, scroll_to_middle);
|
| - if (contents_scroll_offset_ < GetMinPosition()) {
|
| - contents_scroll_offset_ = GetMinPosition();
|
| - } else if (contents_scroll_offset_ > GetMaxPosition()) {
|
| - contents_scroll_offset_ = GetMaxPosition();
|
| - }
|
| - ScrollContentsToOffset();
|
| - SchedulePaint();
|
| +int BaseScrollBar::GetLayoutSize() const {
|
| + gfx::Size prefsize = prev_button_->GetPreferredSize();
|
| + return IsHorizontal() ? prefsize.height() : prefsize.width();
|
| }
|
|
|
| -void BitmapScrollBar::ScrollByContentsOffset(int contents_offset) {
|
| - contents_scroll_offset_ -= contents_offset;
|
| - if (contents_scroll_offset_ < GetMinPosition()) {
|
| - contents_scroll_offset_ = GetMinPosition();
|
| - } else if (contents_scroll_offset_ > GetMaxPosition()) {
|
| - contents_scroll_offset_ = GetMaxPosition();
|
| +gfx::Rect BaseScrollBar::GetTrackBounds() const {
|
| + gfx::Size prefsize = prev_button_->GetPreferredSize();
|
| + if (IsHorizontal()) {
|
| + if (!show_scroll_buttons_)
|
| + prefsize.set_width(0);
|
| + int new_width =
|
| + std::max(0, width() - (prefsize.width() * 2));
|
| + gfx::Rect track_bounds(prefsize.width(), 0, new_width, prefsize.height());
|
| + return track_bounds;
|
| }
|
| - ScrollContentsToOffset();
|
| + if (!show_scroll_buttons_)
|
| + prefsize.set_height(0);
|
| + gfx::Rect track_bounds(0, prefsize.height(), prefsize.width(),
|
| + std::max(0, height() - (prefsize.height() * 2)));
|
| + return track_bounds;
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -// BitmapScrollBar, View implementation:
|
| +// BaseScrollBar, View implementation:
|
|
|
| -gfx::Size BitmapScrollBar::GetPreferredSize() {
|
| +gfx::Size BaseScrollBar::GetPreferredSize() {
|
| // In this case, we're returning the desired width of the scrollbar and its
|
| // minimum allowable height.
|
| gfx::Size button_prefsize = prev_button_->GetPreferredSize();
|
| return gfx::Size(button_prefsize.width(), button_prefsize.height() * 2);
|
| }
|
|
|
| -void BitmapScrollBar::Layout() {
|
| +void BaseScrollBar::Layout() {
|
| // Size and place the two scroll buttons.
|
| if (show_scroll_buttons_) {
|
| gfx::Size prefsize = prev_button_->GetPreferredSize();
|
| @@ -426,19 +264,20 @@ void BitmapScrollBar::Layout() {
|
| next_button_->SetBounds(0, 0, 0, 0);
|
| }
|
|
|
| + BaseScrollBarThumb* thumb = GetThumb();
|
| // Size and place the thumb
|
| - gfx::Size thumb_prefsize = thumb_->GetPreferredSize();
|
| + gfx::Size thumb_prefsize = thumb->GetPreferredSize();
|
| gfx::Rect track_bounds = GetTrackBounds();
|
|
|
| // Preserve the height/width of the thumb (depending on orientation) as set
|
| // by the last call to |Update|, but coerce the width/height to be the
|
| // appropriate value for the bitmaps provided.
|
| if (IsHorizontal()) {
|
| - thumb_->SetBounds(thumb_->x(), thumb_->y(), thumb_->width(),
|
| - thumb_prefsize.height());
|
| + thumb->SetBounds(thumb->x(), thumb->y(), thumb->width(),
|
| + thumbprefsize.height());
|
| } else {
|
| - thumb_->SetBounds(thumb_->x(), thumb_->y(), thumb_prefsize.width(),
|
| - thumb_->height());
|
| + thumb->SetBounds(thumb->x(), thumb->y(), thumbprefsize.width(),
|
| + thumb->height());
|
| }
|
|
|
| // Hide the thumb if the track isn't tall enough to display even a tiny
|
| @@ -446,248 +285,13 @@ void BitmapScrollBar::Layout() {
|
| // in this scenario.
|
| if ((IsHorizontal() && (track_bounds.width() < thumb_prefsize.width()) ||
|
| (!IsHorizontal() && (track_bounds.height() < thumb_prefsize.height())))) {
|
| - thumb_->SetVisible(false);
|
| - } else if (!thumb_->IsVisible()) {
|
| - thumb_->SetVisible(true);
|
| - }
|
| -}
|
| -
|
| -bool BitmapScrollBar::OnMousePressed(const MouseEvent& event) {
|
| - if (event.IsOnlyLeftMouseButton()) {
|
| - SetThumbTrackState(CustomButton::BS_PUSHED);
|
| - gfx::Rect thumb_bounds = thumb_->bounds();
|
| - if (IsHorizontal()) {
|
| - if (event.x() < thumb_bounds.x()) {
|
| - last_scroll_amount_ = SCROLL_PREV_PAGE;
|
| - } else if (event.x() > thumb_bounds.right()) {
|
| - last_scroll_amount_ = SCROLL_NEXT_PAGE;
|
| - }
|
| - } else {
|
| - if (event.y() < thumb_bounds.y()) {
|
| - last_scroll_amount_ = SCROLL_PREV_PAGE;
|
| - } else if (event.y() > thumb_bounds.bottom()) {
|
| - last_scroll_amount_ = SCROLL_NEXT_PAGE;
|
| - }
|
| - }
|
| - TrackClicked();
|
| - repeater_.Start();
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -void BitmapScrollBar::OnMouseReleased(const MouseEvent& event) {
|
| - OnMouseCaptureLost();
|
| -}
|
| -
|
| -void BitmapScrollBar::OnMouseCaptureLost() {
|
| - SetThumbTrackState(CustomButton::BS_NORMAL);
|
| - repeater_.Stop();
|
| -}
|
| -
|
| -bool BitmapScrollBar::OnKeyPressed(const KeyEvent& event) {
|
| - ScrollAmount amount = SCROLL_NONE;
|
| - switch (event.key_code()) {
|
| - case ui::VKEY_UP:
|
| - if (!IsHorizontal())
|
| - amount = SCROLL_PREV_LINE;
|
| - break;
|
| - case ui::VKEY_DOWN:
|
| - if (!IsHorizontal())
|
| - amount = SCROLL_NEXT_LINE;
|
| - break;
|
| - case ui::VKEY_LEFT:
|
| - if (IsHorizontal())
|
| - amount = SCROLL_PREV_LINE;
|
| - break;
|
| - case ui::VKEY_RIGHT:
|
| - if (IsHorizontal())
|
| - amount = SCROLL_NEXT_LINE;
|
| - break;
|
| - case ui::VKEY_PRIOR:
|
| - amount = SCROLL_PREV_PAGE;
|
| - break;
|
| - case ui::VKEY_NEXT:
|
| - amount = SCROLL_NEXT_PAGE;
|
| - break;
|
| - case ui::VKEY_HOME:
|
| - amount = SCROLL_START;
|
| - break;
|
| - case ui::VKEY_END:
|
| - amount = SCROLL_END;
|
| - break;
|
| - }
|
| - if (amount != SCROLL_NONE) {
|
| - ScrollByAmount(amount);
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -bool BitmapScrollBar::OnMouseWheel(const MouseWheelEvent& event) {
|
| - ScrollByContentsOffset(event.offset());
|
| - return true;
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -// BitmapScrollBar, ContextMenuController implementation:
|
| -
|
| -enum ScrollBarContextMenuCommands {
|
| - ScrollBarContextMenuCommand_ScrollHere = 1,
|
| - ScrollBarContextMenuCommand_ScrollStart,
|
| - ScrollBarContextMenuCommand_ScrollEnd,
|
| - ScrollBarContextMenuCommand_ScrollPageUp,
|
| - ScrollBarContextMenuCommand_ScrollPageDown,
|
| - ScrollBarContextMenuCommand_ScrollPrev,
|
| - ScrollBarContextMenuCommand_ScrollNext
|
| -};
|
| -
|
| -void BitmapScrollBar::ShowContextMenuForView(View* source,
|
| - const gfx::Point& p,
|
| - bool is_mouse_gesture) {
|
| - Widget* widget = GetWidget();
|
| - gfx::Rect widget_bounds = widget->GetWindowScreenBounds();
|
| - gfx::Point temp_pt(p.x() - widget_bounds.x(), p.y() - widget_bounds.y());
|
| - View::ConvertPointFromWidget(this, &temp_pt);
|
| - context_menu_mouse_position_ = IsHorizontal() ? temp_pt.x() : temp_pt.y();
|
| -
|
| - scoped_ptr<Menu> menu(
|
| - Menu::Create(this, Menu::TOPLEFT, GetWidget()->GetNativeView()));
|
| - menu->AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollHere);
|
| - menu->AppendSeparator();
|
| - menu->AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollStart);
|
| - menu->AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollEnd);
|
| - menu->AppendSeparator();
|
| - menu->AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollPageUp);
|
| - menu->AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollPageDown);
|
| - menu->AppendSeparator();
|
| - menu->AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollPrev);
|
| - menu->AppendDelegateMenuItem(ScrollBarContextMenuCommand_ScrollNext);
|
| - menu->RunMenuAt(p.x(), p.y());
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -// BitmapScrollBar, Menu::Delegate implementation:
|
| -
|
| -std::wstring BitmapScrollBar::GetLabel(int id) const {
|
| - int ids_value = 0;
|
| - switch (id) {
|
| - case ScrollBarContextMenuCommand_ScrollHere:
|
| - ids_value = IDS_APP_SCROLLBAR_CXMENU_SCROLLHERE;
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollStart:
|
| - ids_value = IsHorizontal() ? IDS_APP_SCROLLBAR_CXMENU_SCROLLLEFTEDGE
|
| - : IDS_APP_SCROLLBAR_CXMENU_SCROLLHOME;
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollEnd:
|
| - ids_value = IsHorizontal() ? IDS_APP_SCROLLBAR_CXMENU_SCROLLRIGHTEDGE
|
| - : IDS_APP_SCROLLBAR_CXMENU_SCROLLEND;
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollPageUp:
|
| - ids_value = IDS_APP_SCROLLBAR_CXMENU_SCROLLPAGEUP;
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollPageDown:
|
| - ids_value = IDS_APP_SCROLLBAR_CXMENU_SCROLLPAGEDOWN;
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollPrev:
|
| - ids_value = IsHorizontal() ? IDS_APP_SCROLLBAR_CXMENU_SCROLLLEFT
|
| - : IDS_APP_SCROLLBAR_CXMENU_SCROLLUP;
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollNext:
|
| - ids_value = IsHorizontal() ? IDS_APP_SCROLLBAR_CXMENU_SCROLLRIGHT
|
| - : IDS_APP_SCROLLBAR_CXMENU_SCROLLDOWN;
|
| - break;
|
| - default:
|
| - NOTREACHED() << "Invalid BitmapScrollBar Context Menu command!";
|
| - }
|
| -
|
| - return ids_value ? UTF16ToWide(l10n_util::GetStringUTF16(ids_value)) : L"";
|
| -}
|
| -
|
| -bool BitmapScrollBar::IsCommandEnabled(int id) const {
|
| - switch (id) {
|
| - case ScrollBarContextMenuCommand_ScrollPageUp:
|
| - case ScrollBarContextMenuCommand_ScrollPageDown:
|
| - return !IsHorizontal();
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -void BitmapScrollBar::ExecuteCommand(int id) {
|
| - switch (id) {
|
| - case ScrollBarContextMenuCommand_ScrollHere:
|
| - ScrollToThumbPosition(context_menu_mouse_position_, true);
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollStart:
|
| - ScrollByAmount(SCROLL_START);
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollEnd:
|
| - ScrollByAmount(SCROLL_END);
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollPageUp:
|
| - ScrollByAmount(SCROLL_PREV_PAGE);
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollPageDown:
|
| - ScrollByAmount(SCROLL_NEXT_PAGE);
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollPrev:
|
| - ScrollByAmount(SCROLL_PREV_LINE);
|
| - break;
|
| - case ScrollBarContextMenuCommand_ScrollNext:
|
| - ScrollByAmount(SCROLL_NEXT_LINE);
|
| - break;
|
| - }
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -// BitmapScrollBar, ButtonListener implementation:
|
| -
|
| -void BitmapScrollBar::ButtonPressed(Button* sender, const views::Event& event) {
|
| - if (sender == prev_button_) {
|
| - ScrollByAmount(SCROLL_PREV_LINE);
|
| - } else if (sender == next_button_) {
|
| - ScrollByAmount(SCROLL_NEXT_LINE);
|
| + thumb->SetVisible(false);
|
| + } else if (!thumb->IsVisible()) {
|
| + thumb->SetVisible(true);
|
| }
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -// BitmapScrollBar, ScrollBar implementation:
|
| -
|
| -void BitmapScrollBar::Update(int viewport_size, int content_size,
|
| - int contents_scroll_offset) {
|
| - ScrollBar::Update(viewport_size, content_size, contents_scroll_offset);
|
| -
|
| - // Make sure contents_size is always > 0 to avoid divide by zero errors in
|
| - // calculations throughout this code.
|
| - contents_size_ = std::max(1, content_size);
|
| -
|
| - if (content_size < 0)
|
| - content_size = 0;
|
| - if (contents_scroll_offset < 0)
|
| - contents_scroll_offset = 0;
|
| - if (contents_scroll_offset > content_size)
|
| - contents_scroll_offset = content_size;
|
| -
|
| - // Thumb Height and Thumb Pos.
|
| - // The height of the thumb is the ratio of the Viewport height to the
|
| - // content size multiplied by the height of the thumb track.
|
| - double ratio = static_cast<double>(viewport_size) / contents_size_;
|
| - int thumb_size = static_cast<int>(ratio * GetTrackSize());
|
| - thumb_->SetSize(thumb_size);
|
| -
|
| - int thumb_position = CalculateThumbPosition(contents_scroll_offset);
|
| - thumb_->SetPosition(thumb_position);
|
| -}
|
| -
|
| -int BitmapScrollBar::GetLayoutSize() const {
|
| - gfx::Size prefsize = prev_button_->GetPreferredSize();
|
| - return IsHorizontal() ? prefsize.height() : prefsize.width();
|
| -}
|
| -
|
| -int BitmapScrollBar::GetPosition() const {
|
| - return thumb_->GetPosition();
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| // BitmapScrollBar, View implementation:
|
|
|
| void BitmapScrollBar::OnPaint(gfx::Canvas* canvas) {
|
| @@ -699,37 +303,14 @@ void BitmapScrollBar::OnPaint(gfx::Canvas* canvas) {
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -// BitmapScrollBar, private:
|
| +// BaseScrollBar, ButtonListener implementation:
|
|
|
| -void BitmapScrollBar::TrackClicked() {
|
| - if (last_scroll_amount_ != SCROLL_NONE)
|
| - ScrollByAmount(last_scroll_amount_);
|
| -}
|
| -
|
| -void BitmapScrollBar::ScrollContentsToOffset() {
|
| - GetController()->ScrollToPosition(this, contents_scroll_offset_);
|
| - thumb_->SetPosition(CalculateThumbPosition(contents_scroll_offset_));
|
| -}
|
| -
|
| -int BitmapScrollBar::GetTrackSize() const {
|
| - gfx::Rect track_bounds = GetTrackBounds();
|
| - return IsHorizontal() ? track_bounds.width() : track_bounds.height();
|
| -}
|
| -
|
| -int BitmapScrollBar::CalculateThumbPosition(int contents_scroll_offset) const {
|
| - return (contents_scroll_offset * GetTrackSize()) / contents_size_;
|
| -}
|
| -
|
| -int BitmapScrollBar::CalculateContentsOffset(int thumb_position,
|
| - bool scroll_to_middle) const {
|
| - if (scroll_to_middle)
|
| - thumb_position = thumb_position - (thumb_->GetSize() / 2);
|
| - return (thumb_position * contents_size_) / GetTrackSize();
|
| -}
|
| -
|
| -void BitmapScrollBar::SetThumbTrackState(CustomButton::ButtonState state) {
|
| - thumb_track_state_ = state;
|
| - SchedulePaint();
|
| +void BaseScrollBar::ButtonPressed(Button* sender, const views::Event& event) {
|
| + if (sender == prev_button_) {
|
| + ScrollByAmount(SCROLL_PREV_LINE);
|
| + } else if (sender == next_button_) {
|
| + ScrollByAmount(SCROLL_NEXT_LINE);
|
| + }
|
| }
|
|
|
| } // namespace views
|
|
|