diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-11 08:38:41 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-11 08:38:41 +0000 |
commit | a15b4c39a9093e03f42fe3e8efa8db4ff8ad430b (patch) | |
tree | 4b7b3dc83182319e9aba0c6c4eb00d8794baa1b4 /ui/views | |
parent | 7f272b4bd2ca8b153c14c1d4bca0f869a62b2256 (diff) | |
download | chromium_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/views')
-rw-r--r-- | ui/views/controls/focusable_border.cc | 25 | ||||
-rw-r--r-- | ui/views/controls/focusable_border.h | 12 | ||||
-rw-r--r-- | ui/views/controls/textfield/native_textfield_views.cc | 9 | ||||
-rw-r--r-- | ui/views/controls/textfield/native_textfield_views.h | 1 | ||||
-rw-r--r-- | ui/views/controls/textfield/native_textfield_win.cc | 4 | ||||
-rw-r--r-- | ui/views/controls/textfield/native_textfield_win.h | 1 | ||||
-rw-r--r-- | ui/views/controls/textfield/native_textfield_wrapper.h | 3 | ||||
-rw-r--r-- | ui/views/controls/textfield/textfield.cc | 17 | ||||
-rw-r--r-- | ui/views/controls/textfield/textfield.h | 13 |
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_; |