summaryrefslogtreecommitdiffstats
path: root/views/controls/button/text_button.cc
diff options
context:
space:
mode:
authorrogerta@chromium.org <rogerta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-28 19:36:00 +0000
committerrogerta@chromium.org <rogerta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-28 19:36:00 +0000
commit1d9b33d9640fb304cc8680d4f2546e2c8b68fe69 (patch)
tree69310971313838845be36cbdac029ad88e3e09c2 /views/controls/button/text_button.cc
parent165fde8bf1c4872c8bfaada18c64e2b16b93c36d (diff)
downloadchromium_src-1d9b33d9640fb304cc8680d4f2546e2c8b68fe69.zip
chromium_src-1d9b33d9640fb304cc8680d4f2546e2c8b68fe69.tar.gz
chromium_src-1d9b33d9640fb304cc8680d4f2546e2c8b68fe69.tar.bz2
Revert 83373 - Resubmitting change to fix a build break in the arm builder. The only changefrom the original code is in text_button.cc, line 402, where text_x isinitialized to 0.Add classes for native themed push buttons, radio buttons, and checkboxes.These controls expose the same public interface and the existing controlsof the same type to make it easier to change between the implementations.BUG=NoneTEST=The new controls should look and feel like native platform controlsR=ben@chromium.orgReview URL: http://codereview.chromium.org/6853015
TBR=rogerta@chromium.org Review URL: http://codereview.chromium.org/6902119 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83378 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/controls/button/text_button.cc')
-rw-r--r--views/controls/button/text_button.cc505
1 files changed, 137 insertions, 368 deletions
diff --git a/views/controls/button/text_button.cc b/views/controls/button/text_button.cc
index c5fbdcb..b8e8d72 100644
--- a/views/controls/button/text_button.cc
+++ b/views/controls/button/text_button.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -8,13 +8,13 @@
#include "base/logging.h"
#include "base/utf_string_conversions.h"
-#include "grit/app_resources.h"
#include "ui/base/animation/throb_animation.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/canvas_skia.h"
#include "views/controls/button/button.h"
#include "views/events/event.h"
#include "views/widget/widget.h"
+#include "grit/app_resources.h"
namespace views {
@@ -26,21 +26,18 @@ static const int kPreferredPaddingHorizontal = 6;
static const int kPreferredPaddingVertical = 5;
// static
-const SkColor TextButtonBase::kEnabledColor = SkColorSetRGB(6, 45, 117);
+const SkColor TextButton::kEnabledColor = SkColorSetRGB(6, 45, 117);
// static
-const SkColor TextButtonBase::kHighlightColor =
- SkColorSetARGB(200, 255, 255, 255);
+const SkColor TextButton::kHighlightColor = SkColorSetARGB(200, 255, 255, 255);
// static
-const SkColor TextButtonBase::kDisabledColor = SkColorSetRGB(161, 161, 146);
+const SkColor TextButton::kDisabledColor = SkColorSetRGB(161, 161, 146);
// static
-const SkColor TextButtonBase::kHoverColor = TextButton::kEnabledColor;
+const SkColor TextButton::kHoverColor = TextButton::kEnabledColor;
// How long the hover fade animation should last.
static const int kHoverAnimationDurationMs = 170;
// static
-const char TextButtonBase::kViewClassName[] = "views/TextButtonBase";
-// static
const char TextButton::kViewClassName[] = "views/TextButton";
static int PrefixTypeToCanvasType(TextButton::PrefixType type) {
@@ -96,8 +93,9 @@ TextButtonBorder::~TextButtonBorder() {
// TextButtonBorder - painting
//
////////////////////////////////////////////////////////////////////////////////
+
void TextButtonBorder::Paint(const View& view, gfx::Canvas* canvas) const {
- const TextButtonBase* mb = static_cast<const TextButton*>(&view);
+ const TextButton* mb = static_cast<const TextButton*>(&view);
int state = mb->state();
// TextButton takes care of deciding when to call Paint.
@@ -105,24 +103,10 @@ void TextButtonBorder::Paint(const View& view, gfx::Canvas* canvas) const {
if (state == TextButton::BS_PUSHED)
set = &pushed_set_;
- bool is_animating = mb->GetAnimation()->is_animating();
- bool show_mult_icons = mb->show_multiple_icon_states();
- bool do_paint = (show_mult_icons && is_animating) ||
- (show_mult_icons && (state == TextButton::BS_HOT ||
- state == TextButton::BS_PUSHED)) ||
- (state == TextButton::BS_NORMAL && mb->normal_has_border());
- if (set && do_paint) {
- if (is_animating) {
- canvas->SaveLayerAlpha(
- static_cast<uint8>(mb->GetAnimation()->CurrentValueBetween(0, 255)));
- canvas->AsCanvasSkia()->drawARGB(0, 255, 255, 255,
- SkXfermode::kClear_Mode);
- }
-
+ if (set) {
Paint(view, canvas, *set);
-
- if (is_animating)
- canvas->Restore();
+ } else {
+ // Do nothing
}
}
@@ -196,63 +180,12 @@ void TextButtonBorder::GetInsets(gfx::Insets* insets) const {
}
////////////////////////////////////////////////////////////////////////////////
-//
-// TextButtonNativeThemeBorder
-//
-////////////////////////////////////////////////////////////////////////////////
-
-TextButtonNativeThemeBorder::TextButtonNativeThemeBorder(
- NativeThemeDelegate* delegate)
- : delegate_(delegate) {
-}
-
-TextButtonNativeThemeBorder::~TextButtonNativeThemeBorder() {
-}
-
-void TextButtonNativeThemeBorder::Paint(const View& view,
- gfx::Canvas* canvas) const {
- const TextButtonBase* tb = static_cast<const TextButton*>(&view);
- const gfx::NativeTheme* native_theme = gfx::NativeTheme::instance();
- gfx::NativeTheme::Part part = delegate_->GetThemePart();
- gfx::CanvasSkia* skia_canvas = canvas->AsCanvasSkia();
- gfx::Rect rect(delegate_->GetThemePaintRect());
-
- if (tb->show_multiple_icon_states() &&
- delegate_->GetThemeAnimation() != NULL &&
- delegate_->GetThemeAnimation()->is_animating()) {
- // Paint background state.
- gfx::NativeTheme::ExtraParams prev_extra;
- gfx::NativeTheme::State prev_state =
- delegate_->GetBackgroundThemeState(&prev_extra);
- native_theme->Paint(skia_canvas, part, prev_state, rect, prev_extra);
-
- // Composite foreground state above it.
- gfx::NativeTheme::ExtraParams extra;
- gfx::NativeTheme::State state = delegate_->GetForegroundThemeState(&extra);
- int alpha = delegate_->GetThemeAnimation()->CurrentValueBetween(0, 255);
- skia_canvas->SaveLayerAlpha(static_cast<uint8>(alpha));
- native_theme->Paint(skia_canvas, part, state, rect, extra);
- skia_canvas->Restore();
- } else {
- gfx::NativeTheme::ExtraParams extra;
- gfx::NativeTheme::State state = delegate_->GetThemeState(&extra);
- native_theme->Paint(skia_canvas, part, state, rect, extra);
- }
-}
-
-void TextButtonNativeThemeBorder::GetInsets(gfx::Insets* insets) const {
- insets->Set(kPreferredPaddingVertical, kPreferredPaddingHorizontal,
- kPreferredPaddingVertical, kPreferredPaddingHorizontal);
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-// TextButtonBase, public:
+// TextButton, public:
-TextButtonBase::TextButtonBase(ButtonListener* listener,
- const std::wstring& text)
+TextButton::TextButton(ButtonListener* listener, const std::wstring& text)
: CustomButton(listener),
alignment_(ALIGN_LEFT),
+ icon_placement_(ICON_ON_LEFT),
font_(ResourceBundle::GetSharedInstance().GetFont(
ResourceBundle::BaseFont)),
color_(kEnabledColor),
@@ -265,171 +198,153 @@ TextButtonBase::TextButtonBase(ButtonListener* listener,
active_text_shadow_color_(0),
inactive_text_shadow_color_(0),
has_shadow_(false),
+ has_hover_icon_(false),
+ has_pushed_icon_(false),
max_width_(0),
normal_has_border_(false),
show_multiple_icon_states_(true),
- is_default_(false),
- prefix_type_(PREFIX_NONE) {
+ prefix_type_(PREFIX_NONE),
+ icon_text_spacing_(kDefaultIconTextSpacing) {
SetText(text);
+ set_border(new TextButtonBorder);
SetAnimationDuration(kHoverAnimationDurationMs);
}
-TextButtonBase::~TextButtonBase() {
-}
-
-void TextButtonBase::SetIsDefault(bool is_default) {
- if (is_default == is_default_)
- return;
- is_default_ = is_default;
- if (is_default_)
- AddAccelerator(Accelerator(ui::VKEY_RETURN, false, false, false));
- else
- RemoveAccelerator(Accelerator(ui::VKEY_RETURN, false, false, false));
- SchedulePaint();
+TextButton::~TextButton() {
}
-void TextButtonBase::SetText(const std::wstring& text) {
+void TextButton::SetText(const std::wstring& text) {
text_ = WideToUTF16Hack(text);
SetAccessibleName(WideToUTF16Hack(text));
UpdateTextSize();
}
-void TextButtonBase::SetFont(const gfx::Font& font) {
+void TextButton::SetIcon(const SkBitmap& icon) {
+ icon_ = icon;
+}
+
+void TextButton::SetHoverIcon(const SkBitmap& icon) {
+ icon_hover_ = icon;
+ has_hover_icon_ = true;
+}
+
+void TextButton::SetPushedIcon(const SkBitmap& icon) {
+ icon_pushed_ = icon;
+ has_pushed_icon_ = true;
+}
+
+void TextButton::SetFont(const gfx::Font& font) {
font_ = font;
UpdateTextSize();
}
-void TextButtonBase::SetEnabledColor(SkColor color) {
+void TextButton::SetEnabledColor(SkColor color) {
color_enabled_ = color;
UpdateColor();
}
-void TextButtonBase::SetDisabledColor(SkColor color) {
+void TextButton::SetDisabledColor(SkColor color) {
color_disabled_ = color;
UpdateColor();
}
-void TextButtonBase::SetHighlightColor(SkColor color) {
+void TextButton::SetHighlightColor(SkColor color) {
color_highlight_ = color;
}
-void TextButtonBase::SetHoverColor(SkColor color) {
+void TextButton::SetHoverColor(SkColor color) {
color_hover_ = color;
}
-void TextButtonBase::SetTextHaloColor(SkColor color) {
+void TextButton::SetTextHaloColor(SkColor color) {
text_halo_color_ = color;
has_text_halo_ = true;
}
-void TextButtonBase::SetTextShadowColors(SkColor active_color,
- SkColor inactive_color) {
+void TextButton::SetTextShadowColors(SkColor active_color,
+ SkColor inactive_color) {
active_text_shadow_color_ = active_color;
inactive_text_shadow_color_ = inactive_color;
has_shadow_ = true;
}
-void TextButtonBase::ClearMaxTextSize() {
+void TextButton::ClearMaxTextSize() {
max_text_size_ = text_size_;
}
-void TextButtonBase::SetNormalHasBorder(bool normal_has_border) {
+void TextButton::SetNormalHasBorder(bool normal_has_border) {
normal_has_border_ = normal_has_border;
}
-void TextButtonBase::SetShowMultipleIconStates(bool show_multiple_icon_states) {
+void TextButton::SetShowMultipleIconStates(bool show_multiple_icon_states) {
show_multiple_icon_states_ = show_multiple_icon_states;
}
-gfx::Size TextButtonBase::GetPreferredSize() {
- gfx::Insets insets = GetInsets();
-
- // Use the max size to set the button boundaries.
- gfx::Size prefsize(max_text_size_.width() + insets.width(),
- max_text_size_.height() + insets.height());
-
- if (max_width_ > 0)
- prefsize.set_width(std::min(max_width_, prefsize.width()));
-
- return prefsize;
-}
-
-void TextButtonBase::OnPaint(gfx::Canvas* canvas) {
- PaintButton(canvas, PB_NORMAL);
-}
-
-const ui::Animation* TextButtonBase::GetAnimation() const {
- return hover_animation_.get();
-}
-
-void TextButtonBase::UpdateColor() {
- color_ = IsEnabled() ? color_enabled_ : color_disabled_;
-}
+void TextButton::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) {
+ if (mode == PB_NORMAL) {
+ OnPaintBackground(canvas);
-void TextButtonBase::UpdateTextSize() {
- int width = 0, height = 0;
- gfx::CanvasSkia::SizeStringInt(
- text_, font_, &width, &height,
- gfx::Canvas::NO_ELLIPSIS | PrefixTypeToCanvasType(prefix_type_));
+ if (show_multiple_icon_states_ && hover_animation_->is_animating()) {
+ // Draw the hover bitmap into an offscreen buffer, then blend it
+ // back into the current canvas.
+ canvas->SaveLayerAlpha(
+ static_cast<int>(hover_animation_->GetCurrentValue() * 255));
+ canvas->AsCanvasSkia()->drawARGB(0, 255, 255, 255,
+ SkXfermode::kClear_Mode);
+ OnPaintBorder(canvas);
+ canvas->Restore();
+ } else if ((show_multiple_icon_states_ &&
+ (state_ == BS_HOT || state_ == BS_PUSHED)) ||
+ (state_ == BS_NORMAL && normal_has_border_)) {
+ OnPaintBorder(canvas);
+ }
- // Add 2 extra pixels to width and height when text halo is used.
- if (has_text_halo_) {
- width += 2;
- height += 2;
+ OnPaintFocusBorder(canvas);
}
- text_size_.SetSize(width, font_.GetHeight());
- max_text_size_.SetSize(std::max(max_text_size_.width(), text_size_.width()),
- std::max(max_text_size_.height(),
- text_size_.height()));
- PreferredSizeChanged();
-}
-
-void TextButtonBase::GetExtraParams(
- gfx::NativeTheme::ExtraParams* params) const {
- params->button.checked = false;
- params->button.indeterminate = false;
- params->button.is_default = false;
- params->button.has_border = false;
- params->button.classic_state = 0;
- params->button.background_color = kEnabledColor;
-}
+ SkBitmap icon = icon_;
+ if (show_multiple_icon_states_) {
+ if (has_hover_icon_ && (state() == BS_HOT))
+ icon = icon_hover_;
+ else if (has_pushed_icon_ && (state() == BS_PUSHED))
+ icon = icon_pushed_;
+ }
-gfx::Rect TextButtonBase::GetTextBounds() const {
gfx::Insets insets = GetInsets();
int available_width = width() - insets.width();
+ int available_height = height() - insets.height();
+ // Use the actual text (not max) size to properly center the text.
int content_width = text_size_.width();
- int text_x = 0;
- switch(alignment_) {
- case ALIGN_LEFT:
- text_x = insets.left();
- break;
- case ALIGN_RIGHT:
- text_x = width() - insets.right() - content_width;
- break;
- case ALIGN_CENTER:
- text_x = insets.left() + std::max(0,
- (available_width - content_width) / 2);
- break;
+ if (icon.width() > 0) {
+ content_width += icon.width();
+ if (!text_.empty())
+ content_width += icon_text_spacing_;
}
+ // Place the icon along the left edge.
+ int icon_x;
+ if (alignment_ == ALIGN_LEFT) {
+ icon_x = insets.left();
+ } else if (alignment_ == ALIGN_RIGHT) {
+ icon_x = available_width - content_width;
+ } else {
+ icon_x =
+ std::max(0, (available_width - content_width) / 2) + insets.left();
+ }
+ int text_x = icon_x;
+ if (icon.width() > 0)
+ text_x += icon.width() + icon_text_spacing_;
const int text_width = std::min(text_size_.width(),
width() - insets.right() - text_x);
- int available_height = height() - insets.height();
int text_y = (available_height - text_size_.height()) / 2 + insets.top();
- gfx::Rect bounds(text_x, text_y, text_width, text_size_.height());
- return bounds;
-}
-
-void TextButtonBase::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) {
- if (mode == PB_NORMAL) {
- OnPaintBackground(canvas);
- OnPaintBorder(canvas);
- OnPaintFocusBorder(canvas);
+ // If the icon should go on the other side, swap the elements.
+ if (icon_placement_ == ICON_ON_RIGHT) {
+ int new_text_x = icon_x;
+ icon_x = new_text_x + text_width + icon_text_spacing_;
+ text_x = new_text_x;
}
- gfx::Rect text_bounds(GetTextBounds());
- if (text_bounds.width() > 0) {
+ if (text_width > 0) {
// Because the text button can (at times) draw multiple elements on the
// canvas, we can not mirror the button by simply flipping the canvas as
// doing this will mirror the text itself. Flipping the canvas will also
@@ -438,6 +353,7 @@ void TextButtonBase::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) {
// horizontally.
//
// Due to the above, we must perform the flipping manually for RTL UIs.
+ gfx::Rect text_bounds(text_x, text_y, text_width, text_size_.height());
text_bounds.set_x(GetMirroredXForRect(text_bounds));
SkColor text_color = (show_multiple_icon_states_ &&
@@ -500,109 +416,51 @@ void TextButtonBase::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) {
draw_string_flags);
}
}
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// TextButtonBase, View overrides:
-gfx::Size TextButtonBase::GetMinimumSize() {
- return max_text_size_;
-}
+ if (icon.width() > 0) {
+ int icon_y = (available_height - icon.height()) / 2 + insets.top();
-void TextButtonBase::SetEnabled(bool enabled) {
- if (enabled != IsEnabled()) {
- CustomButton::SetEnabled(enabled);
+ // Mirroring the icon position if necessary.
+ gfx::Rect icon_bounds(icon_x, icon_y, icon.width(), icon.height());
+ icon_bounds.set_x(GetMirroredXForRect(icon_bounds));
+ canvas->DrawBitmapInt(icon, icon_bounds.x(), icon_bounds.y());
}
- // We should always call UpdateColor() since the state of the button might be
- // changed by other functions like CustomButton::SetState().
- UpdateColor();
- SchedulePaint();
}
-std::string TextButtonBase::GetClassName() const {
- return kViewClassName;
+void TextButton::UpdateColor() {
+ color_ = IsEnabled() ? color_enabled_ : color_disabled_;
}
-////////////////////////////////////////////////////////////////////////////////
-// TextButtonBase, NativeThemeDelegate overrides:
-
-gfx::Rect TextButtonBase::GetThemePaintRect() const {
- return bounds();
-}
+void TextButton::UpdateTextSize() {
+ int width = 0, height = 0;
+ gfx::CanvasSkia::SizeStringInt(
+ text_, font_, &width, &height,
+ gfx::Canvas::NO_ELLIPSIS | PrefixTypeToCanvasType(prefix_type_));
-gfx::NativeTheme::State TextButtonBase::GetThemeState(
- gfx::NativeTheme::ExtraParams* params) const {
- GetExtraParams(params);
- switch(state()) {
- case BS_DISABLED:
- return gfx::NativeTheme::kDisabled;
- case BS_NORMAL:
- return gfx::NativeTheme::kNormal;
- case BS_HOT:
- return gfx::NativeTheme::kHovered;
- case BS_PUSHED:
- return gfx::NativeTheme::kPressed;
- default:
- NOTREACHED() << "Unknown state: " << state();
- return gfx::NativeTheme::kNormal;
+ // Add 2 extra pixels to width and height when text halo is used.
+ if (has_text_halo_) {
+ width += 2;
+ height += 2;
}
-}
-const ui::Animation* TextButtonBase::GetThemeAnimation() const {
- return hover_animation_.get();
-}
-
-gfx::NativeTheme::State TextButtonBase::GetBackgroundThemeState(
- gfx::NativeTheme::ExtraParams* params) const {
- GetExtraParams(params);
- return gfx::NativeTheme::kNormal;
-}
-
-gfx::NativeTheme::State TextButtonBase::GetForegroundThemeState(
- gfx::NativeTheme::ExtraParams* params) const {
- GetExtraParams(params);
- return gfx::NativeTheme::kHovered;
+ text_size_.SetSize(width, font_.GetHeight());
+ max_text_size_.SetSize(std::max(max_text_size_.width(), text_size_.width()),
+ std::max(max_text_size_.height(),
+ text_size_.height()));
+ PreferredSizeChanged();
}
////////////////////////////////////////////////////////////////////////////////
-//
-// TextButton
-//
-////////////////////////////////////////////////////////////////////////////////
-
-TextButton::TextButton(ButtonListener* listener,
- const std::wstring& text)
- : TextButtonBase(listener, text),
- icon_placement_(ICON_ON_LEFT),
- has_hover_icon_(false),
- has_pushed_icon_(false),
- icon_text_spacing_(kDefaultIconTextSpacing) {
- set_border(new TextButtonBorder);
-}
-
-TextButton::~TextButton() {
-}
-
-void TextButton::SetIcon(const SkBitmap& icon) {
- icon_ = icon;
-}
-
-void TextButton::SetHoverIcon(const SkBitmap& icon) {
- icon_hover_ = icon;
- has_hover_icon_ = true;
-}
-
-void TextButton::SetPushedIcon(const SkBitmap& icon) {
- icon_pushed_ = icon;
- has_pushed_icon_ = true;
-}
+// TextButton, View overrides:
gfx::Size TextButton::GetPreferredSize() {
- gfx::Size prefsize(TextButtonBase::GetPreferredSize());
- prefsize.Enlarge(icon_.width(), 0);
- prefsize.set_height(std::max(prefsize.height(), icon_.height()));
+ gfx::Insets insets = GetInsets();
// Use the max size to set the button boundaries.
+ gfx::Size prefsize(max_text_size_.width() + icon_.width() + insets.width(),
+ std::max(max_text_size_.height(), icon_.height()) +
+ insets.height());
+
if (icon_.width() > 0 && !text_.empty())
prefsize.Enlarge(icon_text_spacing_, 0);
@@ -612,115 +470,26 @@ gfx::Size TextButton::GetPreferredSize() {
return prefsize;
}
-void TextButton::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) {
- TextButtonBase::PaintButton(canvas, mode);
-
- SkBitmap icon = icon_;
- if (show_multiple_icon_states_) {
- if (has_hover_icon_ && (state() == BS_HOT))
- icon = icon_hover_;
- else if (has_pushed_icon_ && (state() == BS_PUSHED))
- icon = icon_pushed_;
- }
-
- if (icon.width() > 0) {
- gfx::Rect text_bounds = GetTextBounds();
- int icon_x;
- int spacing = text_.empty() ? 0 : icon_text_spacing_;
- if (icon_placement_ == ICON_ON_LEFT) {
- icon_x = text_bounds.x() - icon.width() - spacing;
- } else {
- icon_x = text_bounds.right() + spacing;
- }
-
- gfx::Insets insets = GetInsets();
- int available_height = height() - insets.height();
- int icon_y = (available_height - icon.height()) / 2 + insets.top();
+gfx::Size TextButton::GetMinimumSize() {
+ return max_text_size_;
+}
- // Mirroring the icon position if necessary.
- gfx::Rect icon_bounds(icon_x, icon_y, icon.width(), icon.height());
- icon_bounds.set_x(GetMirroredXForRect(icon_bounds));
- canvas->DrawBitmapInt(icon, icon_bounds.x(), icon_bounds.y());
+void TextButton::SetEnabled(bool enabled) {
+ if (enabled != IsEnabled()) {
+ CustomButton::SetEnabled(enabled);
}
+ // We should always call UpdateColor() since the state of the button might be
+ // changed by other functions like CustomButton::SetState().
+ UpdateColor();
+ SchedulePaint();
}
std::string TextButton::GetClassName() const {
return kViewClassName;
}
-gfx::NativeTheme::Part TextButton::GetThemePart() const {
- return gfx::NativeTheme::kPushButton;
-}
-
-void TextButton::GetExtraParams(gfx::NativeTheme::ExtraParams* params) const {
- params->button.checked = false;
- params->button.indeterminate = false;
- params->button.is_default = is_default_;
- params->button.has_border = false;
- params->button.classic_state = 0;
- params->button.background_color = kEnabledColor;
-}
-
-gfx::Rect TextButton::GetTextBounds() const {
- gfx::Rect bounds(TextButtonBase::GetTextBounds());
-
- SkBitmap icon = icon_;
- if (show_multiple_icon_states_) {
- if (has_hover_icon_ && (state() == BS_HOT))
- icon = icon_hover_;
- else if (has_pushed_icon_ && (state() == BS_PUSHED))
- icon = icon_pushed_;
- }
-
- if (icon.width() > 0) {
- gfx::Insets insets = GetInsets();
- int available_width = width() - insets.width();
- int icon_width = icon.width() + (text_.empty() ? 0 : icon_text_spacing_);
- int new_content_width = bounds.width() + icon_width;
-
- if (new_content_width < available_width) {
- switch(alignment_) {
- case ALIGN_LEFT:
- if (icon_placement_ == ICON_ON_LEFT)
- bounds.Offset(icon_width, 0);
- break;
- case ALIGN_RIGHT:
- if (icon_placement_ == ICON_ON_RIGHT)
- bounds.Offset(-icon_width, 0);
- break;
- case ALIGN_CENTER:
- if (icon_placement_ == ICON_ON_LEFT) {
- bounds.Offset(icon_width / 2, 0);
- } else {
- bounds.Offset(-icon_width / 2, 0);
- }
- break;
- }
- } else {
- // Make sure the icon is always fully visible.
- switch(alignment_) {
- case ALIGN_LEFT:
- case ALIGN_CENTER:
- if (icon_placement_ == ICON_ON_LEFT) {
- bounds.Offset(icon_width, 0);
- } else {
- bounds.set_width(available_width - icon_width);
- }
- break;
- case ALIGN_RIGHT:
- if (icon_placement_ == ICON_ON_RIGHT) {
- bounds.Offset(-icon_width, 0);
- } else {
- bounds.set_x(icon_width + insets.left());
- }
- break;
- }
- }
- }
-
- return bounds;
+void TextButton::OnPaint(gfx::Canvas* canvas) {
+ PaintButton(canvas, PB_NORMAL);
}
} // namespace views
-
-