OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/native_textfield_views.h" | 5 #include "ui/views/controls/textfield/native_textfield_views.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/debug/trace_event.h" | 11 #include "base/debug/trace_event.h" |
12 #include "base/i18n/case_conversion.h" | 12 #include "base/i18n/case_conversion.h" |
13 #include "base/logging.h" | 13 #include "base/logging.h" |
14 #include "base/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
16 #include "grit/app_locale_settings.h" | |
17 #include "grit/ui_strings.h" | 16 #include "grit/ui_strings.h" |
18 #include "third_party/icu/source/common/unicode/uchar.h" | 17 #include "third_party/icu/source/common/unicode/uchar.h" |
19 #include "third_party/skia/include/core/SkColor.h" | 18 #include "third_party/skia/include/core/SkColor.h" |
20 #include "ui/base/clipboard/clipboard.h" | 19 #include "ui/base/clipboard/clipboard.h" |
21 #include "ui/base/dragdrop/drag_drop_types.h" | 20 #include "ui/base/dragdrop/drag_drop_types.h" |
22 #include "ui/base/dragdrop/drag_utils.h" | 21 #include "ui/base/dragdrop/drag_utils.h" |
23 #include "ui/base/events/event.h" | 22 #include "ui/base/events/event.h" |
24 #include "ui/base/l10n/l10n_util.h" | 23 #include "ui/base/l10n/l10n_util.h" |
25 #include "ui/base/range/range.h" | 24 #include "ui/base/range/range.h" |
26 #include "ui/base/ui_base_switches_util.h" | 25 #include "ui/base/ui_base_switches_util.h" |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 : textfield_(parent), | 74 : textfield_(parent), |
76 model_(new TextfieldViewsModel(this)), | 75 model_(new TextfieldViewsModel(this)), |
77 text_border_(new FocusableBorder()), | 76 text_border_(new FocusableBorder()), |
78 is_cursor_visible_(false), | 77 is_cursor_visible_(false), |
79 is_drop_cursor_visible_(false), | 78 is_drop_cursor_visible_(false), |
80 skip_input_method_cancel_composition_(false), | 79 skip_input_method_cancel_composition_(false), |
81 initiating_drag_(false), | 80 initiating_drag_(false), |
82 cursor_timer_(this), | 81 cursor_timer_(this), |
83 aggregated_clicks_(0) { | 82 aggregated_clicks_(0) { |
84 set_border(text_border_); | 83 set_border(text_border_); |
85 | 84 GetRenderText()->SetFontList(textfield_->font_list()); |
86 #if defined(OS_CHROMEOS) | |
87 GetRenderText()->SetFontList(gfx::FontList(l10n_util::GetStringUTF8( | |
88 IDS_UI_FONT_FAMILY_CROS))); | |
89 #else | |
90 GetRenderText()->SetFont(textfield_->font()); | |
91 #endif | |
92 | |
93 UpdateColorsFromTheme(GetNativeTheme()); | 85 UpdateColorsFromTheme(GetNativeTheme()); |
94 set_context_menu_controller(this); | 86 set_context_menu_controller(this); |
95 set_drag_controller(this); | 87 set_drag_controller(this); |
96 } | 88 } |
97 | 89 |
98 NativeTextfieldViews::~NativeTextfieldViews() { | 90 NativeTextfieldViews::~NativeTextfieldViews() { |
99 } | 91 } |
100 | 92 |
101 //////////////////////////////////////////////////////////////////////////////// | 93 //////////////////////////////////////////////////////////////////////////////// |
102 // NativeTextfieldViews, View overrides: | 94 // NativeTextfieldViews, View overrides: |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 set_background(Background::CreateSolidBackground(color)); | 560 set_background(Background::CreateSolidBackground(color)); |
569 GetRenderText()->set_background_is_transparent(SkColorGetA(color) != 0xFF); | 561 GetRenderText()->set_background_is_transparent(SkColorGetA(color) != 0xFF); |
570 SchedulePaint(); | 562 SchedulePaint(); |
571 } | 563 } |
572 | 564 |
573 void NativeTextfieldViews::UpdateReadOnly() { | 565 void NativeTextfieldViews::UpdateReadOnly() { |
574 OnTextInputTypeChanged(); | 566 OnTextInputTypeChanged(); |
575 } | 567 } |
576 | 568 |
577 void NativeTextfieldViews::UpdateFont() { | 569 void NativeTextfieldViews::UpdateFont() { |
578 #if defined(OS_CHROMEOS) | 570 GetRenderText()->SetFontList(textfield_->font_list()); |
579 // For ChromeOS, we support a pre-defined font list per locale. UpdateFont() | |
580 // only changes the font size, not the font family names. | |
581 GetRenderText()->SetFontSize(textfield_->font().GetFontSize()); | |
582 #else | |
583 GetRenderText()->SetFont(textfield_->font()); | |
584 #endif | |
585 OnCaretBoundsChanged(); | 571 OnCaretBoundsChanged(); |
586 } | 572 } |
587 | 573 |
588 void NativeTextfieldViews::UpdateIsObscured() { | 574 void NativeTextfieldViews::UpdateIsObscured() { |
589 GetRenderText()->SetObscured(textfield_->IsObscured()); | 575 GetRenderText()->SetObscured(textfield_->IsObscured()); |
590 OnCaretBoundsChanged(); | 576 OnCaretBoundsChanged(); |
591 SchedulePaint(); | 577 SchedulePaint(); |
592 OnTextInputTypeChanged(); | 578 OnTextInputTypeChanged(); |
593 } | 579 } |
594 | 580 |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 | 705 |
720 ui::TextInputClient* NativeTextfieldViews::GetTextInputClient() { | 706 ui::TextInputClient* NativeTextfieldViews::GetTextInputClient() { |
721 return textfield_->read_only() ? NULL : this; | 707 return textfield_->read_only() ? NULL : this; |
722 } | 708 } |
723 | 709 |
724 void NativeTextfieldViews::ClearEditHistory() { | 710 void NativeTextfieldViews::ClearEditHistory() { |
725 model_->ClearEditHistory(); | 711 model_->ClearEditHistory(); |
726 } | 712 } |
727 | 713 |
728 int NativeTextfieldViews::GetFontHeight() { | 714 int NativeTextfieldViews::GetFontHeight() { |
729 return GetRenderText()->GetFont().GetHeight(); | 715 return GetRenderText()->font_list().GetHeight(); |
730 } | 716 } |
731 | 717 |
732 int NativeTextfieldViews::GetTextfieldBaseline() const { | 718 int NativeTextfieldViews::GetTextfieldBaseline() const { |
733 return GetRenderText()->GetFont().GetBaseline(); | 719 return GetRenderText()->font_list().GetBaseline(); |
734 } | 720 } |
735 | 721 |
736 int NativeTextfieldViews::GetWidthNeededForText() const { | 722 int NativeTextfieldViews::GetWidthNeededForText() const { |
737 return GetRenderText()->GetContentWidth() + GetInsets().width(); | 723 return GetRenderText()->GetContentWidth() + GetInsets().width(); |
738 } | 724 } |
739 | 725 |
740 void NativeTextfieldViews::ExecuteTextCommand(int command_id) { | 726 void NativeTextfieldViews::ExecuteTextCommand(int command_id) { |
741 ExecuteCommand(command_id, 0); | 727 ExecuteCommand(command_id, 0); |
742 } | 728 } |
743 | 729 |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1159 | 1145 |
1160 // Draw the detached drop cursor that marks where the text will be dropped. | 1146 // Draw the detached drop cursor that marks where the text will be dropped. |
1161 if (is_drop_cursor_visible_) | 1147 if (is_drop_cursor_visible_) |
1162 GetRenderText()->DrawCursor(canvas, drop_cursor_position_); | 1148 GetRenderText()->DrawCursor(canvas, drop_cursor_position_); |
1163 | 1149 |
1164 // Draw placeholder text if needed. | 1150 // Draw placeholder text if needed. |
1165 if (model_->GetText().empty() && | 1151 if (model_->GetText().empty() && |
1166 !textfield_->placeholder_text().empty()) { | 1152 !textfield_->placeholder_text().empty()) { |
1167 canvas->DrawStringInt( | 1153 canvas->DrawStringInt( |
1168 textfield_->placeholder_text(), | 1154 textfield_->placeholder_text(), |
1169 GetRenderText()->GetFont(), | 1155 GetRenderText()->GetPrimaryFont(), |
1170 textfield_->placeholder_text_color(), | 1156 textfield_->placeholder_text_color(), |
1171 GetRenderText()->display_rect()); | 1157 GetRenderText()->display_rect()); |
1172 } | 1158 } |
1173 canvas->Restore(); | 1159 canvas->Restore(); |
1174 } | 1160 } |
1175 | 1161 |
1176 bool NativeTextfieldViews::HandleKeyEvent(const ui::KeyEvent& key_event) { | 1162 bool NativeTextfieldViews::HandleKeyEvent(const ui::KeyEvent& key_event) { |
1177 // TODO(oshima): Refactor and consolidate with ExecuteCommand. | 1163 // TODO(oshima): Refactor and consolidate with ExecuteCommand. |
1178 if (key_event.type() == ui::ET_KEY_PRESSED) { | 1164 if (key_event.type() == ui::ET_KEY_PRESSED) { |
1179 ui::KeyboardCode key_code = key_event.key_code(); | 1165 ui::KeyboardCode key_code = key_event.key_code(); |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1508 if (index != -1) { | 1494 if (index != -1) { |
1509 obscured_reveal_timer_.Start( | 1495 obscured_reveal_timer_.Start( |
1510 FROM_HERE, | 1496 FROM_HERE, |
1511 duration, | 1497 duration, |
1512 base::Bind(&NativeTextfieldViews::RevealObscuredChar, | 1498 base::Bind(&NativeTextfieldViews::RevealObscuredChar, |
1513 base::Unretained(this), -1, base::TimeDelta())); | 1499 base::Unretained(this), -1, base::TimeDelta())); |
1514 } | 1500 } |
1515 } | 1501 } |
1516 | 1502 |
1517 } // namespace views | 1503 } // namespace views |
OLD | NEW |