Index: ui/views/controls/button/label_button.cc |
diff --git a/ui/views/controls/button/label_button.cc b/ui/views/controls/button/label_button.cc |
index fa358c1c9d3d78e5370eb7be9573ac91cc8c9dfb..5ee97918dc9f794c1d1189ffa3e570449e6c16f7 100644 |
--- a/ui/views/controls/button/label_button.cc |
+++ b/ui/views/controls/button/label_button.cc |
@@ -101,15 +101,15 @@ void LabelButton::SetTextColor(ButtonState for_state, SkColor color) { |
} |
void LabelButton::SetTextShadows(const gfx::ShadowValues& shadows) { |
- label_->set_shadows(shadows); |
+ label_->SetShadows(shadows); |
} |
void LabelButton::SetTextSubpixelRenderingEnabled(bool enabled) { |
- label_->set_subpixel_rendering_enabled(enabled); |
+ label_->SetSubpixelRenderingEnabled(enabled); |
} |
bool LabelButton::GetTextMultiLine() const { |
- return label_->is_multi_line(); |
+ return label_->multi_line(); |
} |
void LabelButton::SetTextMultiLine(bool text_multi_line) { |
@@ -144,10 +144,6 @@ void LabelButton::SetHorizontalAlignment(gfx::HorizontalAlignment alignment) { |
InvalidateLayout(); |
} |
-void LabelButton::SetDirectionalityMode(gfx::DirectionalityMode mode) { |
- label_->set_directionality_mode(mode); |
-} |
- |
void LabelButton::SetIsDefault(bool is_default) { |
if (is_default == is_default_) |
return; |
@@ -188,7 +184,7 @@ void LabelButton::SetFocusPainter(scoped_ptr<Painter> focus_painter) { |
gfx::Size LabelButton::GetPreferredSize() const { |
// Use a temporary label copy for sizing to avoid calculation side-effects. |
Label label(GetText(), cached_normal_font_list_); |
- label.set_shadows(label_->shadows()); |
+ label.SetShadows(label_->shadows()); |
label.SetMultiLine(GetTextMultiLine()); |
if (style() == STYLE_BUTTON) { |
@@ -200,15 +196,10 @@ gfx::Size LabelButton::GetPreferredSize() const { |
label.SetFontList(cached_normal_font_list_); |
} |
- // Resize multi-line labels given the current limited available width. |
- const gfx::Size image_size(image_->GetPreferredSize()); |
- const int image_width = image_size.width(); |
- if (GetTextMultiLine() && (width() > image_width + kSpacing)) |
- label.SizeToFit(width() - image_width - (image_width > 0 ? kSpacing : 0)); |
- |
// Calculate the required size. |
+ const gfx::Size image_size(image_->GetPreferredSize()); |
gfx::Size size(label.GetPreferredSize()); |
- if (image_width > 0 && size.width() > 0) |
+ if (image_size.width() > 0 && size.width() > 0) |
size.Enlarge(kSpacing, 0); |
size.SetToMax(gfx::Size(0, image_size.height())); |
const gfx::Insets insets(GetInsets()); |
@@ -229,6 +220,23 @@ gfx::Size LabelButton::GetPreferredSize() const { |
return size; |
} |
+int LabelButton::GetHeightForWidth(int w) const { |
+ w -= GetInsets().width(); |
+ const gfx::Size image_size(image_->GetPreferredSize()); |
+ w -= image_size.width(); |
+ if (image_size.width() > 0 && !GetText().empty()) |
+ w -= kSpacing; |
+ |
+ int height = std::max(image_size.height(), label_->GetHeightForWidth(w)); |
+ if (border()) |
+ height = std::max(height, border()->GetMinimumSize().height()); |
+ |
+ height = std::max(height, min_size_.height()); |
+ if (max_size_.height() > 0) |
+ height = std::min(height, max_size_.height()); |
+ return height; |
+} |
+ |
void LabelButton::Layout() { |
gfx::HorizontalAlignment adjusted_alignment = GetHorizontalAlignment(); |
if (base::i18n::IsRTL() && adjusted_alignment != gfx::ALIGN_CENTER) |
@@ -250,8 +258,6 @@ void LabelButton::Layout() { |
std::max(child_area.width() - image_size.width() - kSpacing, 0)); |
if (adjusted_alignment == gfx::ALIGN_CENTER) { |
// Ensure multi-line labels paired with images use their available width. |
- if (GetTextMultiLine()) |
- label_->SizeToFit(label_size.width()); |
label_size.set_width( |
std::min(label_size.width(), label_->GetPreferredSize().width())); |
} |
@@ -337,7 +343,7 @@ void LabelButton::ResetColorsFromNativeTheme() { |
label_->SetBackgroundColor(SK_ColorBLACK); |
label_->set_background(Background::CreateSolidBackground(SK_ColorBLACK)); |
label_->SetAutoColorReadabilityEnabled(true); |
- label_->set_shadows(gfx::ShadowValues()); |
+ label_->SetShadows(gfx::ShadowValues()); |
} else if (style() == STYLE_BUTTON) { |
// TODO(erg): This is disabled on desktop linux because of the binary asset |
// confusion. These details should either be pushed into ui::NativeThemeWin |
@@ -349,8 +355,8 @@ void LabelButton::ResetColorsFromNativeTheme() { |
label_->SetBackgroundColor(theme->GetSystemColor( |
ui::NativeTheme::kColorId_ButtonBackgroundColor)); |
label_->SetAutoColorReadabilityEnabled(false); |
- label_->set_shadows(gfx::ShadowValues(1, |
- gfx::ShadowValue(gfx::Point(0, 1), 0, kStyleButtonShadowColor))); |
+ label_->SetShadows(gfx::ShadowValues( |
+ 1, gfx::ShadowValue(gfx::Point(0, 1), 0, kStyleButtonShadowColor))); |
#endif |
label_->set_background(NULL); |
} else { |