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))); |
} |
} |