diff options
-rw-r--r-- | ui/views/controls/button/label_button.cc | 3 | ||||
-rw-r--r-- | ui/views/controls/button/label_button_border.cc | 11 | ||||
-rw-r--r-- | ui/views/controls/button/label_button_border.h | 3 |
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]; |