summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-11 08:38:41 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-11 08:38:41 +0000
commita15b4c39a9093e03f42fe3e8efa8db4ff8ad430b (patch)
tree4b7b3dc83182319e9aba0c6c4eb00d8794baa1b4 /ui
parent7f272b4bd2ca8b153c14c1d4bca0f869a62b2256 (diff)
downloadchromium_src-a15b4c39a9093e03f42fe3e8efa8db4ff8ad430b.zip
chromium_src-a15b4c39a9093e03f42fe3e8efa8db4ff8ad430b.tar.gz
chromium_src-a15b4c39a9093e03f42fe3e8efa8db4ff8ad430b.tar.bz2
requestAutocomplete: mark textfields as invalid when user tries to submit with blank fields
screenshot: http://imgur.com/OvXxG BUG=163516 Review URL: https://chromiumcodereview.appspot.com/11843002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@176283 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/views/controls/focusable_border.cc25
-rw-r--r--ui/views/controls/focusable_border.h12
-rw-r--r--ui/views/controls/textfield/native_textfield_views.cc9
-rw-r--r--ui/views/controls/textfield/native_textfield_views.h1
-rw-r--r--ui/views/controls/textfield/native_textfield_win.cc4
-rw-r--r--ui/views/controls/textfield/native_textfield_win.h1
-rw-r--r--ui/views/controls/textfield/native_textfield_wrapper.h3
-rw-r--r--ui/views/controls/textfield/textfield.cc17
-rw-r--r--ui/views/controls/textfield/textfield.h13
9 files changed, 80 insertions, 5 deletions
diff --git a/ui/views/controls/focusable_border.cc b/ui/views/controls/focusable_border.cc
index f0c5e3a..f062e96 100644
--- a/ui/views/controls/focusable_border.cc
+++ b/ui/views/controls/focusable_border.cc
@@ -24,7 +24,18 @@ namespace views {
FocusableBorder::FocusableBorder()
: has_focus_(false),
insets_(kTopInsetSize, kLeftInsetSize,
- kBottomInsetSize, kRightInsetSize) {
+ kBottomInsetSize, kRightInsetSize),
+ override_color_(SK_ColorWHITE),
+ use_default_color_(true) {
+}
+
+void FocusableBorder::SetColor(SkColor color) {
+ override_color_ = color;
+ use_default_color_ = false;
+}
+
+void FocusableBorder::UseDefaultColor() {
+ use_default_color_ = true;
}
void FocusableBorder::Paint(const View& view, gfx::Canvas* canvas) {
@@ -32,10 +43,14 @@ void FocusableBorder::Paint(const View& view, gfx::Canvas* canvas) {
path.addRect(gfx::RectToSkRect(view.GetLocalBounds()), SkPath::kCW_Direction);
SkPaint paint;
paint.setStyle(SkPaint::kStroke_Style);
- SkColor focus_color = view.GetNativeTheme()->GetSystemColor(
- has_focus_ ? ui::NativeTheme::kColorId_FocusedBorderColor
- : ui::NativeTheme::kColorId_UnfocusedBorderColor);
- paint.setColor(focus_color);
+ SkColor color = override_color_;
+ if (use_default_color_) {
+ color = view.GetNativeTheme()->GetSystemColor(
+ has_focus_ ? ui::NativeTheme::kColorId_FocusedBorderColor :
+ ui::NativeTheme::kColorId_UnfocusedBorderColor);
+ }
+
+ paint.setColor(color);
paint.setStrokeWidth(SkIntToScalar(2));
canvas->DrawPath(path, paint);
diff --git a/ui/views/controls/focusable_border.h b/ui/views/controls/focusable_border.h
index 255216d..e014770 100644
--- a/ui/views/controls/focusable_border.h
+++ b/ui/views/controls/focusable_border.h
@@ -30,6 +30,11 @@ class FocusableBorder : public Border {
has_focus_ = has_focus;
}
+ // Sets the color of this border.
+ void SetColor(SkColor color);
+ // Reverts the color of this border to the system default.
+ void UseDefaultColor();
+
// Overridden from Border:
virtual void Paint(const View& view, gfx::Canvas* canvas) OVERRIDE;
virtual gfx::Insets GetInsets() const OVERRIDE;
@@ -38,6 +43,13 @@ class FocusableBorder : public Border {
bool has_focus_;
gfx::Insets insets_;
+ // The color to paint the border when |use_default_color_| is false.
+ SkColor override_color_;
+
+ // Whether the system border color should be used. True unless SetColor has
+ // been called.
+ bool use_default_color_;
+
DISALLOW_COPY_AND_ASSIGN(FocusableBorder);
};
diff --git a/ui/views/controls/textfield/native_textfield_views.cc b/ui/views/controls/textfield/native_textfield_views.cc
index aa62cb5..af9cfa0 100644
--- a/ui/views/controls/textfield/native_textfield_views.cc
+++ b/ui/views/controls/textfield/native_textfield_views.cc
@@ -426,6 +426,15 @@ void NativeTextfieldViews::UpdateBorder() {
}
}
+void NativeTextfieldViews::UpdateBorderColor() {
+ if (textfield_->use_default_border_color())
+ text_border_->UseDefaultColor();
+ else
+ text_border_->SetColor(textfield_->border_color());
+
+ SchedulePaint();
+}
+
void NativeTextfieldViews::UpdateTextColor() {
gfx::StyleRange default_style(GetRenderText()->default_style());
default_style.foreground = textfield_->GetTextColor();
diff --git a/ui/views/controls/textfield/native_textfield_views.h b/ui/views/controls/textfield/native_textfield_views.h
index 104f881..df878a9 100644
--- a/ui/views/controls/textfield/native_textfield_views.h
+++ b/ui/views/controls/textfield/native_textfield_views.h
@@ -104,6 +104,7 @@ class VIEWS_EXPORT NativeTextfieldViews : public TouchSelectionClientView,
virtual void SelectAll(bool reversed) OVERRIDE;
virtual void ClearSelection() OVERRIDE;
virtual void UpdateBorder() OVERRIDE;
+ virtual void UpdateBorderColor() OVERRIDE;
virtual void UpdateTextColor() OVERRIDE;
virtual void UpdateBackgroundColor() OVERRIDE;
virtual void UpdateReadOnly() OVERRIDE;
diff --git a/ui/views/controls/textfield/native_textfield_win.cc b/ui/views/controls/textfield/native_textfield_win.cc
index 7566baf..b6fb41d 100644
--- a/ui/views/controls/textfield/native_textfield_win.cc
+++ b/ui/views/controls/textfield/native_textfield_win.cc
@@ -246,6 +246,10 @@ void NativeTextfieldWin::UpdateBorder() {
SWP_NOOWNERZORDER | SWP_NOSIZE);
}
+void NativeTextfieldWin::UpdateBorderColor() {
+ // TODO(estade): implement.
+}
+
void NativeTextfieldWin::UpdateTextColor() {
CHARFORMAT cf = {0};
cf.dwMask = CFM_COLOR;
diff --git a/ui/views/controls/textfield/native_textfield_win.h b/ui/views/controls/textfield/native_textfield_win.h
index d9b205f..eca2358 100644
--- a/ui/views/controls/textfield/native_textfield_win.h
+++ b/ui/views/controls/textfield/native_textfield_win.h
@@ -75,6 +75,7 @@ class NativeTextfieldWin
virtual void SelectAll(bool reversed) OVERRIDE;
virtual void ClearSelection() OVERRIDE;
virtual void UpdateBorder() OVERRIDE;
+ virtual void UpdateBorderColor() OVERRIDE;
virtual void UpdateTextColor() OVERRIDE;
virtual void UpdateBackgroundColor() OVERRIDE;
virtual void UpdateReadOnly() OVERRIDE;
diff --git a/ui/views/controls/textfield/native_textfield_wrapper.h b/ui/views/controls/textfield/native_textfield_wrapper.h
index aaaaa15..53e4c6c 100644
--- a/ui/views/controls/textfield/native_textfield_wrapper.h
+++ b/ui/views/controls/textfield/native_textfield_wrapper.h
@@ -66,6 +66,9 @@ class VIEWS_EXPORT NativeTextfieldWrapper {
// by the Textfield.
virtual void UpdateBorder() = 0;
+ // Updates the color of the border with the state desired by the Textfield.
+ virtual void UpdateBorderColor() = 0;
+
// Updates the text color used when painting the native text field.
virtual void UpdateTextColor() = 0;
diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc
index d353101..a01ad7a 100644
--- a/ui/views/controls/textfield/textfield.cc
+++ b/ui/views/controls/textfield/textfield.cc
@@ -66,6 +66,8 @@ Textfield::Textfield()
use_default_text_color_(true),
background_color_(SK_ColorWHITE),
use_default_background_color_(true),
+ border_color_(SK_ColorWHITE),
+ use_default_border_color_(true),
initialized_(false),
horizontal_margins_were_set_(false),
vertical_margins_were_set_(false),
@@ -278,6 +280,20 @@ void Textfield::RemoveBorder() {
native_wrapper_->UpdateBorder();
}
+void Textfield::SetBorderColor(SkColor color) {
+ border_color_ = color;
+ use_default_border_color_ = false;
+ native_wrapper_->UpdateBorderColor();
+}
+
+void Textfield::UseDefaultBorderColor() {
+ if (use_default_border_color_)
+ return;
+
+ use_default_border_color_ = true;
+ native_wrapper_->UpdateBorderColor();
+}
+
bool Textfield::GetHorizontalMargins(int* left, int* right) {
if (!horizontal_margins_were_set_)
return false;
@@ -303,6 +319,7 @@ void Textfield::UpdateAllProperties() {
native_wrapper_->UpdateFont();
native_wrapper_->UpdateEnabled();
native_wrapper_->UpdateBorder();
+ native_wrapper_->UpdateBorderColor();
native_wrapper_->UpdateIsObscured();
native_wrapper_->UpdateHorizontalMargins();
native_wrapper_->UpdateVerticalMargins();
diff --git a/ui/views/controls/textfield/textfield.h b/ui/views/controls/textfield/textfield.h
index 1831073..57509ea 100644
--- a/ui/views/controls/textfield/textfield.h
+++ b/ui/views/controls/textfield/textfield.h
@@ -145,6 +145,13 @@ class VIEWS_EXPORT Textfield : public View {
bool draw_border() const { return draw_border_; }
void RemoveBorder();
+ // Sets the border color (if one is in use).
+ void SetBorderColor(SkColor color);
+ // Reverts the textfield to the system default border color.
+ void UseDefaultBorderColor();
+ SkColor border_color() const { return border_color_; }
+ bool use_default_border_color() const { return use_default_border_color_; }
+
// Sets the text to display when empty.
void set_placeholder_text(const string16& text) {
placeholder_text_ = text;
@@ -287,6 +294,12 @@ class VIEWS_EXPORT Textfield : public View {
// Should we use the system background color instead of |background_color_|?
bool use_default_background_color_;
+ // Border color. Only used if |use_default_border_color_| is false.
+ SkColor border_color_;
+
+ // Should we use the system border color instead of |border_color_|?
+ bool use_default_border_color_;
+
// TODO(beng): remove this once NativeTextfieldWin subclasses
// NativeControlWin.
bool initialized_;