Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(233)

Side by Side Diff: ui/views/controls/textfield/textfield.cc

Issue 11421204: Use native theme colors for textfields; etc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync and rebase, add a blank line between includes. Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/controls/textfield/textfield.h" 5 #include "ui/views/controls/textfield/textfield.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "base/utf_string_conversions.h" 11 #include "base/utf_string_conversions.h"
12 #include "ui/base/accessibility/accessible_view_state.h" 12 #include "ui/base/accessibility/accessible_view_state.h"
13 #include "ui/base/events/event.h" 13 #include "ui/base/events/event.h"
14 #include "ui/base/ime/text_input_type.h" 14 #include "ui/base/ime/text_input_type.h"
15 #include "ui/base/keycodes/keyboard_codes.h" 15 #include "ui/base/keycodes/keyboard_codes.h"
16 #include "ui/base/range/range.h" 16 #include "ui/base/range/range.h"
17 #include "ui/base/ui_base_switches.h" 17 #include "ui/base/ui_base_switches.h"
18 #include "ui/gfx/insets.h" 18 #include "ui/gfx/insets.h"
19 #include "ui/gfx/selection_model.h" 19 #include "ui/gfx/selection_model.h"
20 #include "ui/native_theme/native_theme.h"
20 #include "ui/views/controls/native/native_view_host.h" 21 #include "ui/views/controls/native/native_view_host.h"
21 #include "ui/views/controls/textfield/native_textfield_views.h" 22 #include "ui/views/controls/textfield/native_textfield_views.h"
22 #include "ui/views/controls/textfield/native_textfield_wrapper.h" 23 #include "ui/views/controls/textfield/native_textfield_wrapper.h"
23 #include "ui/views/controls/textfield/textfield_controller.h" 24 #include "ui/views/controls/textfield/textfield_controller.h"
24 #include "ui/views/widget/widget.h" 25 #include "ui/views/widget/widget.h"
25 26
26 #if defined(OS_WIN) 27 #if defined(OS_WIN)
27 #include "base/win/win_util.h" 28 #include "base/win/win_util.h"
28 // TODO(beng): this should be removed when the OS_WIN hack from 29 // TODO(beng): this should be removed when the OS_WIN hack from
29 // ViewHierarchyChanged is removed. 30 // ViewHierarchyChanged is removed.
(...skipping 28 matching lines...) Expand all
58 : native_wrapper_(NULL), 59 : native_wrapper_(NULL),
59 controller_(NULL), 60 controller_(NULL),
60 style_(STYLE_DEFAULT), 61 style_(STYLE_DEFAULT),
61 read_only_(false), 62 read_only_(false),
62 default_width_in_chars_(0), 63 default_width_in_chars_(0),
63 draw_border_(true), 64 draw_border_(true),
64 text_color_(SK_ColorBLACK), 65 text_color_(SK_ColorBLACK),
65 use_default_text_color_(true), 66 use_default_text_color_(true),
66 background_color_(SK_ColorWHITE), 67 background_color_(SK_ColorWHITE),
67 use_default_background_color_(true), 68 use_default_background_color_(true),
68 cursor_color_(SK_ColorBLACK),
69 use_default_cursor_color_(true),
70 initialized_(false), 69 initialized_(false),
71 horizontal_margins_were_set_(false), 70 horizontal_margins_were_set_(false),
72 vertical_margins_were_set_(false), 71 vertical_margins_were_set_(false),
73 placeholder_text_color_(kDefaultPlaceholderTextColor), 72 placeholder_text_color_(kDefaultPlaceholderTextColor),
74 text_input_type_(ui::TEXT_INPUT_TYPE_TEXT) { 73 text_input_type_(ui::TEXT_INPUT_TYPE_TEXT) {
75 set_focusable(true); 74 set_focusable(true);
76 } 75 }
77 76
78 Textfield::Textfield(StyleFlags style) 77 Textfield::Textfield(StyleFlags style)
79 : native_wrapper_(NULL), 78 : native_wrapper_(NULL),
80 controller_(NULL), 79 controller_(NULL),
81 style_(style), 80 style_(style),
82 read_only_(false), 81 read_only_(false),
83 default_width_in_chars_(0), 82 default_width_in_chars_(0),
84 draw_border_(true), 83 draw_border_(true),
85 text_color_(SK_ColorBLACK), 84 text_color_(SK_ColorBLACK),
86 use_default_text_color_(true), 85 use_default_text_color_(true),
87 background_color_(SK_ColorWHITE), 86 background_color_(SK_ColorWHITE),
88 use_default_background_color_(true), 87 use_default_background_color_(true),
89 cursor_color_(SK_ColorBLACK),
90 use_default_cursor_color_(true),
91 initialized_(false), 88 initialized_(false),
92 horizontal_margins_were_set_(false), 89 horizontal_margins_were_set_(false),
93 vertical_margins_were_set_(false), 90 vertical_margins_were_set_(false),
94 placeholder_text_color_(kDefaultPlaceholderTextColor), 91 placeholder_text_color_(kDefaultPlaceholderTextColor),
95 text_input_type_(ui::TEXT_INPUT_TYPE_TEXT) { 92 text_input_type_(ui::TEXT_INPUT_TYPE_TEXT) {
96 set_focusable(true); 93 set_focusable(true);
97 if (IsObscured()) 94 if (IsObscured())
98 SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); 95 SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD);
99 } 96 }
100 97
101 Textfield::~Textfield() { 98 Textfield::~Textfield() {
102 } 99 }
103 100
104 void Textfield::SetController(TextfieldController* controller) { 101 void Textfield::SetController(TextfieldController* controller) {
105 controller_ = controller; 102 controller_ = controller;
106 } 103 }
107 104
108 TextfieldController* Textfield::GetController() const { 105 TextfieldController* Textfield::GetController() const {
109 return controller_; 106 return controller_;
110 } 107 }
111 108
112 void Textfield::SetReadOnly(bool read_only) { 109 void Textfield::SetReadOnly(bool read_only) {
113 read_only_ = read_only; 110 read_only_ = read_only;
114 set_focusable(!read_only); 111 set_focusable(!read_only);
115 if (native_wrapper_) { 112 if (native_wrapper_) {
116 native_wrapper_->UpdateReadOnly(); 113 native_wrapper_->UpdateReadOnly();
117 native_wrapper_->UpdateTextColor(); 114 native_wrapper_->UpdateTextColor();
118 native_wrapper_->UpdateBackgroundColor(); 115 native_wrapper_->UpdateBackgroundColor();
119 native_wrapper_->UpdateCursorColor();
120 } 116 }
121 } 117 }
122 118
123 bool Textfield::IsObscured() const { 119 bool Textfield::IsObscured() const {
124 return style_ & STYLE_OBSCURED; 120 return style_ & STYLE_OBSCURED;
125 } 121 }
126 122
127 void Textfield::SetObscured(bool obscured) { 123 void Textfield::SetObscured(bool obscured) {
128 if (obscured) { 124 if (obscured) {
129 style_ = static_cast<StyleFlags>(style_ | STYLE_OBSCURED); 125 style_ = static_cast<StyleFlags>(style_ | STYLE_OBSCURED);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 native_wrapper_->ClearSelection(); 186 native_wrapper_->ClearSelection();
191 } 187 }
192 188
193 bool Textfield::HasSelection() const { 189 bool Textfield::HasSelection() const {
194 ui::Range range; 190 ui::Range range;
195 if (native_wrapper_) 191 if (native_wrapper_)
196 native_wrapper_->GetSelectedRange(&range); 192 native_wrapper_->GetSelectedRange(&range);
197 return !range.is_empty(); 193 return !range.is_empty();
198 } 194 }
199 195
196 SkColor Textfield::GetTextColor() const {
197 if (!use_default_text_color_)
198 return text_color_;
199
200 return GetNativeTheme()->GetSystemColor(read_only() ?
201 ui::NativeTheme::kColorId_TextfieldReadOnlyColor :
202 ui::NativeTheme::kColorId_TextfieldDefaultColor);
203 }
204
200 void Textfield::SetTextColor(SkColor color) { 205 void Textfield::SetTextColor(SkColor color) {
201 text_color_ = color; 206 text_color_ = color;
202 use_default_text_color_ = false; 207 use_default_text_color_ = false;
203 if (native_wrapper_) 208 if (native_wrapper_)
204 native_wrapper_->UpdateTextColor(); 209 native_wrapper_->UpdateTextColor();
205 } 210 }
206 211
207 void Textfield::UseDefaultTextColor() { 212 void Textfield::UseDefaultTextColor() {
208 use_default_text_color_ = true; 213 use_default_text_color_ = true;
209 if (native_wrapper_) 214 if (native_wrapper_)
210 native_wrapper_->UpdateTextColor(); 215 native_wrapper_->UpdateTextColor();
211 } 216 }
212 217
218 SkColor Textfield::GetBackgroundColor() const {
219 if (!use_default_background_color_)
220 return background_color_;
221
222 return GetNativeTheme()->GetSystemColor(read_only() ?
223 ui::NativeTheme::kColorId_TextfieldReadOnlyBackground :
224 ui::NativeTheme::kColorId_TextfieldDefaultBackground);
225 }
226
213 void Textfield::SetBackgroundColor(SkColor color) { 227 void Textfield::SetBackgroundColor(SkColor color) {
214 background_color_ = color; 228 background_color_ = color;
215 use_default_background_color_ = false; 229 use_default_background_color_ = false;
216 if (native_wrapper_) 230 if (native_wrapper_)
217 native_wrapper_->UpdateBackgroundColor(); 231 native_wrapper_->UpdateBackgroundColor();
218 } 232 }
219 233
220 void Textfield::UseDefaultBackgroundColor() { 234 void Textfield::UseDefaultBackgroundColor() {
221 use_default_background_color_ = true; 235 use_default_background_color_ = true;
222 if (native_wrapper_) 236 if (native_wrapper_)
223 native_wrapper_->UpdateBackgroundColor(); 237 native_wrapper_->UpdateBackgroundColor();
224 } 238 }
225 239
226 void Textfield::SetCursorColor(SkColor color) { 240 bool Textfield::GetCursorEnabled() const {
227 cursor_color_ = color; 241 return native_wrapper_ && native_wrapper_->GetCursorEnabled();
228 use_default_cursor_color_ = false;
229 if (native_wrapper_)
230 native_wrapper_->UpdateCursorColor();
231 } 242 }
232 243
233 void Textfield::UseDefaultCursorColor() { 244 void Textfield::SetCursorEnabled(bool enabled) {
234 use_default_cursor_color_ = true;
235 if (native_wrapper_) 245 if (native_wrapper_)
236 native_wrapper_->UpdateCursorColor(); 246 native_wrapper_->SetCursorEnabled(enabled);
237 } 247 }
238 248
239 void Textfield::SetFont(const gfx::Font& font) { 249 void Textfield::SetFont(const gfx::Font& font) {
240 font_ = font; 250 font_ = font;
241 if (native_wrapper_) 251 if (native_wrapper_)
242 native_wrapper_->UpdateFont(); 252 native_wrapper_->UpdateFont();
243 PreferredSizeChanged(); 253 PreferredSizeChanged();
244 } 254 }
245 255
246 void Textfield::SetHorizontalMargins(int left, int right) { 256 void Textfield::SetHorizontalMargins(int left, int right) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 *top = margins_.top(); 292 *top = margins_.top();
283 *bottom = margins_.bottom(); 293 *bottom = margins_.bottom();
284 return true; 294 return true;
285 } 295 }
286 296
287 void Textfield::UpdateAllProperties() { 297 void Textfield::UpdateAllProperties() {
288 if (native_wrapper_) { 298 if (native_wrapper_) {
289 native_wrapper_->UpdateText(); 299 native_wrapper_->UpdateText();
290 native_wrapper_->UpdateTextColor(); 300 native_wrapper_->UpdateTextColor();
291 native_wrapper_->UpdateBackgroundColor(); 301 native_wrapper_->UpdateBackgroundColor();
292 native_wrapper_->UpdateCursorColor();
293 native_wrapper_->UpdateReadOnly(); 302 native_wrapper_->UpdateReadOnly();
294 native_wrapper_->UpdateFont(); 303 native_wrapper_->UpdateFont();
295 native_wrapper_->UpdateEnabled(); 304 native_wrapper_->UpdateEnabled();
296 native_wrapper_->UpdateBorder(); 305 native_wrapper_->UpdateBorder();
297 native_wrapper_->UpdateIsObscured(); 306 native_wrapper_->UpdateIsObscured();
298 native_wrapper_->UpdateHorizontalMargins(); 307 native_wrapper_->UpdateHorizontalMargins();
299 native_wrapper_->UpdateVerticalMargins(); 308 native_wrapper_->UpdateVerticalMargins();
300 } 309 }
301 } 310 }
302 311
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 NativeTextfieldWrapper* NativeTextfieldWrapper::CreateWrapper( 528 NativeTextfieldWrapper* NativeTextfieldWrapper::CreateWrapper(
520 Textfield* field) { 529 Textfield* field) {
521 #if defined(OS_WIN) && !defined(USE_AURA) 530 #if defined(OS_WIN) && !defined(USE_AURA)
522 if (!Textfield::IsViewsTextfieldEnabled()) 531 if (!Textfield::IsViewsTextfieldEnabled())
523 return new NativeTextfieldWin(field); 532 return new NativeTextfieldWin(field);
524 #endif 533 #endif
525 return new NativeTextfieldViews(field); 534 return new NativeTextfieldViews(field);
526 } 535 }
527 536
528 } // namespace views 537 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/controls/textfield/textfield.h ('k') | ui/views/controls/textfield/textfield_views_model.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698