Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(528)

Side by Side Diff: views/controls/scrollbar/bitmap_scroll_bar.cc

Issue 6685069: Disambiguate OnMouseCaptureLost from OnMouseReleased, etc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Refinements, etc. Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "views/controls/scrollbar/bitmap_scroll_bar.h" 5 #include "views/controls/scrollbar/bitmap_scroll_bar.h"
6 6
7 #if defined(OS_LINUX) 7 #if defined(OS_LINUX)
8 #include "views/screen.h" 8 #include "views/screen.h"
9 #endif 9 #endif
10 10
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 class AutorepeatButton : public ImageButton { 46 class AutorepeatButton : public ImageButton {
47 public: 47 public:
48 AutorepeatButton(ButtonListener* listener) 48 AutorepeatButton(ButtonListener* listener)
49 : ImageButton(listener), 49 : ImageButton(listener),
50 ALLOW_THIS_IN_INITIALIZER_LIST(repeater_( 50 ALLOW_THIS_IN_INITIALIZER_LIST(repeater_(
51 NewCallback<AutorepeatButton>(this, 51 NewCallback<AutorepeatButton>(this,
52 &AutorepeatButton::NotifyClick))) { 52 &AutorepeatButton::NotifyClick))) {
53 } 53 }
54 virtual ~AutorepeatButton() {} 54 virtual ~AutorepeatButton() {}
55 55
56 protected: 56 virtual bool OnMousePressed(const MouseEvent& event) OVERRIDE {
57 virtual bool OnMousePressed(const MouseEvent& event) {
58 Button::NotifyClick(event); 57 Button::NotifyClick(event);
59 repeater_.Start(); 58 repeater_.Start();
60 return true; 59 return true;
61 } 60 }
62 61
63 virtual void OnMouseReleased(const MouseEvent& event, bool canceled) { 62 virtual void OnMouseReleased(const MouseEvent& event) OVERRIDE {
64 repeater_.Stop(); 63 repeater_.Stop();
65 View::OnMouseReleased(event, canceled); 64 View::OnMouseReleased(event);
65 }
66
67 virtual void OnMouseCaptureLost() OVERRIDE {
68 repeater_.Stop();
69 View::OnMouseCaptureLost();
66 } 70 }
67 71
68 private: 72 private:
69 void NotifyClick() { 73 void NotifyClick() {
70 #if defined(OS_WIN) 74 #if defined(OS_WIN)
71 DWORD pos = GetMessagePos(); 75 DWORD pos = GetMessagePos();
72 POINTS points = MAKEPOINTS(pos); 76 POINTS points = MAKEPOINTS(pos);
73 gfx::Point cursor_point(points.x, points.y); 77 gfx::Point cursor_point(points.x, points.y);
74 #elif defined(OS_LINUX) 78 #elif defined(OS_LINUX)
75 gfx::Point cursor_point = Screen::GetCursorScreenPoint(); 79 gfx::Point cursor_point = Screen::GetCursorScreenPoint();
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 146
143 // Gets the position of the thumb on the x or y axis. 147 // Gets the position of the thumb on the x or y axis.
144 int GetPosition() const { 148 int GetPosition() const {
145 gfx::Rect track_bounds = scroll_bar_->GetTrackBounds(); 149 gfx::Rect track_bounds = scroll_bar_->GetTrackBounds();
146 if (scroll_bar_->IsHorizontal()) 150 if (scroll_bar_->IsHorizontal())
147 return x() - track_bounds.x(); 151 return x() - track_bounds.x();
148 return y() - track_bounds.y(); 152 return y() - track_bounds.y();
149 } 153 }
150 154
151 // View overrides: 155 // View overrides:
152 virtual gfx::Size GetPreferredSize() { 156 virtual gfx::Size GetPreferredSize() OVERRIDE {
153 return gfx::Size(background_bitmap()->width(), 157 return gfx::Size(background_bitmap()->width(),
154 start_cap_bitmap()->height() + 158 start_cap_bitmap()->height() +
155 end_cap_bitmap()->height() + 159 end_cap_bitmap()->height() +
156 grippy_bitmap()->height()); 160 grippy_bitmap()->height());
157 } 161 }
158 162
159 protected: 163 virtual void OnMouseEntered(const MouseEvent& event) OVERRIDE {
160 // View overrides:
161 virtual void Paint(gfx::Canvas* canvas) {
162 canvas->DrawBitmapInt(*start_cap_bitmap(), 0, 0);
163 int top_cap_height = start_cap_bitmap()->height();
164 int bottom_cap_height = end_cap_bitmap()->height();
165 int thumb_body_height = height() - top_cap_height - bottom_cap_height;
166 canvas->TileImageInt(*background_bitmap(), 0, top_cap_height,
167 background_bitmap()->width(), thumb_body_height);
168 canvas->DrawBitmapInt(*end_cap_bitmap(), 0,
169 height() - bottom_cap_height);
170
171 // Paint the grippy over the track.
172 int grippy_x = (width() - grippy_bitmap()->width()) / 2;
173 int grippy_y = (thumb_body_height - grippy_bitmap()->height()) / 2;
174 canvas->DrawBitmapInt(*grippy_bitmap(), grippy_x, grippy_y);
175 }
176
177 virtual void OnMouseEntered(const MouseEvent& event) {
178 SetState(CustomButton::BS_HOT); 164 SetState(CustomButton::BS_HOT);
179 } 165 }
180 166
181 virtual void OnMouseExited(const MouseEvent& event) { 167 virtual void OnMouseExited(const MouseEvent& event) OVERRIDE {
182 SetState(CustomButton::BS_NORMAL); 168 SetState(CustomButton::BS_NORMAL);
183 } 169 }
184 170
185 virtual bool OnMousePressed(const MouseEvent& event) { 171 virtual bool OnMousePressed(const MouseEvent& event) OVERRIDE {
186 mouse_offset_ = scroll_bar_->IsHorizontal() ? event.x() : event.y(); 172 mouse_offset_ = scroll_bar_->IsHorizontal() ? event.x() : event.y();
187 drag_start_position_ = GetPosition(); 173 drag_start_position_ = GetPosition();
188 SetState(CustomButton::BS_PUSHED); 174 SetState(CustomButton::BS_PUSHED);
189 return true; 175 return true;
190 } 176 }
191 177
192 virtual bool OnMouseDragged(const MouseEvent& event) { 178 virtual bool OnMouseDragged(const MouseEvent& event) OVERRIDE {
193 // If the user moves the mouse more than |kScrollThumbDragOutSnap| outside 179 // If the user moves the mouse more than |kScrollThumbDragOutSnap| outside
194 // the bounds of the thumb, the scrollbar will snap the scroll back to the 180 // the bounds of the thumb, the scrollbar will snap the scroll back to the
195 // point it was at before the drag began. 181 // point it was at before the drag began.
196 if (scroll_bar_->IsHorizontal()) { 182 if (scroll_bar_->IsHorizontal()) {
197 if ((event.y() < y() - kScrollThumbDragOutSnap) || 183 if ((event.y() < y() - kScrollThumbDragOutSnap) ||
198 (event.y() > (y() + height() + kScrollThumbDragOutSnap))) { 184 (event.y() > (y() + height() + kScrollThumbDragOutSnap))) {
199 scroll_bar_->ScrollToThumbPosition(drag_start_position_, false); 185 scroll_bar_->ScrollToThumbPosition(drag_start_position_, false);
200 return true; 186 return true;
201 } 187 }
202 } else { 188 } else {
203 if ((event.x() < x() - kScrollThumbDragOutSnap) || 189 if ((event.x() < x() - kScrollThumbDragOutSnap) ||
204 (event.x() > (x() + width() + kScrollThumbDragOutSnap))) { 190 (event.x() > (x() + width() + kScrollThumbDragOutSnap))) {
205 scroll_bar_->ScrollToThumbPosition(drag_start_position_, false); 191 scroll_bar_->ScrollToThumbPosition(drag_start_position_, false);
206 return true; 192 return true;
207 } 193 }
208 } 194 }
209 if (scroll_bar_->IsHorizontal()) { 195 if (scroll_bar_->IsHorizontal()) {
210 int thumb_x = event.x() - mouse_offset_; 196 int thumb_x = event.x() - mouse_offset_;
211 scroll_bar_->ScrollToThumbPosition(x() + thumb_x, false); 197 scroll_bar_->ScrollToThumbPosition(x() + thumb_x, false);
212 } else { 198 } else {
213 int thumb_y = event.y() - mouse_offset_; 199 int thumb_y = event.y() - mouse_offset_;
214 scroll_bar_->ScrollToThumbPosition(y() + thumb_y, false); 200 scroll_bar_->ScrollToThumbPosition(y() + thumb_y, false);
215 } 201 }
216 return true; 202 return true;
217 } 203 }
218 204
219 virtual void OnMouseReleased(const MouseEvent& event, 205 virtual void OnMouseReleased(const MouseEvent& event) OVERRIDE {
220 bool canceled) {
221 SetState(CustomButton::BS_HOT); 206 SetState(CustomButton::BS_HOT);
222 View::OnMouseReleased(event, canceled); 207 View::OnMouseReleased(event);
208 }
209
210 virtual void OnMouseCaptureLost() OVERRIDE {
211 SetState(CustomButton::BS_HOT);
212 View::OnMouseCaptureLost();
213 }
214
215 protected:
216 // View overrides:
217 virtual void Paint(gfx::Canvas* canvas) OVERRIDE {
218 canvas->DrawBitmapInt(*start_cap_bitmap(), 0, 0);
219 int top_cap_height = start_cap_bitmap()->height();
220 int bottom_cap_height = end_cap_bitmap()->height();
221 int thumb_body_height = height() - top_cap_height - bottom_cap_height;
222 canvas->TileImageInt(*background_bitmap(), 0, top_cap_height,
223 background_bitmap()->width(), thumb_body_height);
224 canvas->DrawBitmapInt(*end_cap_bitmap(), 0,
225 height() - bottom_cap_height);
226
227 // Paint the grippy over the track.
228 int grippy_x = (width() - grippy_bitmap()->width()) / 2;
229 int grippy_y = (thumb_body_height - grippy_bitmap()->height()) / 2;
230 canvas->DrawBitmapInt(*grippy_bitmap(), grippy_x, grippy_y);
223 } 231 }
224 232
225 private: 233 private:
226 // Returns the bitmap rendered at the start of the thumb. 234 // Returns the bitmap rendered at the start of the thumb.
227 SkBitmap* start_cap_bitmap() const { 235 SkBitmap* start_cap_bitmap() const {
228 return scroll_bar_->images_[BitmapScrollBar::THUMB_START_CAP][state_]; 236 return scroll_bar_->images_[BitmapScrollBar::THUMB_START_CAP][state_];
229 } 237 }
230 238
231 // Returns the bitmap rendered at the end of the thumb. 239 // Returns the bitmap rendered at the end of the thumb.
232 SkBitmap* end_cap_bitmap() const { 240 SkBitmap* end_cap_bitmap() const {
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 } else if (event.y() > thumb_bounds.bottom()) { 472 } else if (event.y() > thumb_bounds.bottom()) {
465 last_scroll_amount_ = SCROLL_NEXT_PAGE; 473 last_scroll_amount_ = SCROLL_NEXT_PAGE;
466 } 474 }
467 } 475 }
468 TrackClicked(); 476 TrackClicked();
469 repeater_.Start(); 477 repeater_.Start();
470 } 478 }
471 return true; 479 return true;
472 } 480 }
473 481
474 void BitmapScrollBar::OnMouseReleased(const MouseEvent& event, bool canceled) { 482 void BitmapScrollBar::OnMouseReleased(const MouseEvent& event) {
475 SetThumbTrackState(CustomButton::BS_NORMAL); 483 SetThumbTrackState(CustomButton::BS_NORMAL);
476 repeater_.Stop(); 484 repeater_.Stop();
477 View::OnMouseReleased(event, canceled); 485 View::OnMouseReleased(event);
486 }
487
488 void BitmapScrollBar::OnMouseCaptureLost() {
489 SetThumbTrackState(CustomButton::BS_NORMAL);
490 repeater_.Stop();
491 View::OnMouseCaptureLost();
478 } 492 }
479 493
480 bool BitmapScrollBar::OnKeyPressed(const KeyEvent& event) { 494 bool BitmapScrollBar::OnKeyPressed(const KeyEvent& event) {
481 ScrollAmount amount = SCROLL_NONE; 495 ScrollAmount amount = SCROLL_NONE;
482 switch (event.key_code()) { 496 switch (event.key_code()) {
483 case ui::VKEY_UP: 497 case ui::VKEY_UP:
484 if (!IsHorizontal()) 498 if (!IsHorizontal())
485 amount = SCROLL_PREV_LINE; 499 amount = SCROLL_PREV_LINE;
486 break; 500 break;
487 case ui::VKEY_DOWN: 501 case ui::VKEY_DOWN:
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 thumb_position = thumb_position - (thumb_->GetSize() / 2); 733 thumb_position = thumb_position - (thumb_->GetSize() / 2);
720 return (thumb_position * contents_size_) / GetTrackSize(); 734 return (thumb_position * contents_size_) / GetTrackSize();
721 } 735 }
722 736
723 void BitmapScrollBar::SetThumbTrackState(CustomButton::ButtonState state) { 737 void BitmapScrollBar::SetThumbTrackState(CustomButton::ButtonState state) {
724 thumb_track_state_ = state; 738 thumb_track_state_ = state;
725 SchedulePaint(); 739 SchedulePaint();
726 } 740 }
727 741
728 } // namespace views 742 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698