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

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

Issue 19666006: Supports FontList in Textfield. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removes ResourceBundle::Delegate::GetFontList. Created 7 years, 4 months 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/strings/string_util.h" 10 #include "base/strings/string_util.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/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/resource/resource_bundle.h"
17 #include "ui/base/ui_base_switches.h" 18 #include "ui/base/ui_base_switches.h"
18 #include "ui/base/ui_base_switches_util.h" 19 #include "ui/base/ui_base_switches_util.h"
19 #include "ui/gfx/insets.h" 20 #include "ui/gfx/insets.h"
20 #include "ui/gfx/selection_model.h" 21 #include "ui/gfx/selection_model.h"
21 #include "ui/native_theme/native_theme.h" 22 #include "ui/native_theme/native_theme.h"
22 #include "ui/views/controls/native/native_view_host.h" 23 #include "ui/views/controls/native/native_view_host.h"
23 #include "ui/views/controls/textfield/native_textfield_views.h" 24 #include "ui/views/controls/textfield/native_textfield_views.h"
24 #include "ui/views/controls/textfield/native_textfield_wrapper.h" 25 #include "ui/views/controls/textfield/native_textfield_wrapper.h"
25 #include "ui/views/controls/textfield/textfield_controller.h" 26 #include "ui/views/controls/textfield/textfield_controller.h"
26 #include "ui/views/views_delegate.h" 27 #include "ui/views/views_delegate.h"
27 #include "ui/views/widget/widget.h" 28 #include "ui/views/widget/widget.h"
28 29
29 #if defined(OS_WIN) 30 #if defined(OS_WIN)
30 #include "base/win/metro.h" 31 #include "base/win/metro.h"
31 #include "base/win/win_util.h" 32 #include "base/win/win_util.h"
32 // TODO(beng): this should be removed when the OS_WIN hack from 33 // TODO(beng): this should be removed when the OS_WIN hack from
33 // ViewHierarchyChanged is removed. 34 // ViewHierarchyChanged is removed.
34 #include "ui/views/controls/textfield/native_textfield_win.h" 35 #include "ui/views/controls/textfield/native_textfield_win.h"
35 #endif 36 #endif
36 37
37 namespace { 38 namespace {
38 39
39 // Default placeholder text color. 40 // Default placeholder text color.
40 const SkColor kDefaultPlaceholderTextColor = SK_ColorLTGRAY; 41 const SkColor kDefaultPlaceholderTextColor = SK_ColorLTGRAY;
41 42
43 gfx::FontList GetDefaultFontList() {
44 return ResourceBundle::GetSharedInstance().GetFontList(
45 ResourceBundle::BaseFont);
46 }
47
42 } // namespace 48 } // namespace
43 49
44 namespace views { 50 namespace views {
45 51
46 ///////////////////////////////////////////////////////////////////////////// 52 /////////////////////////////////////////////////////////////////////////////
47 // Textfield 53 // Textfield
48 54
49 // static 55 // static
50 const char Textfield::kViewClassName[] = "Textfield"; 56 const char Textfield::kViewClassName[] = "Textfield";
51 57
(...skipping 20 matching lines...) Expand all
72 if (!loaded_msftedit_dll) 78 if (!loaded_msftedit_dll)
73 return true; 79 return true;
74 #endif 80 #endif
75 return true; 81 return true;
76 } 82 }
77 83
78 Textfield::Textfield() 84 Textfield::Textfield()
79 : native_wrapper_(NULL), 85 : native_wrapper_(NULL),
80 controller_(NULL), 86 controller_(NULL),
81 style_(STYLE_DEFAULT), 87 style_(STYLE_DEFAULT),
88 font_list_(GetDefaultFontList()),
82 read_only_(false), 89 read_only_(false),
83 default_width_in_chars_(0), 90 default_width_in_chars_(0),
84 draw_border_(true), 91 draw_border_(true),
85 text_color_(SK_ColorBLACK), 92 text_color_(SK_ColorBLACK),
86 use_default_text_color_(true), 93 use_default_text_color_(true),
87 background_color_(SK_ColorWHITE), 94 background_color_(SK_ColorWHITE),
88 use_default_background_color_(true), 95 use_default_background_color_(true),
89 horizontal_margins_were_set_(false), 96 horizontal_margins_were_set_(false),
90 vertical_margins_were_set_(false), 97 vertical_margins_were_set_(false),
91 vertical_alignment_(gfx::ALIGN_VCENTER), 98 vertical_alignment_(gfx::ALIGN_VCENTER),
92 placeholder_text_color_(kDefaultPlaceholderTextColor), 99 placeholder_text_color_(kDefaultPlaceholderTextColor),
93 text_input_type_(ui::TEXT_INPUT_TYPE_TEXT) { 100 text_input_type_(ui::TEXT_INPUT_TYPE_TEXT) {
94 set_focusable(true); 101 set_focusable(true);
95 102
96 if (ViewsDelegate::views_delegate) { 103 if (ViewsDelegate::views_delegate) {
97 obscured_reveal_duration_ = ViewsDelegate::views_delegate-> 104 obscured_reveal_duration_ = ViewsDelegate::views_delegate->
98 GetDefaultTextfieldObscuredRevealDuration(); 105 GetDefaultTextfieldObscuredRevealDuration();
99 } 106 }
100 } 107 }
101 108
102 Textfield::Textfield(StyleFlags style) 109 Textfield::Textfield(StyleFlags style)
103 : native_wrapper_(NULL), 110 : native_wrapper_(NULL),
104 controller_(NULL), 111 controller_(NULL),
105 style_(style), 112 style_(style),
113 font_list_(GetDefaultFontList()),
106 read_only_(false), 114 read_only_(false),
107 default_width_in_chars_(0), 115 default_width_in_chars_(0),
108 draw_border_(true), 116 draw_border_(true),
109 text_color_(SK_ColorBLACK), 117 text_color_(SK_ColorBLACK),
110 use_default_text_color_(true), 118 use_default_text_color_(true),
111 background_color_(SK_ColorWHITE), 119 background_color_(SK_ColorWHITE),
112 use_default_background_color_(true), 120 use_default_background_color_(true),
113 horizontal_margins_were_set_(false), 121 horizontal_margins_were_set_(false),
114 vertical_margins_were_set_(false), 122 vertical_margins_were_set_(false),
115 vertical_alignment_(gfx::ALIGN_VCENTER), 123 vertical_alignment_(gfx::ALIGN_VCENTER),
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 271
264 bool Textfield::GetCursorEnabled() const { 272 bool Textfield::GetCursorEnabled() const {
265 return native_wrapper_ && native_wrapper_->GetCursorEnabled(); 273 return native_wrapper_ && native_wrapper_->GetCursorEnabled();
266 } 274 }
267 275
268 void Textfield::SetCursorEnabled(bool enabled) { 276 void Textfield::SetCursorEnabled(bool enabled) {
269 if (native_wrapper_) 277 if (native_wrapper_)
270 native_wrapper_->SetCursorEnabled(enabled); 278 native_wrapper_->SetCursorEnabled(enabled);
271 } 279 }
272 280
273 void Textfield::SetFont(const gfx::Font& font) { 281 void Textfield::SetFontList(const gfx::FontList& font_list) {
274 font_ = font; 282 font_list_ = font_list;
275 if (native_wrapper_) 283 if (native_wrapper_)
276 native_wrapper_->UpdateFont(); 284 native_wrapper_->UpdateFont();
277 PreferredSizeChanged(); 285 PreferredSizeChanged();
278 } 286 }
279 287
288 const gfx::Font& Textfield::GetPrimaryFont() const {
289 return font_list_.GetPrimaryFont();
290 }
291
292 void Textfield::SetFont(const gfx::Font& font) {
293 SetFontList(gfx::FontList(font));
294 }
295
280 void Textfield::SetHorizontalMargins(int left, int right) { 296 void Textfield::SetHorizontalMargins(int left, int right) {
281 margins_.Set(margins_.top(), left, margins_.bottom(), right); 297 margins_.Set(margins_.top(), left, margins_.bottom(), right);
282 horizontal_margins_were_set_ = true; 298 horizontal_margins_were_set_ = true;
283 if (native_wrapper_) 299 if (native_wrapper_)
284 native_wrapper_->UpdateHorizontalMargins(); 300 native_wrapper_->UpdateHorizontalMargins();
285 PreferredSizeChanged(); 301 PreferredSizeChanged();
286 } 302 }
287 303
288 void Textfield::SetVerticalMargins(int top, int bottom) { 304 void Textfield::SetVerticalMargins(int top, int bottom) {
289 margins_.Set(top, margins_.left(), bottom, margins_.right()); 305 margins_.Set(top, margins_.left(), bottom, margins_.right());
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 void Textfield::Layout() { 433 void Textfield::Layout() {
418 if (native_wrapper_) { 434 if (native_wrapper_) {
419 native_wrapper_->GetView()->SetBoundsRect(GetContentsBounds()); 435 native_wrapper_->GetView()->SetBoundsRect(GetContentsBounds());
420 native_wrapper_->GetView()->Layout(); 436 native_wrapper_->GetView()->Layout();
421 } 437 }
422 } 438 }
423 439
424 int Textfield::GetBaseline() const { 440 int Textfield::GetBaseline() const {
425 gfx::Insets insets = GetTextInsets(); 441 gfx::Insets insets = GetTextInsets();
426 const int baseline = native_wrapper_ ? 442 const int baseline = native_wrapper_ ?
427 native_wrapper_->GetTextfieldBaseline() : font_.GetBaseline(); 443 native_wrapper_->GetTextfieldBaseline() : font_list_.GetBaseline();
428 return insets.top() + baseline; 444 return insets.top() + baseline;
429 } 445 }
430 446
431 gfx::Size Textfield::GetPreferredSize() { 447 gfx::Size Textfield::GetPreferredSize() {
432 gfx::Insets insets = GetTextInsets(); 448 gfx::Insets insets = GetTextInsets();
433 449
434 // For NativeTextfieldViews, we might use a pre-defined font list (defined in
435 // IDS_UI_FONT_FAMILY_CROS) as the fonts to render text. The fonts in the
436 // list might be different (in name or in size) from |font_|, so we need to
437 // use GetFontHeight() to get the height of the first font in the list to
438 // guide textfield's height.
439 const int font_height = native_wrapper_ ? native_wrapper_->GetFontHeight() : 450 const int font_height = native_wrapper_ ? native_wrapper_->GetFontHeight() :
440 font_.GetHeight(); 451 font_list_.GetHeight();
441 return gfx::Size(font_.GetExpectedTextWidth(default_width_in_chars_) + 452 return gfx::Size(
442 insets.width(), font_height + insets.height()); 453 GetPrimaryFont().GetExpectedTextWidth(default_width_in_chars_)
454 + insets.width(),
455 font_height + insets.height());
443 } 456 }
444 457
445 void Textfield::AboutToRequestFocusFromTabTraversal(bool reverse) { 458 void Textfield::AboutToRequestFocusFromTabTraversal(bool reverse) {
446 SelectAll(false); 459 SelectAll(false);
447 } 460 }
448 461
449 bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) { 462 bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) {
450 // Skip any accelerator handling of backspace; textfields handle this key. 463 // Skip any accelerator handling of backspace; textfields handle this key.
451 // Also skip processing of [Alt]+<num-pad digit> Unicode alt key codes. 464 // Also skip processing of [Alt]+<num-pad digit> Unicode alt key codes.
452 return e.key_code() == ui::VKEY_BACK || e.IsUnicodeKeyCode(); 465 return e.key_code() == ui::VKEY_BACK || e.IsUnicodeKeyCode();
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 NativeTextfieldWrapper* NativeTextfieldWrapper::CreateWrapper( 569 NativeTextfieldWrapper* NativeTextfieldWrapper::CreateWrapper(
557 Textfield* field) { 570 Textfield* field) {
558 #if defined(OS_WIN) && !defined(USE_AURA) 571 #if defined(OS_WIN) && !defined(USE_AURA)
559 if (!Textfield::IsViewsTextfieldEnabled()) 572 if (!Textfield::IsViewsTextfieldEnabled())
560 return new NativeTextfieldWin(field); 573 return new NativeTextfieldWin(field);
561 #endif 574 #endif
562 return new NativeTextfieldViews(field); 575 return new NativeTextfieldViews(field);
563 } 576 }
564 577
565 } // namespace views 578 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698