Index: ui/views/controls/button/text_button.cc |
diff --git a/ui/views/controls/button/text_button.cc b/ui/views/controls/button/text_button.cc |
index 1a4c4e700cadce959305fb9e01ea9af2caf37e65..19a67bd517edcc5920421e92255becda1fb7c2cc 100644 |
--- a/ui/views/controls/button/text_button.cc |
+++ b/ui/views/controls/button/text_button.cc |
@@ -13,6 +13,7 @@ |
#include "ui/gfx/canvas.h" |
#include "ui/gfx/image/image.h" |
#include "ui/views/controls/button/button.h" |
+#include "ui/views/focus_border.h" |
#include "ui/views/widget/widget.h" |
#if defined(OS_WIN) |
@@ -267,6 +268,8 @@ TextButtonBase::TextButtonBase(ButtonListener* listener, const string16& text) |
inactive_text_shadow_color_(0), |
has_shadow_(false), |
shadow_offset_(gfx::Point(1, 1)), |
+ min_width_(0), |
+ min_height_(0), |
max_width_(0), |
show_multiple_icon_states_(true), |
is_default_(false), |
@@ -371,6 +374,9 @@ gfx::Size TextButtonBase::GetPreferredSize() { |
if (max_width_ > 0) |
prefsize.set_width(std::min(max_width_, prefsize.width())); |
+ prefsize.set_width(std::max(prefsize.height(), min_width_)); |
+ prefsize.set_height(std::max(prefsize.height(), min_height_)); |
+ |
return prefsize; |
} |
@@ -383,7 +389,9 @@ int TextButtonBase::GetHeightForWidth(int w) { |
gfx::Size text_size; |
CalculateTextSize(&text_size, w); |
- return text_size.height() + GetInsets().height(); |
+ int height = text_size.height() + GetInsets().height(); |
+ |
+ return std::max(height, min_height_); |
} |
void TextButtonBase::OnPaint(gfx::Canvas* canvas) { |
@@ -670,6 +678,10 @@ TextButton::TextButton(ButtonListener* listener, const string16& text) |
icon_text_spacing_(kDefaultIconTextSpacing), |
ignore_minimum_size_(true) { |
set_border(new TextButtonBorder); |
+ set_focus_border(FocusBorder::CreateDashedFocusBorder(kFocusRectInset, |
+ kFocusRectInset, |
+ kFocusRectInset, |
+ kFocusRectInset)); |
} |
TextButton::~TextButton() { |
@@ -718,6 +730,9 @@ gfx::Size TextButton::GetPreferredSize() { |
} |
#endif |
+ prefsize.set_width(std::max(prefsize.height(), min_width_)); |
+ prefsize.set_height(std::max(prefsize.height(), min_height_)); |
+ |
return prefsize; |
} |
@@ -755,14 +770,6 @@ std::string TextButton::GetClassName() const { |
return kViewClassName; |
} |
-void TextButton::OnPaintFocusBorder(gfx::Canvas* canvas) { |
- if (HasFocus() && (focusable() || IsAccessibilityFocusable())) { |
- gfx::Rect rect(GetLocalBounds()); |
- rect.Inset(kFocusRectInset, kFocusRectInset); |
- canvas->DrawFocusRect(rect); |
- } |
-} |
- |
ui::NativeTheme::Part TextButton::GetThemePart() const { |
return ui::NativeTheme::kPushButton; |
} |
@@ -829,6 +836,11 @@ void NativeTextButton::Init() { |
color_hover_ = color_ = color_enabled_; |
#endif |
set_border(new TextButtonNativeThemeBorder(this)); |
+#if !defined(OS_WIN) |
+ // Paint nothing, focus will be indicated with a border highlight drawn by |
+ // NativeThemeBase::PaintButton. |
+ set_focus_border(NULL); |
+#endif |
set_ignore_minimum_size(false); |
set_alignment(ALIGN_CENTER); |
set_focusable(true); |
@@ -842,19 +854,6 @@ std::string NativeTextButton::GetClassName() const { |
return kViewClassName; |
} |
-void NativeTextButton::OnPaintFocusBorder(gfx::Canvas* canvas) { |
-#if defined(OS_WIN) |
- if (HasFocus() && (focusable() || IsAccessibilityFocusable())) { |
- gfx::Rect rect(GetLocalBounds()); |
- rect.Inset(kFocusRectInset, kFocusRectInset); |
- canvas->DrawFocusRect(rect); |
- } |
-#else |
- // Paint nothing, focus will be indicated with a border highlight drawn by |
- // NativeThemeBase::PaintButton. |
-#endif |
-} |
- |
void NativeTextButton::GetExtraParams( |
ui::NativeTheme::ExtraParams* params) const { |
TextButton::GetExtraParams(params); |