summaryrefslogtreecommitdiffstats
path: root/views/controls
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-25 16:49:26 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-25 16:49:26 +0000
commit28065f66296d0d012aa5b02c147f4f77ef8a771e (patch)
tree9fc2567cd9a4edaf09a322e2465b8540787c118c /views/controls
parent120e1f1b2728ae5d1d4fed21bddb3533b921fdba (diff)
downloadchromium_src-28065f66296d0d012aa5b02c147f4f77ef8a771e.zip
chromium_src-28065f66296d0d012aa5b02c147f4f77ef8a771e.tar.gz
chromium_src-28065f66296d0d012aa5b02c147f4f77ef8a771e.tar.bz2
Use the system WINDOWTEXT color for labels, instead of black. Also use the system WINDOW color for InfoBubbles, not white. Several places are made to explicitly use black labels where that's correct or respecting system colors is a non-trivial fix (bugs filed for most).
Also, apparently I didn't get all my cleanup changes in the last patch, oops. BUG=92,21027 TEST=Set theme to high-contrast black on white, check that most pieces of chrome UI have readable text Review URL: http://codereview.chromium.org/237005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27196 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/controls')
-rw-r--r--views/controls/label.cc18
-rw-r--r--views/controls/label.h4
-rw-r--r--views/controls/link.cc62
-rw-r--r--views/controls/link.h6
-rw-r--r--views/controls/textfield/native_textfield_gtk.cc11
-rw-r--r--views/controls/textfield/native_textfield_gtk.h1
-rw-r--r--views/controls/textfield/native_textfield_win.cc11
-rw-r--r--views/controls/textfield/native_textfield_win.h1
-rw-r--r--views/controls/textfield/native_textfield_wrapper.h3
-rw-r--r--views/controls/textfield/textfield.cc19
-rw-r--r--views/controls/textfield/textfield.h21
11 files changed, 141 insertions, 16 deletions
diff --git a/views/controls/label.cc b/views/controls/label.cc
index 8bda393..6e9a360 100644
--- a/views/controls/label.cc
+++ b/views/controls/label.cc
@@ -7,6 +7,7 @@
#include <math.h>
#include "app/gfx/canvas.h"
+#include "app/gfx/color_utils.h"
#include "app/gfx/font.h"
#include "app/gfx/insets.h"
#include "app/gfx/text_elider.h"
@@ -20,9 +21,8 @@ namespace views {
// static
const char Label::kViewClassName[] = "views/Label";
+SkColor Label::kEnabledColor, Label::kDisabledColor;
-static const SkColor kEnabledColor = SK_ColorBLACK;
-static const SkColor kDisabledColor = SkColorSetRGB(161, 161, 146);
static const int kFocusBorderPadding = 1;
Label::Label() {
@@ -38,6 +38,20 @@ Label::Label(const std::wstring& text, const gfx::Font& font) {
}
void Label::Init(const std::wstring& text, const gfx::Font& font) {
+ static bool initialized = false;
+ if (!initialized) {
+#if defined(OS_WIN)
+ kEnabledColor = color_utils::GetSysSkColor(COLOR_WINDOWTEXT);
+ kDisabledColor = color_utils::GetSysSkColor(COLOR_GRAYTEXT);
+#else
+ // TODO(beng): source from theme provider.
+ kEnabledColor = SK_ColorBLACK;
+ kDisabledColor = SK_ColorGRAY;
+#endif
+
+ initialized = true;
+ }
+
contains_mouse_ = false;
font_ = font;
text_size_valid_ = false;
diff --git a/views/controls/label.h b/views/controls/label.h
index 9a5526a..19d921d 100644
--- a/views/controls/label.h
+++ b/views/controls/label.h
@@ -224,6 +224,10 @@ class Label : public View {
int ComputeMultiLineFlags();
gfx::Size GetTextSize();
void Init(const std::wstring& text, const gfx::Font& font);
+
+ // The colors to use for enabled and disabled labels.
+ static SkColor kEnabledColor, kDisabledColor;
+
std::wstring text_;
GURL url_;
gfx::Font font_;
diff --git a/views/controls/link.cc b/views/controls/link.cc
index c9bd256..f2887e0 100644
--- a/views/controls/link.cc
+++ b/views/controls/link.cc
@@ -8,44 +8,75 @@
#include <gdk/gdk.h>
#endif
+#include "app/gfx/color_utils.h"
#include "app/gfx/font.h"
#include "base/logging.h"
#include "views/event.h"
+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
+
+ 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 {
#if defined(OS_WIN)
static HCURSOR g_hand_cursor = NULL;
#endif
-// Default colors used for links.
-static const SkColor kHighlightedColor = SkColorSetRGB(255, 0x00, 0x00);
-static const SkColor kNormalColor = SkColorSetRGB(0, 51, 153);
-static const SkColor kDisabledColor = SkColorSetRGB(0, 0, 0);
-
const char Link::kViewClassName[] = "views/Link";
Link::Link() : Label(L""),
controller_(NULL),
- highlighted_(false),
- highlighted_color_(kHighlightedColor),
- disabled_color_(kDisabledColor),
- normal_color_(kNormalColor) {
+ highlighted_(false) {
Init();
SetFocusable(true);
}
Link::Link(const std::wstring& title) : Label(title),
controller_(NULL),
- highlighted_(false),
- highlighted_color_(kHighlightedColor),
- disabled_color_(kDisabledColor),
- normal_color_(kNormalColor) {
+ highlighted_(false) {
Init();
SetFocusable(true);
}
void Link::Init() {
+ GetColors(NULL, &highlighted_color_, &disabled_color_, &normal_color_);
SetColor(normal_color_);
ValidateStyle();
}
@@ -167,6 +198,11 @@ void Link::SetNormalColor(const SkColor& color) {
ValidateStyle();
}
+void Link::MakeReadableOverBackgroundColor(const SkColor& color) {
+ GetColors(&color, &highlighted_color_, &disabled_color_, &normal_color_);
+ ValidateStyle();
+}
+
void Link::SetHighlighted(bool f) {
if (f != highlighted_) {
highlighted_ = f;
diff --git a/views/controls/link.h b/views/controls/link.h
index 30b2bdb7..bf5039b 100644
--- a/views/controls/link.h
+++ b/views/controls/link.h
@@ -61,10 +61,14 @@ class Link : public Label {
void SetDisabledColor(const SkColor& color);
void SetNormalColor(const SkColor& color);
+ // If you'll be displaying the link over some non-system background color,
+ // call this with the relevant color and the link will auto-set its colors to
+ // be readable.
+ void MakeReadableOverBackgroundColor(const SkColor& color);
+
static const char kViewClassName[];
private:
-
// A highlighted link is clicked.
void SetHighlighted(bool f);
diff --git a/views/controls/textfield/native_textfield_gtk.cc b/views/controls/textfield/native_textfield_gtk.cc
index ef7a67d..2a5aa15 100644
--- a/views/controls/textfield/native_textfield_gtk.cc
+++ b/views/controls/textfield/native_textfield_gtk.cc
@@ -84,6 +84,17 @@ void NativeTextfieldGtk::UpdateBorder() {
return;
}
+void NativeTextfieldGtk::UpdateTextColor() {
+ if (textfield_->use_default_text_color()) {
+ // Passing NULL as the color undoes the effect of previous calls to
+ // gtk_widget_modify_text.
+ gtk_widget_modify_text(native_view(), GTK_STATE_NORMAL, NULL);
+ return;
+ }
+ GdkColor gdk_color = skia::SkColorToGdkColor(textfield_->text_color());
+ gtk_widget_modify_text(native_view(), GTK_STATE_NORMAL, &gdk_color);
+}
+
void NativeTextfieldGtk::UpdateBackgroundColor() {
if (textfield_->use_default_background_color()) {
// Passing NULL as the color undoes the effect of previous calls to
diff --git a/views/controls/textfield/native_textfield_gtk.h b/views/controls/textfield/native_textfield_gtk.h
index ef2f4fe..bbd0663 100644
--- a/views/controls/textfield/native_textfield_gtk.h
+++ b/views/controls/textfield/native_textfield_gtk.h
@@ -27,6 +27,7 @@ class NativeTextfieldGtk : public NativeControlGtk,
virtual void SelectAll();
virtual void ClearSelection();
virtual void UpdateBorder();
+ virtual void UpdateTextColor();
virtual void UpdateBackgroundColor();
virtual void UpdateReadOnly();
virtual void UpdateFont();
diff --git a/views/controls/textfield/native_textfield_win.cc b/views/controls/textfield/native_textfield_win.cc
index 15d6bd9..1872492 100644
--- a/views/controls/textfield/native_textfield_win.cc
+++ b/views/controls/textfield/native_textfield_win.cc
@@ -170,6 +170,15 @@ void NativeTextfieldWin::UpdateBorder() {
SWP_NOOWNERZORDER | SWP_NOSIZE);
}
+void NativeTextfieldWin::UpdateTextColor() {
+ CHARFORMAT cf = {0};
+ cf.dwMask = CFM_COLOR;
+ cf.crTextColor = textfield_->use_default_text_color() ?
+ GetSysColor(textfield_->read_only() ? COLOR_GRAYTEXT : COLOR_WINDOWTEXT) :
+ skia::SkColorToCOLORREF(textfield_->text_color());
+ CRichEditCtrl::SetDefaultCharFormat(cf);
+}
+
void NativeTextfieldWin::UpdateBackgroundColor() {
if (!textfield_->use_default_background_color()) {
bg_color_ = skia::SkColorToCOLORREF(textfield_->background_color());
@@ -187,6 +196,8 @@ void NativeTextfieldWin::UpdateReadOnly() {
void NativeTextfieldWin::UpdateFont() {
SendMessage(m_hWnd, WM_SETFONT,
reinterpret_cast<WPARAM>(textfield_->font().hfont()), TRUE);
+ // Setting the font blows away any text color we've set, so reset it.
+ UpdateTextColor();
}
void NativeTextfieldWin::UpdateEnabled() {
diff --git a/views/controls/textfield/native_textfield_win.h b/views/controls/textfield/native_textfield_win.h
index e1e51d7..270411d 100644
--- a/views/controls/textfield/native_textfield_win.h
+++ b/views/controls/textfield/native_textfield_win.h
@@ -48,6 +48,7 @@ class NativeTextfieldWin
virtual void SelectAll();
virtual void ClearSelection();
virtual void UpdateBorder();
+ virtual void UpdateTextColor();
virtual void UpdateBackgroundColor();
virtual void UpdateReadOnly();
virtual void UpdateFont();
diff --git a/views/controls/textfield/native_textfield_wrapper.h b/views/controls/textfield/native_textfield_wrapper.h
index f11fc33a..14dea7f 100644
--- a/views/controls/textfield/native_textfield_wrapper.h
+++ b/views/controls/textfield/native_textfield_wrapper.h
@@ -45,6 +45,9 @@ class NativeTextfieldWrapper {
// by the Textfield.
virtual void UpdateBorder() = 0;
+ // Updates the text color used when painting the native text field.
+ virtual void UpdateTextColor() = 0;
+
// Updates the background color used when painting the native text field.
virtual void UpdateBackgroundColor() = 0;
diff --git a/views/controls/textfield/textfield.cc b/views/controls/textfield/textfield.cc
index 05fb018..c467831 100644
--- a/views/controls/textfield/textfield.cc
+++ b/views/controls/textfield/textfield.cc
@@ -39,7 +39,9 @@ Textfield::Textfield()
read_only_(false),
default_width_in_chars_(0),
draw_border_(true),
+ text_color_(SK_ColorBLACK),
background_color_(SK_ColorWHITE),
+ use_default_text_color_(true),
use_default_background_color_(true),
num_lines_(1),
initialized_(false) {
@@ -53,7 +55,9 @@ Textfield::Textfield(StyleFlags style)
read_only_(false),
default_width_in_chars_(0),
draw_border_(true),
+ text_color_(SK_ColorBLACK),
background_color_(SK_ColorWHITE),
+ use_default_text_color_(true),
use_default_background_color_(true),
num_lines_(1),
initialized_(false) {
@@ -75,6 +79,7 @@ void Textfield::SetReadOnly(bool read_only) {
read_only_ = read_only;
if (native_wrapper_) {
native_wrapper_->UpdateReadOnly();
+ native_wrapper_->UpdateTextColor();
native_wrapper_->UpdateBackgroundColor();
}
}
@@ -115,6 +120,19 @@ void Textfield::ClearSelection() const {
native_wrapper_->ClearSelection();
}
+void Textfield::SetTextColor(SkColor color) {
+ text_color_ = color;
+ use_default_text_color_ = false;
+ if (native_wrapper_)
+ native_wrapper_->UpdateTextColor();
+}
+
+void Textfield::UseDefaultTextColor() {
+ use_default_text_color_ = true;
+ if (native_wrapper_)
+ native_wrapper_->UpdateTextColor();
+}
+
void Textfield::SetBackgroundColor(SkColor color) {
background_color_ = color;
use_default_background_color_ = false;
@@ -244,6 +262,7 @@ void Textfield::ViewHierarchyChanged(bool is_add, View* parent, View* child) {
// TODO(beng): Move this initialization to NativeTextfieldWin once it
// subclasses NativeControlWin.
native_wrapper_->UpdateText();
+ native_wrapper_->UpdateTextColor();
native_wrapper_->UpdateBackgroundColor();
native_wrapper_->UpdateReadOnly();
native_wrapper_->UpdateFont();
diff --git a/views/controls/textfield/textfield.h b/views/controls/textfield/textfield.h
index 7bc5f68..b1f5259 100644
--- a/views/controls/textfield/textfield.h
+++ b/views/controls/textfield/textfield.h
@@ -135,6 +135,18 @@ class Textfield : public View {
// Accessor for |style_|.
StyleFlags style() const { return style_; }
+ // Gets/Sets the text color to be used when painting the Textfield.
+ // Call |UseDefaultTextColor| to return to the system default colors.
+ SkColor text_color() const { return text_color_; }
+ void SetTextColor(SkColor color);
+
+ // Gets/Sets whether the default text color should be used when painting the
+ // Textfield.
+ bool use_default_text_color() const {
+ return use_default_text_color_;
+ }
+ void UseDefaultTextColor();
+
// Gets/Sets the background color to be used when painting the Textfield.
// Call |UseDefaultBackgroundColor| to return to the system default colors.
SkColor background_color() const { return background_color_; }
@@ -227,6 +239,15 @@ class Textfield : public View {
// Whether the border is drawn.
bool draw_border_;
+ // The text color to be used when painting the Textfield, provided
+ // |use_default_text_color_| is set to false.
+ SkColor text_color_;
+
+ // When true, the system text color for Textfields is used when painting this
+ // Textfield. When false, the value of |text_color_| determines the
+ // Textfield's text color.
+ bool use_default_text_color_;
+
// The background color to be used when painting the Textfield, provided
// |use_default_background_color_| is set to false.
SkColor background_color_;