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

Unified Diff: ui/views/controls/button/label_button.cc

Issue 15061006: views: Switch Checkbox over to LabelButton. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rm dcheck Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/controls/button/label_button.h ('k') | ui/views/controls/button/label_button_border.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 bc1c06351ee9ed514c0c2f62b20c4e6cec259a59..8a08d245405e5f50f667134abc67dd06f3fe477b 100644
--- a/ui/views/controls/button/label_button.cc
+++ b/ui/views/controls/button/label_button.cc
@@ -68,7 +68,7 @@ const gfx::ImageSkia& LabelButton::GetImage(ButtonState for_state) {
void LabelButton::SetImage(ButtonState for_state, const gfx::ImageSkia& image) {
button_state_images_[for_state] = image;
- image_->SetImage(GetImage(state()));
+ UpdateImage();
}
const string16& LabelButton::GetText() const {
@@ -190,10 +190,72 @@ gfx::Size LabelButton::GetPreferredSize() {
return size;
}
+void LabelButton::Layout() {
+ gfx::HorizontalAlignment adjusted_alignment = GetHorizontalAlignment();
+ if (base::i18n::IsRTL() && adjusted_alignment != gfx::ALIGN_CENTER)
+ adjusted_alignment = (adjusted_alignment == gfx::ALIGN_LEFT) ?
+ gfx::ALIGN_RIGHT : gfx::ALIGN_LEFT;
+
+ gfx::Rect child_area(GetLocalBounds());
+ child_area.Inset(GetInsets());
+
+ gfx::Size image_size(image_->GetPreferredSize());
+ image_size.set_width(std::min(image_size.width(), child_area.width()));
+ image_size.set_height(std::min(image_size.height(), child_area.height()));
+
+ // The label takes any remaining width after sizing the image, unless both
+ // views are centered. In that case, using the tighter preferred label width
+ // avoids wasted space within the label that would look like awkward padding.
+ gfx::Size label_size(child_area.size());
+ if (!image_size.IsEmpty() && !label_size.IsEmpty()) {
+ label_size.set_width(
+ 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()));
+ }
+ }
+
+ gfx::Point image_origin(child_area.origin());
+ image_origin.Offset(0, (child_area.height() - image_size.height()) / 2);
+ if (adjusted_alignment == gfx::ALIGN_CENTER) {
+ const int total_width = image_size.width() + label_size.width() +
+ ((image_size.width() > 0 && label_size.width() > 0) ? kSpacing : 0);
+ image_origin.Offset((child_area.width() - total_width) / 2, 0);
+ } else if (adjusted_alignment == gfx::ALIGN_RIGHT) {
+ image_origin.Offset(child_area.width() - image_size.width(), 0);
+ }
+
+ gfx::Point label_origin(child_area.origin());
+ if (!image_size.IsEmpty() &&adjusted_alignment != gfx::ALIGN_RIGHT)
+ label_origin.set_x(image_origin.x() + image_size.width() + kSpacing);
+
+ image_->SetBoundsRect(gfx::Rect(image_origin, image_size));
+ label_->SetBoundsRect(gfx::Rect(label_origin, label_size));
+}
+
const char* LabelButton::GetClassName() const {
return kViewClassName;
}
+void LabelButton::GetExtraParams(ui::NativeTheme::ExtraParams* params) const {
+ params->button.checked = false;
+ params->button.indeterminate = false;
+ params->button.is_default = is_default_;
+ params->button.is_focused = HasFocus() && IsAccessibilityFocusable();
+ params->button.has_border = style() == STYLE_NATIVE_TEXTBUTTON;
+ params->button.classic_state = 0;
+ params->button.background_color = GetNativeTheme()->GetSystemColor(
+ ui::NativeTheme::kColorId_ButtonBackgroundColor);
+}
+
+void LabelButton::UpdateImage() {
+ image_->SetImage(GetImage(state()));
+}
+
void LabelButton::ResetColorsFromNativeTheme() {
const ui::NativeTheme* theme = GetNativeTheme();
SkColor colors[STATE_COUNT] = {
@@ -222,7 +284,7 @@ void LabelButton::ResetColorsFromNativeTheme() {
void LabelButton::StateChanged() {
const gfx::Size previous_image_size(image_->GetPreferredSize());
- image_->SetImage(GetImage(state()));
+ UpdateImage();
const SkColor color = button_state_colors_[state()];
if (state() != STATE_DISABLED && label_->enabled_color() != color)
label_->SetEnabledColor(color);
@@ -231,48 +293,6 @@ void LabelButton::StateChanged() {
Layout();
}
-void LabelButton::Layout() {
- gfx::Rect child_area(GetLocalBounds());
- child_area.Inset(GetInsets());
-
- gfx::Size image_size(image_->GetPreferredSize());
- image_size.set_width(std::min(image_size.width(), child_area.width()));
- image_size.set_height(std::min(image_size.height(), child_area.height()));
-
- // The label takes any remaining width after sizing the image, unless both
- // views are centered. In that case, using the tighter preferred label width
- // avoids wasted space within the label that would look like awkward padding.
- gfx::Size label_size(child_area.size());
- if (!image_size.IsEmpty() && !label_size.IsEmpty()) {
- label_size.set_width(
- std::max(child_area.width() - image_size.width() - kSpacing, 0));
- if (GetHorizontalAlignment() == 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()));
- }
- }
-
- gfx::Point image_origin(child_area.origin());
- image_origin.Offset(0, (child_area.height() - image_size.height()) / 2);
- if (GetHorizontalAlignment() == gfx::ALIGN_CENTER) {
- const int total_width = image_size.width() + label_size.width() +
- ((image_size.width() > 0 && label_size.width() > 0) ? kSpacing : 0);
- image_origin.Offset((child_area.width() - total_width) / 2, 0);
- } else if (GetHorizontalAlignment() == gfx::ALIGN_RIGHT) {
- image_origin.Offset(child_area.width() - image_size.width(), 0);
- }
-
- gfx::Point label_origin(child_area.origin());
- if (!image_size.IsEmpty() && GetHorizontalAlignment() != gfx::ALIGN_RIGHT)
- label_origin.set_x(image_origin.x() + image_size.width() + kSpacing);
-
- image_->SetBoundsRect(gfx::Rect(image_origin, image_size));
- label_->SetBoundsRect(gfx::Rect(label_origin, label_size));
-}
-
void LabelButton::ChildPreferredSizeChanged(View* child) {
PreferredSizeChanged();
}
@@ -292,7 +312,7 @@ gfx::Rect LabelButton::GetThemePaintRect() const {
ui::NativeTheme::State LabelButton::GetThemeState(
ui::NativeTheme::ExtraParams* params) const {
GetExtraParams(params);
- switch(state()) {
+ switch (state()) {
case STATE_NORMAL: return ui::NativeTheme::kNormal;
case STATE_HOVERED: return ui::NativeTheme::kHovered;
case STATE_PRESSED: return ui::NativeTheme::kPressed;
@@ -325,15 +345,4 @@ ui::NativeTheme::State LabelButton::GetForegroundThemeState(
return ui::NativeTheme::kHovered;
}
-void LabelButton::GetExtraParams(ui::NativeTheme::ExtraParams* params) const {
- params->button.checked = false;
- params->button.indeterminate = false;
- params->button.is_default = is_default_;
- params->button.is_focused = HasFocus() && IsAccessibilityFocusable();
- params->button.has_border = style() == STYLE_NATIVE_TEXTBUTTON;
- params->button.classic_state = 0;
- params->button.background_color = GetNativeTheme()->GetSystemColor(
- ui::NativeTheme::kColorId_ButtonBackgroundColor);
-}
-
} // namespace views
« no previous file with comments | « ui/views/controls/button/label_button.h ('k') | ui/views/controls/button/label_button_border.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698