summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ui/views/controls/button/label_button.cc3
-rw-r--r--ui/views/controls/button/label_button_border.cc11
-rw-r--r--ui/views/controls/button/label_button_border.h3
3 files changed, 17 insertions, 0 deletions
diff --git a/ui/views/controls/button/label_button.cc b/ui/views/controls/button/label_button.cc
index 39140ed..4de6843 100644
--- a/ui/views/controls/button/label_button.cc
+++ b/ui/views/controls/button/label_button.cc
@@ -188,6 +188,9 @@ gfx::Size LabelButton::GetPreferredSize() {
const gfx::Insets insets(GetInsets());
size.Enlarge(image_size.width() + insets.width(), insets.height());
+ // Make the size at least as large as the minimum size needed by the border.
+ size.SetToMax(static_cast<LabelButtonBorder*>(border())->GetMinimumSize());
+
// Increase the minimum size monotonically with the preferred size.
size.SetToMax(min_size_);
min_size_ = size;
diff --git a/ui/views/controls/button/label_button_border.cc b/ui/views/controls/button/label_button_border.cc
index fb6ea06..a851199 100644
--- a/ui/views/controls/button/label_button_border.cc
+++ b/ui/views/controls/button/label_button_border.cc
@@ -169,4 +169,15 @@ void LabelButtonBorder::SetPainter(bool focused,
painters_[focused ? 1 : 0][state].reset(painter);
}
+gfx::Size LabelButtonBorder::GetMinimumSize() const {
+ gfx::Size minimum_size;
+ for (int i = 0; i < 2; ++i) {
+ for (int j = 0; j < Button::STATE_COUNT; ++j) {
+ if (painters_[i][j])
+ minimum_size.SetToMax(painters_[i][j]->GetMinimumSize());
+ }
+ }
+ return minimum_size;
+}
+
} // namespace views
diff --git a/ui/views/controls/button/label_button_border.h b/ui/views/controls/button/label_button_border.h
index 048d074..dc81d97 100644
--- a/ui/views/controls/button/label_button_border.h
+++ b/ui/views/controls/button/label_button_border.h
@@ -34,6 +34,9 @@ class VIEWS_EXPORT LabelButtonBorder : public Border {
Painter* GetPainter(bool focused, Button::ButtonState state);
void SetPainter(bool focused, Button::ButtonState state, Painter* painter);
+ // Calls GetMinimumSize() on all painters and returns the largest such size.
+ gfx::Size GetMinimumSize() const;
+
private:
// The painters used for each unfocused or focused button state.
scoped_ptr<Painter> painters_[2][Button::STATE_COUNT];