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

Side by Side Diff: chrome/views/bitmap_scroll_bar.cc

Issue 7344: Convert GetPreferredSize from:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years, 2 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "chrome/views/bitmap_scroll_bar.h" 5 #include "chrome/views/bitmap_scroll_bar.h"
6 6
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "chrome/common/gfx/chrome_canvas.h" 8 #include "chrome/common/gfx/chrome_canvas.h"
9 #include "chrome/common/l10n_util.h" 9 #include "chrome/common/l10n_util.h"
10 #include "chrome/views/menu.h" 10 #include "chrome/views/menu.h"
11 #include "chrome/views/scroll_view.h" 11 #include "chrome/views/scroll_view.h"
12 #include "chrome/views/view_container.h" 12 #include "chrome/views/view_container.h"
13 #include "skia/include/SkBitmap.h" 13 #include "skia/include/SkBitmap.h"
14 14
15 #include "generated_resources.h" 15 #include "generated_resources.h"
16 16
17 #undef min
18 #undef max
19
17 namespace ChromeViews { 20 namespace ChromeViews {
18 21
19 namespace { 22 namespace {
20 23
21 // The distance the mouse can be dragged outside the bounds of the thumb during 24 // The distance the mouse can be dragged outside the bounds of the thumb during
22 // dragging before the scrollbar will snap back to its regular position. 25 // dragging before the scrollbar will snap back to its regular position.
23 static const int kScrollThumbDragOutSnap = 100; 26 static const int kScrollThumbDragOutSnap = 100;
24 27
25 /////////////////////////////////////////////////////////////////////////////// 28 ///////////////////////////////////////////////////////////////////////////////
26 // 29 //
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 drag_start_position_(-1), 81 drag_start_position_(-1),
79 mouse_offset_(-1), 82 mouse_offset_(-1),
80 state_(BaseButton::BS_NORMAL) { 83 state_(BaseButton::BS_NORMAL) {
81 } 84 }
82 virtual ~BitmapScrollBarThumb() { } 85 virtual ~BitmapScrollBarThumb() { }
83 86
84 // Sets the size (width or height) of the thumb to the specified value. 87 // Sets the size (width or height) of the thumb to the specified value.
85 void SetSize(int size) { 88 void SetSize(int size) {
86 // Make sure the thumb is never sized smaller than its minimum possible 89 // Make sure the thumb is never sized smaller than its minimum possible
87 // display size. 90 // display size.
88 CSize prefsize; 91 gfx::Size prefsize = GetPreferredSize();
89 GetPreferredSize(&prefsize);
90 size = std::max(size, 92 size = std::max(size,
91 static_cast<int>(scroll_bar_->IsHorizontal() ? 93 static_cast<int>(scroll_bar_->IsHorizontal() ?
92 prefsize.cx : prefsize.cy)); 94 prefsize.width() : prefsize.height()));
93 gfx::Rect thumb_bounds = bounds(); 95 gfx::Rect thumb_bounds = bounds();
94 if (scroll_bar_->IsHorizontal()) { 96 if (scroll_bar_->IsHorizontal()) {
95 thumb_bounds.set_width(size); 97 thumb_bounds.set_width(size);
96 } else { 98 } else {
97 thumb_bounds.set_height(size); 99 thumb_bounds.set_height(size);
98 } 100 }
99 SetBounds(thumb_bounds.ToRECT()); 101 SetBounds(thumb_bounds.ToRECT());
100 } 102 }
101 103
102 // Retrieves the size (width or height) of the thumb. 104 // Retrieves the size (width or height) of the thumb.
(...skipping 17 matching lines...) Expand all
120 122
121 // Gets the position of the thumb on the x or y axis. 123 // Gets the position of the thumb on the x or y axis.
122 int GetPosition() const { 124 int GetPosition() const {
123 gfx::Rect track_bounds = scroll_bar_->GetTrackBounds(); 125 gfx::Rect track_bounds = scroll_bar_->GetTrackBounds();
124 if (scroll_bar_->IsHorizontal()) 126 if (scroll_bar_->IsHorizontal())
125 return x() - track_bounds.x(); 127 return x() - track_bounds.x();
126 return y() - track_bounds.y(); 128 return y() - track_bounds.y();
127 } 129 }
128 130
129 // View overrides: 131 // View overrides:
130 virtual void GetPreferredSize(CSize* preferred_size) { 132 virtual gfx::Size GetPreferredSize() {
131 DCHECK(preferred_size); 133 return gfx::Size(background_bitmap()->width(),
132 preferred_size->cx = background_bitmap()->width(); 134 start_cap_bitmap()->height() +
133 preferred_size->cy = start_cap_bitmap()->height() + 135 end_cap_bitmap()->height() +
134 end_cap_bitmap()->height() + grippy_bitmap()->height(); 136 grippy_bitmap()->height());
135 } 137 }
136 138
137 protected: 139 protected:
138 // View overrides: 140 // View overrides:
139 virtual void Paint(ChromeCanvas* canvas) { 141 virtual void Paint(ChromeCanvas* canvas) {
140 canvas->DrawBitmapInt(*start_cap_bitmap(), 0, 0); 142 canvas->DrawBitmapInt(*start_cap_bitmap(), 0, 0);
141 int top_cap_height = start_cap_bitmap()->height(); 143 int top_cap_height = start_cap_bitmap()->height();
142 int bottom_cap_height = end_cap_bitmap()->height(); 144 int bottom_cap_height = end_cap_bitmap()->height();
143 int thumb_body_height = height() - top_cap_height - bottom_cap_height; 145 int thumb_body_height = height() - top_cap_height - bottom_cap_height;
144 canvas->TileImageInt(*background_bitmap(), 0, top_cap_height, 146 canvas->TileImageInt(*background_bitmap(), 0, top_cap_height,
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 AddChildView(next_button_); 275 AddChildView(next_button_);
274 AddChildView(thumb_); 276 AddChildView(thumb_);
275 277
276 SetContextMenuController(this); 278 SetContextMenuController(this);
277 prev_button_->SetContextMenuController(this); 279 prev_button_->SetContextMenuController(this);
278 next_button_->SetContextMenuController(this); 280 next_button_->SetContextMenuController(this);
279 thumb_->SetContextMenuController(this); 281 thumb_->SetContextMenuController(this);
280 } 282 }
281 283
282 gfx::Rect BitmapScrollBar::GetTrackBounds() const { 284 gfx::Rect BitmapScrollBar::GetTrackBounds() const {
283 CSize prefsize; 285 gfx::Size prefsize = prev_button_->GetPreferredSize();
284 prev_button_->GetPreferredSize(&prefsize);
285 if (IsHorizontal()) { 286 if (IsHorizontal()) {
286 if (!show_scroll_buttons_) 287 if (!show_scroll_buttons_)
287 prefsize.cx = 0; 288 prefsize.set_width(0);
288 int new_width = std::max(0, 289 int new_width =
289 static_cast<int>(width() - (prefsize.cx * 2))); 290 std::max(0, static_cast<int>(width() - (prefsize.width() * 2)));
290 gfx::Rect track_bounds(prefsize.cx, 0, new_width, prefsize.cy); 291 gfx::Rect track_bounds(prefsize.width(), 0, new_width, prefsize.height());
291 return track_bounds; 292 return track_bounds;
292 } 293 }
293 if (!show_scroll_buttons_) 294 if (!show_scroll_buttons_)
294 prefsize.cy = 0; 295 prefsize.set_height(0);
295 gfx::Rect track_bounds(0, prefsize.cy, prefsize.cx, 296 gfx::Rect track_bounds(0, prefsize.height(), prefsize.width(),
296 std::max(0l, height() - (prefsize.cy * 2))); 297 std::max(0, height() - (prefsize.height() * 2)));
297 return track_bounds; 298 return track_bounds;
298 } 299 }
299 300
300 void BitmapScrollBar::SetImage(ScrollBarPart part, 301 void BitmapScrollBar::SetImage(ScrollBarPart part,
301 BaseButton::ButtonState state, 302 BaseButton::ButtonState state,
302 SkBitmap* bitmap) { 303 SkBitmap* bitmap) {
303 DCHECK(part < PART_COUNT); 304 DCHECK(part < PART_COUNT);
304 DCHECK(state < BaseButton::kButtonStateCount); 305 DCHECK(state < BaseButton::kButtonStateCount);
305 switch (part) { 306 switch (part) {
306 case PREV_BUTTON: 307 case PREV_BUTTON:
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 } 375 }
375 376
376 void BitmapScrollBar::TrackClicked() { 377 void BitmapScrollBar::TrackClicked() {
377 if (last_scroll_amount_ != SCROLL_NONE) 378 if (last_scroll_amount_ != SCROLL_NONE)
378 ScrollByAmount(last_scroll_amount_); 379 ScrollByAmount(last_scroll_amount_);
379 } 380 }
380 381
381 /////////////////////////////////////////////////////////////////////////////// 382 ///////////////////////////////////////////////////////////////////////////////
382 // BitmapScrollBar, View implementation: 383 // BitmapScrollBar, View implementation:
383 384
384 void BitmapScrollBar::GetPreferredSize(CSize* preferred_size) { 385 gfx::Size BitmapScrollBar::GetPreferredSize() {
385 DCHECK(preferred_size);
386
387 // In this case, we're returning the desired width of the scrollbar and its 386 // In this case, we're returning the desired width of the scrollbar and its
388 // minimum allowable height. 387 // minimum allowable height.
389 CSize button_prefsize; 388 gfx::Size button_prefsize = prev_button_->GetPreferredSize();
390 prev_button_->GetPreferredSize(&button_prefsize); 389 return gfx::Size(button_prefsize.width(), button_prefsize.height() * 2);
391 preferred_size->cx = button_prefsize.cx;
392 preferred_size->cy = button_prefsize.cy * 2;
393 } 390 }
394 391
395 void BitmapScrollBar::Paint(ChromeCanvas* canvas) { 392 void BitmapScrollBar::Paint(ChromeCanvas* canvas) {
396 // Paint the track. 393 // Paint the track.
397 gfx::Rect track_bounds = GetTrackBounds(); 394 gfx::Rect track_bounds = GetTrackBounds();
398 canvas->TileImageInt(*images_[THUMB_TRACK][thumb_track_state_], 395 canvas->TileImageInt(*images_[THUMB_TRACK][thumb_track_state_],
399 track_bounds.x(), track_bounds.y(), 396 track_bounds.x(), track_bounds.y(),
400 track_bounds.width(), track_bounds.height()); 397 track_bounds.width(), track_bounds.height());
401 } 398 }
402 399
403 void BitmapScrollBar::Layout() { 400 void BitmapScrollBar::Layout() {
404 // Size and place the two scroll buttons. 401 // Size and place the two scroll buttons.
405 if (show_scroll_buttons_) { 402 if (show_scroll_buttons_) {
406 CSize prefsize; 403 gfx::Size prefsize = prev_button_->GetPreferredSize();
407 prev_button_->GetPreferredSize(&prefsize); 404 prev_button_->SetBounds(gfx::Point(), prefsize);
408 prev_button_->SetBounds(0, 0, prefsize.cx, prefsize.cy); 405 prefsize = next_button_->GetPreferredSize();
409 next_button_->GetPreferredSize(&prefsize);
410 if (IsHorizontal()) { 406 if (IsHorizontal()) {
411 next_button_->SetBounds(width() - prefsize.cx, 0, prefsize.cx, 407 next_button_->SetBounds(width() - prefsize.width(), 0, prefsize.width(),
412 prefsize.cy); 408 prefsize.height());
413 } else { 409 } else {
414 next_button_->SetBounds(0, height() - prefsize.cy, prefsize.cx, 410 next_button_->SetBounds(0, height() - prefsize.height(), prefsize.width(),
415 prefsize.cy); 411 prefsize.height());
416 } 412 }
417 } else { 413 } else {
418 prev_button_->SetBounds(0, 0, 0, 0); 414 prev_button_->SetBounds(0, 0, 0, 0);
419 next_button_->SetBounds(0, 0, 0, 0); 415 next_button_->SetBounds(0, 0, 0, 0);
420 } 416 }
421 417
422 // Size and place the thumb 418 // Size and place the thumb
423 CSize thumb_prefsize; 419 gfx::Size thumb_prefsize = thumb_->GetPreferredSize();
424 thumb_->GetPreferredSize(&thumb_prefsize);
425 gfx::Rect track_bounds = GetTrackBounds(); 420 gfx::Rect track_bounds = GetTrackBounds();
426 421
427 // Preserve the height/width of the thumb (depending on orientation) as set 422 // Preserve the height/width of the thumb (depending on orientation) as set
428 // by the last call to |Update|, but coerce the width/height to be the 423 // by the last call to |Update|, but coerce the width/height to be the
429 // appropriate value for the bitmaps provided. 424 // appropriate value for the bitmaps provided.
430 if (IsHorizontal()) { 425 if (IsHorizontal()) {
431 thumb_->SetBounds(thumb_->x(), thumb_->y(), thumb_->width(), 426 thumb_->SetBounds(thumb_->x(), thumb_->y(), thumb_->width(),
432 thumb_prefsize.cy); 427 thumb_prefsize.height());
433 } else { 428 } else {
434 thumb_->SetBounds(thumb_->x(), thumb_->y(), thumb_prefsize.cx, 429 thumb_->SetBounds(thumb_->x(), thumb_->y(), thumb_prefsize.width(),
435 thumb_->height()); 430 thumb_->height());
436 } 431 }
437 432
438 // Hide the thumb if the track isn't tall enough to display even a tiny 433 // Hide the thumb if the track isn't tall enough to display even a tiny
439 // thumb. The user can only use the mousewheel, scroll buttons or keyboard 434 // thumb. The user can only use the mousewheel, scroll buttons or keyboard
440 // in this scenario. 435 // in this scenario.
441 if ((IsHorizontal() && (track_bounds.width() < thumb_prefsize.cx)) || 436 if ((IsHorizontal() && (track_bounds.width() < thumb_prefsize.width()) ||
442 (!IsHorizontal() && (track_bounds.height() < thumb_prefsize.cy))) { 437 (!IsHorizontal() && (track_bounds.height() < thumb_prefsize.height())))) {
443 thumb_->SetVisible(false); 438 thumb_->SetVisible(false);
444 } else if (!thumb_->IsVisible()) { 439 } else if (!thumb_->IsVisible()) {
445 thumb_->SetVisible(true); 440 thumb_->SetVisible(true);
446 } 441 }
447 } 442 }
448 443
449 void BitmapScrollBar::DidChangeBounds(const CRect& previous, 444 void BitmapScrollBar::DidChangeBounds(const CRect& previous,
450 const CRect& current) { 445 const CRect& current) {
451 Layout(); 446 Layout();
452 } 447 }
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 // content size multiplied by the height of the thumb track. 660 // content size multiplied by the height of the thumb track.
666 double ratio = static_cast<double>(viewport_size) / contents_size_; 661 double ratio = static_cast<double>(viewport_size) / contents_size_;
667 int thumb_size = static_cast<int>(ratio * GetTrackSize()); 662 int thumb_size = static_cast<int>(ratio * GetTrackSize());
668 thumb_->SetSize(thumb_size); 663 thumb_->SetSize(thumb_size);
669 664
670 int thumb_position = CalculateThumbPosition(contents_scroll_offset); 665 int thumb_position = CalculateThumbPosition(contents_scroll_offset);
671 thumb_->SetPosition(thumb_position); 666 thumb_->SetPosition(thumb_position);
672 } 667 }
673 668
674 int BitmapScrollBar::GetLayoutSize() const { 669 int BitmapScrollBar::GetLayoutSize() const {
675 CSize prefsize; 670 gfx::Size prefsize = prev_button_->GetPreferredSize();
676 prev_button_->GetPreferredSize(&prefsize); 671 return IsHorizontal() ? prefsize.height() : prefsize.width();
677 return IsHorizontal() ? prefsize.cy : prefsize.cx;
678 } 672 }
679 673
680 int BitmapScrollBar::GetPosition() const { 674 int BitmapScrollBar::GetPosition() const {
681 return thumb_->GetPosition(); 675 return thumb_->GetPosition();
682 } 676 }
683 677
684 /////////////////////////////////////////////////////////////////////////////// 678 ///////////////////////////////////////////////////////////////////////////////
685 // BitmapScrollBar, private: 679 // BitmapScrollBar, private:
686 680
687 void BitmapScrollBar::ScrollContentsToOffset() { 681 void BitmapScrollBar::ScrollContentsToOffset() {
(...skipping 17 matching lines...) Expand all
705 return (thumb_position * contents_size_) / GetTrackSize(); 699 return (thumb_position * contents_size_) / GetTrackSize();
706 } 700 }
707 701
708 void BitmapScrollBar::SetThumbTrackState(BaseButton::ButtonState state) { 702 void BitmapScrollBar::SetThumbTrackState(BaseButton::ButtonState state) {
709 thumb_track_state_ = state; 703 thumb_track_state_ = state;
710 SchedulePaint(); 704 SchedulePaint();
711 } 705 }
712 706
713 } 707 }
714 708
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698