OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "views/controls/textfield/native_textfield_views.h" | 5 #include "views/controls/textfield/native_textfield_views.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
600 SchedulePaint(); | 600 SchedulePaint(); |
601 } | 601 } |
602 | 602 |
603 void NativeTextfieldViews::OnBoundsChanged(const gfx::Rect& previous_bounds) { | 603 void NativeTextfieldViews::OnBoundsChanged(const gfx::Rect& previous_bounds) { |
604 // Set the RenderText display area. | 604 // Set the RenderText display area. |
605 gfx::Insets insets = GetInsets(); | 605 gfx::Insets insets = GetInsets(); |
606 gfx::Rect display_rect(insets.left(), | 606 gfx::Rect display_rect(insets.left(), |
607 insets.top(), | 607 insets.top(), |
608 width() - insets.width(), | 608 width() - insets.width(), |
609 height() - insets.height()); | 609 height() - insets.height()); |
610 GetRenderText()->set_display_rect(display_rect); | 610 GetRenderText()->SetDisplayRect(display_rect); |
611 OnCaretBoundsChanged(); | 611 OnCaretBoundsChanged(); |
612 } | 612 } |
613 | 613 |
614 /////////////////////////////////////////////////////////////////////////////// | 614 /////////////////////////////////////////////////////////////////////////////// |
615 // NativeTextfieldViews, TextInputClient implementation, private: | 615 // NativeTextfieldViews, TextInputClient implementation, private: |
616 | 616 |
617 void NativeTextfieldViews::SetCompositionText( | 617 void NativeTextfieldViews::SetCompositionText( |
618 const ui::CompositionText& composition) { | 618 const ui::CompositionText& composition) { |
619 if (GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) | 619 if (GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) |
620 return; | 620 return; |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 | 686 |
687 ui::TextInputType NativeTextfieldViews::GetTextInputType() { | 687 ui::TextInputType NativeTextfieldViews::GetTextInputType() { |
688 if (textfield_->read_only() || !textfield_->IsEnabled()) | 688 if (textfield_->read_only() || !textfield_->IsEnabled()) |
689 return ui::TEXT_INPUT_TYPE_NONE; | 689 return ui::TEXT_INPUT_TYPE_NONE; |
690 else if (textfield_->IsPassword()) | 690 else if (textfield_->IsPassword()) |
691 return ui::TEXT_INPUT_TYPE_PASSWORD; | 691 return ui::TEXT_INPUT_TYPE_PASSWORD; |
692 return ui::TEXT_INPUT_TYPE_TEXT; | 692 return ui::TEXT_INPUT_TYPE_TEXT; |
693 } | 693 } |
694 | 694 |
695 gfx::Rect NativeTextfieldViews::GetCaretBounds() { | 695 gfx::Rect NativeTextfieldViews::GetCaretBounds() { |
696 return GetRenderText()->CursorBounds(); | 696 return GetRenderText()->GetUpdatedCursorBounds(); |
697 } | 697 } |
698 | 698 |
699 bool NativeTextfieldViews::HasCompositionText() { | 699 bool NativeTextfieldViews::HasCompositionText() { |
700 return model_->HasCompositionText(); | 700 return model_->HasCompositionText(); |
701 } | 701 } |
702 | 702 |
703 bool NativeTextfieldViews::GetTextRange(ui::Range* range) { | 703 bool NativeTextfieldViews::GetTextRange(ui::Range* range) { |
704 // We don't allow the input method to retrieve or delete content from a | 704 // We don't allow the input method to retrieve or delete content from a |
705 // password box. | 705 // password box. |
706 if (GetTextInputType() != ui::TEXT_INPUT_TYPE_TEXT) | 706 if (GetTextInputType() != ui::TEXT_INPUT_TYPE_TEXT) |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
983 | 983 |
984 // Notify selection controller | 984 // Notify selection controller |
985 if (!touch_selection_controller_.get()) | 985 if (!touch_selection_controller_.get()) |
986 return; | 986 return; |
987 gfx::RenderText* render_text = GetRenderText(); | 987 gfx::RenderText* render_text = GetRenderText(); |
988 const gfx::SelectionModel& sel = render_text->selection_model(); | 988 const gfx::SelectionModel& sel = render_text->selection_model(); |
989 gfx::SelectionModel start_sel(sel.selection_start(), sel.selection_start(), | 989 gfx::SelectionModel start_sel(sel.selection_start(), sel.selection_start(), |
990 sel.selection_start(), gfx::SelectionModel::LEADING); | 990 sel.selection_start(), gfx::SelectionModel::LEADING); |
991 gfx::Rect start_cursor = render_text->GetCursorBounds(start_sel, false); | 991 gfx::Rect start_cursor = render_text->GetCursorBounds(start_sel, false); |
992 gfx::Rect end_cursor = render_text->GetCursorBounds(sel, false); | 992 gfx::Rect end_cursor = render_text->GetCursorBounds(sel, false); |
993 gfx::Rect display_rect = render_text->display_rect(); | 993 gfx::Point start(start_cursor.x(), start_cursor.bottom()); |
994 int total_offset_x = display_rect.x() + render_text->display_offset().x(); | 994 gfx::Point end(end_cursor.x(), end_cursor.bottom()); |
995 int total_offset_y = display_rect.y() + render_text->display_offset().y() + | |
996 (display_rect.height() - start_cursor.height()) / 2; | |
997 gfx::Point start(start_cursor.x() + total_offset_x, | |
998 start_cursor.bottom() + total_offset_y); | |
999 gfx::Point end(end_cursor.x() + total_offset_x, | |
1000 end_cursor.bottom() + total_offset_y); | |
1001 touch_selection_controller_->SelectionChanged(start, end); | 995 touch_selection_controller_->SelectionChanged(start, end); |
1002 } | 996 } |
1003 | 997 |
1004 void NativeTextfieldViews::OnBeforeUserAction() { | 998 void NativeTextfieldViews::OnBeforeUserAction() { |
1005 TextfieldController* controller = textfield_->GetController(); | 999 TextfieldController* controller = textfield_->GetController(); |
1006 if (controller) | 1000 if (controller) |
1007 controller->OnBeforeUserAction(textfield_); | 1001 controller->OnBeforeUserAction(textfield_); |
1008 } | 1002 } |
1009 | 1003 |
1010 void NativeTextfieldViews::OnAfterUserAction() { | 1004 void NativeTextfieldViews::OnAfterUserAction() { |
(...skipping 20 matching lines...) Expand all Loading... |
1031 // Filter out all control characters, including tab and new line characters, | 1025 // Filter out all control characters, including tab and new line characters, |
1032 // and all characters with Alt modifier. But we need to allow characters with | 1026 // and all characters with Alt modifier. But we need to allow characters with |
1033 // AltGr modifier. | 1027 // AltGr modifier. |
1034 // On Windows AltGr is represented by Alt+Ctrl, and on Linux it's a different | 1028 // On Windows AltGr is represented by Alt+Ctrl, and on Linux it's a different |
1035 // flag that we don't care about. | 1029 // flag that we don't care about. |
1036 return ((ch >= 0x20 && ch < 0x7F) || ch > 0x9F) && | 1030 return ((ch >= 0x20 && ch < 0x7F) || ch > 0x9F) && |
1037 (flags & ~(ui::EF_SHIFT_DOWN | ui::EF_CAPS_LOCK_DOWN)) != ui::EF_ALT_DOWN; | 1031 (flags & ~(ui::EF_SHIFT_DOWN | ui::EF_CAPS_LOCK_DOWN)) != ui::EF_ALT_DOWN; |
1038 } | 1032 } |
1039 | 1033 |
1040 } // namespace views | 1034 } // namespace views |
OLD | NEW |