| OLD | NEW |
| 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/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.h" | 14 #include "base/message_loop.h" |
| 15 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
| 16 #include "grit/app_locale_settings.h" | 16 #include "grit/app_locale_settings.h" |
| 17 #include "grit/ui_strings.h" | 17 #include "grit/ui_strings.h" |
| 18 #include "third_party/skia/include/core/SkColor.h" | 18 #include "third_party/skia/include/core/SkColor.h" |
| 19 #include "ui/base/clipboard/clipboard.h" | 19 #include "ui/base/clipboard/clipboard.h" |
| 20 #include "ui/base/dragdrop/drag_drop_types.h" | 20 #include "ui/base/dragdrop/drag_drop_types.h" |
| 21 #include "ui/base/event.h" |
| 21 #include "ui/base/l10n/l10n_util.h" | 22 #include "ui/base/l10n/l10n_util.h" |
| 22 #include "ui/base/range/range.h" | 23 #include "ui/base/range/range.h" |
| 23 #include "ui/compositor/layer.h" | 24 #include "ui/compositor/layer.h" |
| 24 #include "ui/gfx/canvas.h" | 25 #include "ui/gfx/canvas.h" |
| 25 #include "ui/gfx/insets.h" | 26 #include "ui/gfx/insets.h" |
| 26 #include "ui/gfx/render_text.h" | 27 #include "ui/gfx/render_text.h" |
| 27 #include "ui/gfx/text_constants.h" | 28 #include "ui/gfx/text_constants.h" |
| 28 #include "ui/views/background.h" | 29 #include "ui/views/background.h" |
| 29 #include "ui/views/border.h" | 30 #include "ui/views/border.h" |
| 30 #include "ui/views/controls/focusable_border.h" | 31 #include "ui/views/controls/focusable_border.h" |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 if (MoveCursorTo(event.location(), true)) | 174 if (MoveCursorTo(event.location(), true)) |
| 174 SchedulePaint(); | 175 SchedulePaint(); |
| 175 OnAfterUserAction(); | 176 OnAfterUserAction(); |
| 176 return ui::GESTURE_STATUS_CONSUMED; | 177 return ui::GESTURE_STATUS_CONSUMED; |
| 177 default: | 178 default: |
| 178 break; | 179 break; |
| 179 } | 180 } |
| 180 return TouchSelectionClientView::OnGestureEvent(event); | 181 return TouchSelectionClientView::OnGestureEvent(event); |
| 181 } | 182 } |
| 182 | 183 |
| 183 bool NativeTextfieldViews::OnKeyPressed(const KeyEvent& event) { | 184 bool NativeTextfieldViews::OnKeyPressed(const ui::KeyEvent& event) { |
| 184 // OnKeyPressed/OnKeyReleased/OnFocus/OnBlur will never be invoked on | 185 // OnKeyPressed/OnKeyReleased/OnFocus/OnBlur will never be invoked on |
| 185 // NativeTextfieldViews as it will never gain focus. | 186 // NativeTextfieldViews as it will never gain focus. |
| 186 NOTREACHED(); | 187 NOTREACHED(); |
| 187 return false; | 188 return false; |
| 188 } | 189 } |
| 189 | 190 |
| 190 bool NativeTextfieldViews::OnKeyReleased(const KeyEvent& event) { | 191 bool NativeTextfieldViews::OnKeyReleased(const ui::KeyEvent& event) { |
| 191 NOTREACHED(); | 192 NOTREACHED(); |
| 192 return false; | 193 return false; |
| 193 } | 194 } |
| 194 | 195 |
| 195 bool NativeTextfieldViews::GetDropFormats( | 196 bool NativeTextfieldViews::GetDropFormats( |
| 196 int* formats, | 197 int* formats, |
| 197 std::set<OSExchangeData::CustomFormat>* custom_formats) { | 198 std::set<OSExchangeData::CustomFormat>* custom_formats) { |
| 198 if (!textfield_->enabled() || textfield_->read_only()) | 199 if (!textfield_->enabled() || textfield_->read_only()) |
| 199 return false; | 200 return false; |
| 200 // TODO(msw): Can we support URL, FILENAME, etc.? | 201 // TODO(msw): Can we support URL, FILENAME, etc.? |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 const gfx::SelectionModel& sel) { | 516 const gfx::SelectionModel& sel) { |
| 516 model_->SelectSelectionModel(sel); | 517 model_->SelectSelectionModel(sel); |
| 517 OnCaretBoundsChanged(); | 518 OnCaretBoundsChanged(); |
| 518 SchedulePaint(); | 519 SchedulePaint(); |
| 519 } | 520 } |
| 520 | 521 |
| 521 size_t NativeTextfieldViews::GetCursorPosition() const { | 522 size_t NativeTextfieldViews::GetCursorPosition() const { |
| 522 return model_->GetCursorPosition(); | 523 return model_->GetCursorPosition(); |
| 523 } | 524 } |
| 524 | 525 |
| 525 bool NativeTextfieldViews::HandleKeyPressed(const KeyEvent& e) { | 526 bool NativeTextfieldViews::HandleKeyPressed(const ui::KeyEvent& e) { |
| 526 TextfieldController* controller = textfield_->GetController(); | 527 TextfieldController* controller = textfield_->GetController(); |
| 527 bool handled = false; | 528 bool handled = false; |
| 528 if (controller) | 529 if (controller) |
| 529 handled = controller->HandleKeyEvent(textfield_, e); | 530 handled = controller->HandleKeyEvent(textfield_, e); |
| 530 return handled || HandleKeyEvent(e); | 531 return handled || HandleKeyEvent(e); |
| 531 } | 532 } |
| 532 | 533 |
| 533 bool NativeTextfieldViews::HandleKeyReleased(const KeyEvent& e) { | 534 bool NativeTextfieldViews::HandleKeyReleased(const ui::KeyEvent& e) { |
| 534 return false; // crbug.com/127520 | 535 return false; // crbug.com/127520 |
| 535 } | 536 } |
| 536 | 537 |
| 537 void NativeTextfieldViews::HandleFocus() { | 538 void NativeTextfieldViews::HandleFocus() { |
| 538 GetRenderText()->set_focused(true); | 539 GetRenderText()->set_focused(true); |
| 539 is_cursor_visible_ = true; | 540 is_cursor_visible_ = true; |
| 540 SchedulePaint(); | 541 SchedulePaint(); |
| 541 OnCaretBoundsChanged(); | 542 OnCaretBoundsChanged(); |
| 542 // Start blinking cursor. | 543 // Start blinking cursor. |
| 543 MessageLoop::current()->PostDelayedTask( | 544 MessageLoop::current()->PostDelayedTask( |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 909 !textfield_->placeholder_text().empty()) { | 910 !textfield_->placeholder_text().empty()) { |
| 910 canvas->DrawStringInt( | 911 canvas->DrawStringInt( |
| 911 textfield_->placeholder_text(), | 912 textfield_->placeholder_text(), |
| 912 GetRenderText()->GetFont(), | 913 GetRenderText()->GetFont(), |
| 913 textfield_->placeholder_text_color(), | 914 textfield_->placeholder_text_color(), |
| 914 GetRenderText()->display_rect()); | 915 GetRenderText()->display_rect()); |
| 915 } | 916 } |
| 916 canvas->Restore(); | 917 canvas->Restore(); |
| 917 } | 918 } |
| 918 | 919 |
| 919 bool NativeTextfieldViews::HandleKeyEvent(const KeyEvent& key_event) { | 920 bool NativeTextfieldViews::HandleKeyEvent(const ui::KeyEvent& key_event) { |
| 920 // TODO(oshima): Refactor and consolidate with ExecuteCommand. | 921 // TODO(oshima): Refactor and consolidate with ExecuteCommand. |
| 921 if (key_event.type() == ui::ET_KEY_PRESSED) { | 922 if (key_event.type() == ui::ET_KEY_PRESSED) { |
| 922 ui::KeyboardCode key_code = key_event.key_code(); | 923 ui::KeyboardCode key_code = key_event.key_code(); |
| 923 // TODO(oshima): shift-tab does not work. Figure out why and fix. | 924 // TODO(oshima): shift-tab does not work. Figure out why and fix. |
| 924 if (key_code == ui::VKEY_TAB) | 925 if (key_code == ui::VKEY_TAB) |
| 925 return false; | 926 return false; |
| 926 | 927 |
| 927 OnBeforeUserAction(); | 928 OnBeforeUserAction(); |
| 928 bool editable = !textfield_->read_only(); | 929 bool editable = !textfield_->read_only(); |
| 929 bool readable = !textfield_->IsObscured(); | 930 bool readable = !textfield_->IsObscured(); |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1221 // Filter out all control characters, including tab and new line characters, | 1222 // Filter out all control characters, including tab and new line characters, |
| 1222 // and all characters with Alt modifier. But we need to allow characters with | 1223 // and all characters with Alt modifier. But we need to allow characters with |
| 1223 // AltGr modifier. | 1224 // AltGr modifier. |
| 1224 // On Windows AltGr is represented by Alt+Ctrl, and on Linux it's a different | 1225 // On Windows AltGr is represented by Alt+Ctrl, and on Linux it's a different |
| 1225 // flag that we don't care about. | 1226 // flag that we don't care about. |
| 1226 return ((ch >= 0x20 && ch < 0x7F) || ch > 0x9F) && | 1227 return ((ch >= 0x20 && ch < 0x7F) || ch > 0x9F) && |
| 1227 (flags & ~(ui::EF_SHIFT_DOWN | ui::EF_CAPS_LOCK_DOWN)) != ui::EF_ALT_DOWN; | 1228 (flags & ~(ui::EF_SHIFT_DOWN | ui::EF_CAPS_LOCK_DOWN)) != ui::EF_ALT_DOWN; |
| 1228 } | 1229 } |
| 1229 | 1230 |
| 1230 } // namespace views | 1231 } // namespace views |
| OLD | NEW |