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

Side by Side Diff: ui/views/controls/button/text_button.cc

Issue 273223002: views: Make view::Views::GetPreferredSize() const. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase to ToT Created 6 years, 7 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/views/controls/button/text_button.h" 5 #include "ui/views/controls/button/text_button.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "grit/ui_resources.h" 10 #include "grit/ui_resources.h"
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 269
270 void TextButtonBase::SetMultiLine(bool multi_line) { 270 void TextButtonBase::SetMultiLine(bool multi_line) {
271 if (multi_line != multi_line_) { 271 if (multi_line != multi_line_) {
272 multi_line_ = multi_line; 272 multi_line_ = multi_line;
273 max_text_size_.SetSize(0, 0); 273 max_text_size_.SetSize(0, 0);
274 UpdateTextSize(); 274 UpdateTextSize();
275 SchedulePaint(); 275 SchedulePaint();
276 } 276 }
277 } 277 }
278 278
279 gfx::Size TextButtonBase::GetPreferredSize() { 279 gfx::Size TextButtonBase::GetPreferredSize() const {
280 gfx::Insets insets = GetInsets(); 280 gfx::Insets insets = GetInsets();
281 281
282 // Use the max size to set the button boundaries. 282 // Use the max size to set the button boundaries.
283 // In multiline mode max size can be undefined while 283 // In multiline mode max size can be undefined while
284 // width() is 0, so max it out with current text size. 284 // width() is 0, so max it out with current text size.
285 gfx::Size prefsize(std::max(max_text_size_.width(), 285 gfx::Size prefsize(std::max(max_text_size_.width(),
286 text_size_.width()) + insets.width(), 286 text_size_.width()) + insets.width(),
287 std::max(max_text_size_.height(), 287 std::max(max_text_size_.height(),
288 text_size_.height()) + insets.height()); 288 text_size_.height()) + insets.height());
289 289
290 if (max_width_ > 0) 290 if (max_width_ > 0)
291 prefsize.set_width(std::min(max_width_, prefsize.width())); 291 prefsize.set_width(std::min(max_width_, prefsize.width()));
292 292
293 prefsize.set_width(std::max(prefsize.width(), min_width_)); 293 prefsize.set_width(std::max(prefsize.width(), min_width_));
294 prefsize.set_height(std::max(prefsize.height(), min_height_)); 294 prefsize.set_height(std::max(prefsize.height(), min_height_));
295 295
296 return prefsize; 296 return prefsize;
297 } 297 }
298 298
299 int TextButtonBase::GetHeightForWidth(int w) { 299 int TextButtonBase::GetHeightForWidth(int w) const {
300 if (!multi_line_) 300 if (!multi_line_)
301 return View::GetHeightForWidth(w); 301 return View::GetHeightForWidth(w);
302 302
303 if (max_width_ > 0) 303 if (max_width_ > 0)
304 w = std::min(max_width_, w); 304 w = std::min(max_width_, w);
305 305
306 gfx::Size text_size; 306 gfx::Size text_size;
307 CalculateTextSize(&text_size, w); 307 CalculateTextSize(&text_size, w);
308 int height = text_size.height() + GetInsets().height(); 308 int height = text_size.height() + GetInsets().height();
309 309
(...skipping 30 matching lines...) Expand all
340 // Do not store max_text_size in this case. UpdateTextSize will be called 340 // Do not store max_text_size in this case. UpdateTextSize will be called
341 // again once width() changes. 341 // again once width() changes.
342 if (!multi_line_ || text_width != 0) { 342 if (!multi_line_ || text_width != 0) {
343 max_text_size_.SetSize(std::max(max_text_size_.width(), text_size_.width()), 343 max_text_size_.SetSize(std::max(max_text_size_.width(), text_size_.width()),
344 std::max(max_text_size_.height(), 344 std::max(max_text_size_.height(),
345 text_size_.height())); 345 text_size_.height()));
346 PreferredSizeChanged(); 346 PreferredSizeChanged();
347 } 347 }
348 } 348 }
349 349
350 void TextButtonBase::CalculateTextSize(gfx::Size* text_size, int max_width) { 350 void TextButtonBase::CalculateTextSize(gfx::Size* text_size,
351 int max_width) const {
351 int h = font_list_.GetHeight(); 352 int h = font_list_.GetHeight();
352 int w = multi_line_ ? max_width : 0; 353 int w = multi_line_ ? max_width : 0;
353 int flags = ComputeCanvasStringFlags(); 354 int flags = ComputeCanvasStringFlags();
354 if (!multi_line_) 355 if (!multi_line_)
355 flags |= gfx::Canvas::NO_ELLIPSIS; 356 flags |= gfx::Canvas::NO_ELLIPSIS;
356 357
357 gfx::Canvas::SizeStringInt(text_, font_list_, &w, &h, 0, flags); 358 gfx::Canvas::SizeStringInt(text_, font_list_, &w, &h, 0, flags);
358 text_size->SetSize(w, h); 359 text_size->SetSize(w, h);
359 } 360 }
360 361
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 canvas->DrawStringRectWithHalo(text_, font_list_, 471 canvas->DrawStringRectWithHalo(text_, font_list_,
471 SK_ColorBLACK, SK_ColorWHITE, 472 SK_ColorBLACK, SK_ColorWHITE,
472 text_bounds, draw_string_flags); 473 text_bounds, draw_string_flags);
473 } else { 474 } else {
474 canvas->DrawStringRectWithFlags(text_, font_list_, text_color, 475 canvas->DrawStringRectWithFlags(text_, font_list_, text_color,
475 text_bounds, draw_string_flags); 476 text_bounds, draw_string_flags);
476 } 477 }
477 } 478 }
478 } 479 }
479 480
480 gfx::Size TextButtonBase::GetMinimumSize() { 481 gfx::Size TextButtonBase::GetMinimumSize() const {
481 return max_text_size_; 482 return max_text_size_;
482 } 483 }
483 484
484 void TextButtonBase::OnEnabledChanged() { 485 void TextButtonBase::OnEnabledChanged() {
485 // We should always call UpdateColor() since the state of the button might be 486 // We should always call UpdateColor() since the state of the button might be
486 // changed by other functions like CustomButton::SetState(). 487 // changed by other functions like CustomButton::SetState().
487 UpdateColor(); 488 UpdateColor();
488 CustomButton::OnEnabledChanged(); 489 CustomButton::OnEnabledChanged();
489 } 490 }
490 491
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 has_hover_icon_ = true; 587 has_hover_icon_ = true;
587 SchedulePaint(); 588 SchedulePaint();
588 } 589 }
589 590
590 void TextButton::SetPushedIcon(const gfx::ImageSkia& icon) { 591 void TextButton::SetPushedIcon(const gfx::ImageSkia& icon) {
591 icon_pushed_ = icon; 592 icon_pushed_ = icon;
592 has_pushed_icon_ = true; 593 has_pushed_icon_ = true;
593 SchedulePaint(); 594 SchedulePaint();
594 } 595 }
595 596
596 gfx::Size TextButton::GetPreferredSize() { 597 gfx::Size TextButton::GetPreferredSize() const {
597 gfx::Size prefsize(TextButtonBase::GetPreferredSize()); 598 gfx::Size prefsize(TextButtonBase::GetPreferredSize());
598 prefsize.Enlarge(icon_.width(), 0); 599 prefsize.Enlarge(icon_.width(), 0);
599 prefsize.set_height(std::max(prefsize.height(), icon_.height())); 600 prefsize.set_height(std::max(prefsize.height(), icon_.height()));
600 601
601 // Use the max size to set the button boundaries. 602 // Use the max size to set the button boundaries.
602 if (icon_.width() > 0 && !text_.empty()) 603 if (icon_.width() > 0 && !text_.empty())
603 prefsize.Enlarge(icon_text_spacing_, 0); 604 prefsize.Enlarge(icon_text_spacing_, 0);
604 605
605 if (max_width_ > 0) 606 if (max_width_ > 0)
606 prefsize.set_width(std::min(max_width_, prefsize.width())); 607 prefsize.set_width(std::min(max_width_, prefsize.width()));
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 if (show_multiple_icon_states_) { 713 if (show_multiple_icon_states_) {
713 if (has_hover_icon_ && (state() == STATE_HOVERED)) 714 if (has_hover_icon_ && (state() == STATE_HOVERED))
714 return icon_hover_; 715 return icon_hover_;
715 if (has_pushed_icon_ && (state() == STATE_PRESSED)) 716 if (has_pushed_icon_ && (state() == STATE_PRESSED))
716 return icon_pushed_; 717 return icon_pushed_;
717 } 718 }
718 return icon_; 719 return icon_;
719 } 720 }
720 721
721 } // namespace views 722 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698