Chromium Code Reviews| Index: views/controls/link.cc |
| =================================================================== |
| --- views/controls/link.cc (revision 104769) |
| +++ views/controls/link.cc (working copy) |
| @@ -25,72 +25,30 @@ |
| namespace { |
| -void GetColors(const SkColor* background_color, // NULL means "use default" |
| - SkColor* highlighted_color, |
| - SkColor* disabled_color, |
| - SkColor* normal_color) { |
| - static SkColor kHighlightedColor, kDisabledColor, kNormalColor; |
| - static bool initialized = false; |
| - if (!initialized) { |
| -#if defined(OS_WIN) |
| - kHighlightedColor = color_utils::GetReadableColor( |
| - SkColorSetRGB(200, 0, 0), color_utils::GetSysSkColor(COLOR_WINDOW)); |
| - kDisabledColor = color_utils::GetSysSkColor(COLOR_WINDOWTEXT); |
| - kNormalColor = color_utils::GetSysSkColor(COLOR_HOTLIGHT); |
| -#else |
| - // TODO(beng): source from theme provider. |
| - kHighlightedColor = SK_ColorRED; |
| - kDisabledColor = SK_ColorBLACK; |
| - kNormalColor = SkColorSetRGB(0, 51, 153); |
| -#endif |
| +// The colors to use for enabled and disabled labels. |
| +SkColor kDefaultEnabledColor; |
|
sky
2011/10/11 00:42:35
Same comment here as in Label.
|
| +SkColor kDefaultDisabledColor; |
| +SkColor kDefaultPressedColor; |
| - initialized = true; |
| - } |
| +}; |
| - if (background_color) { |
| - *highlighted_color = color_utils::GetReadableColor(kHighlightedColor, |
| - *background_color); |
| - *disabled_color = color_utils::GetReadableColor(kDisabledColor, |
| - *background_color); |
| - *normal_color = color_utils::GetReadableColor(kNormalColor, |
| - *background_color); |
| - } else { |
| - *highlighted_color = kHighlightedColor; |
| - *disabled_color = kDisabledColor; |
| - *normal_color = kNormalColor; |
| - } |
| -} |
| -} |
| - |
| namespace views { |
| const char Link::kViewClassName[] = "views/Link"; |
| -Link::Link() : Label(string16()), |
| - listener_(NULL), |
| - highlighted_(false) { |
| +Link::Link() : Label(string16()) { |
| Init(); |
| - set_focusable(true); |
| } |
| -Link::Link(const string16& title) : Label(title), |
| - listener_(NULL), |
| - highlighted_(false) { |
| +Link::Link(const string16& title) : Label(title) { |
| Init(); |
| - set_focusable(true); |
| } |
| -void Link::Init() { |
| - GetColors(NULL, &highlighted_color_, &disabled_color_, &normal_color_); |
| - SetColor(normal_color_); |
| - ValidateStyle(); |
| -} |
| - |
| Link::~Link() { |
| } |
| void Link::OnEnabledChanged() { |
| - ValidateStyle(); |
| + RecalculateFont(); |
| View::OnEnabledChanged(); |
| } |
| @@ -122,14 +80,14 @@ |
| if (!IsEnabled() || |
| (!event.IsLeftMouseButton() && !event.IsMiddleMouseButton())) |
| return false; |
| - SetHighlighted(true); |
| + SetPressed(true); |
| return true; |
| } |
| bool Link::OnMouseDragged(const MouseEvent& event) { |
| - SetHighlighted(IsEnabled() && |
| - (event.IsLeftMouseButton() || event.IsMiddleMouseButton()) && |
| - HitTest(event.location())); |
| + SetPressed(IsEnabled() && |
| + (event.IsLeftMouseButton() || event.IsMiddleMouseButton()) && |
| + HitTest(event.location())); |
| return true; |
| } |
| @@ -149,7 +107,7 @@ |
| } |
| void Link::OnMouseCaptureLost() { |
| - SetHighlighted(false); |
| + SetPressed(false); |
| } |
| bool Link::OnKeyPressed(const KeyEvent& event) { |
| @@ -158,7 +116,7 @@ |
| if (!activate) |
| return false; |
| - SetHighlighted(false); |
| + SetPressed(false); |
| // Focus the link on key pressed. |
| RequestFocus(); |
| @@ -182,50 +140,63 @@ |
| void Link::SetFont(const gfx::Font& font) { |
| Label::SetFont(font); |
| - ValidateStyle(); |
| + RecalculateFont(); |
| } |
| -void Link::SetHighlightedColor(const SkColor& color) { |
| - highlighted_color_ = color; |
| - ValidateStyle(); |
| +void Link::SetEnabledColor(const SkColor& color) { |
| + requested_enabled_color_ = color; |
| + if (!pressed_) |
| + Label::SetEnabledColor(requested_enabled_color_); |
| } |
| -void Link::SetDisabledColor(const SkColor& color) { |
| - disabled_color_ = color; |
| - ValidateStyle(); |
| +void Link::SetPressedColor(const SkColor& color) { |
| + requested_pressed_color_ = color; |
| + if (pressed_) |
| + Label::SetEnabledColor(requested_pressed_color_); |
| } |
| -void Link::SetNormalColor(const SkColor& color) { |
| - normal_color_ = color; |
| - ValidateStyle(); |
| -} |
| +void Link::Init() { |
| + static bool initialized = false; |
| + if (!initialized) { |
| +#if defined(OS_WIN) |
| + kDefaultEnabledColor = color_utils::GetSysSkColor(COLOR_HOTLIGHT); |
| + kDefaultDisabledColor = color_utils::GetSysSkColor(COLOR_WINDOWTEXT); |
| + kDefaultPressedColor = SkColorSetRGB(200, 0, 0); |
| +#else |
| + // TODO(beng): source from theme provider. |
| + kDefaultEnabledColor = SkColorSetRGB(0, 51, 153); |
| + kDefaultDisabledColor = SK_ColorBLACK; |
| + kDefaultPressedColor = SK_ColorRED; |
| +#endif |
| -void Link::MakeReadableOverBackgroundColor(const SkColor& color) { |
| - GetColors(&color, &highlighted_color_, &disabled_color_, &normal_color_); |
| - ValidateStyle(); |
| + initialized = true; |
| + } |
| + |
| + listener_ = NULL; |
| + pressed_ = false; |
| + SetEnabledColor(kDefaultEnabledColor); |
| + SetDisabledColor(kDefaultDisabledColor); |
| + SetPressedColor(kDefaultPressedColor); |
| + RecalculateFont(); |
| + set_focusable(true); |
| } |
| -void Link::SetHighlighted(bool f) { |
| - if (f != highlighted_) { |
| - highlighted_ = f; |
| - ValidateStyle(); |
| +void Link::SetPressed(bool pressed) { |
| + if (pressed_ != pressed) { |
| + pressed_ = pressed; |
| + Label::SetEnabledColor(pressed_ ? |
| + requested_pressed_color_ : requested_enabled_color_); |
| + RecalculateFont(); |
| SchedulePaint(); |
| } |
| } |
| -void Link::ValidateStyle() { |
| - if (IsEnabled()) { |
| - if (!(font().GetStyle() & gfx::Font::UNDERLINED)) { |
| - Label::SetFont( |
| - font().DeriveFont(0, font().GetStyle() | gfx::Font::UNDERLINED)); |
| - } |
| - Label::SetColor(highlighted_ ? highlighted_color_ : normal_color_); |
| - } else { |
| - if (font().GetStyle() & gfx::Font::UNDERLINED) { |
| - Label::SetFont( |
| - font().DeriveFont(0, font().GetStyle() & ~gfx::Font::UNDERLINED)); |
| - } |
| - Label::SetColor(disabled_color_); |
| +void Link::RecalculateFont() { |
| + // The font should be underlined iff the link is enabled. |
| + if (IsEnabled() == !(font().GetStyle() & gfx::Font::UNDERLINED)) { |
| + Label::SetFont(font().DeriveFont(0, IsEnabled() ? |
| + (font().GetStyle() | gfx::Font::UNDERLINED) : |
| + (font().GetStyle() & ~gfx::Font::UNDERLINED))); |
| } |
| } |