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

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

Issue 6267002: Implement double/triple click functionality in views textfield. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: minor refactoring Created 9 years, 11 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) 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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 const char NativeTextfieldViews::kViewClassName[] = 52 const char NativeTextfieldViews::kViewClassName[] =
53 "views/NativeTextfieldViews"; 53 "views/NativeTextfieldViews";
54 54
55 NativeTextfieldViews::NativeTextfieldViews(Textfield* parent) 55 NativeTextfieldViews::NativeTextfieldViews(Textfield* parent)
56 : textfield_(parent), 56 : textfield_(parent),
57 model_(new TextfieldViewsModel()), 57 model_(new TextfieldViewsModel()),
58 text_border_(new TextfieldBorder()), 58 text_border_(new TextfieldBorder()),
59 text_offset_(0), 59 text_offset_(0),
60 insert_(true), 60 insert_(true),
61 is_cursor_visible_(false), 61 is_cursor_visible_(false),
62 ALLOW_THIS_IN_INITIALIZER_LIST(cursor_timer_(this)) { 62 ALLOW_THIS_IN_INITIALIZER_LIST(cursor_timer_(this)),
63 last_mouse_press_time_(base::Time::FromInternalValue(0)),
64 tracking_triple_click_(false) {
63 set_border(text_border_); 65 set_border(text_border_);
64 66
65 // Multiline is not supported. 67 // Multiline is not supported.
66 DCHECK_NE(parent->style(), Textfield::STYLE_MULTILINE); 68 DCHECK_NE(parent->style(), Textfield::STYLE_MULTILINE);
67 // Lowercase is not supported. 69 // Lowercase is not supported.
68 DCHECK_NE(parent->style(), Textfield::STYLE_LOWERCASE); 70 DCHECK_NE(parent->style(), Textfield::STYLE_LOWERCASE);
69 71
70 SetContextMenuController(this); 72 SetContextMenuController(this);
71 } 73 }
72 74
73 NativeTextfieldViews::~NativeTextfieldViews() { 75 NativeTextfieldViews::~NativeTextfieldViews() {
74 } 76 }
75 77
76 //////////////////////////////////////////////////////////////////////////////// 78 ////////////////////////////////////////////////////////////////////////////////
77 // NativeTextfieldViews, View overrides: 79 // NativeTextfieldViews, View overrides:
78 80
79 bool NativeTextfieldViews::OnMousePressed(const views::MouseEvent& e) { 81 bool NativeTextfieldViews::OnMousePressed(const views::MouseEvent& e) {
80 textfield_->RequestFocus(); 82 textfield_->RequestFocus();
81 if (e.IsLeftMouseButton()) { 83 if (e.IsLeftMouseButton() && !DetectAndHandleDoubleAndTripleClick(e)) {
82 size_t pos = FindCursorPosition(e.location()); 84 size_t pos = FindCursorPosition(e.location());
83 if (model_->MoveCursorTo(pos, false)) { 85 if (model_->MoveCursorTo(pos, false)) {
84 UpdateCursorBoundsAndTextOffset(); 86 UpdateCursorBoundsAndTextOffset();
85 SchedulePaint(); 87 SchedulePaint();
86 } 88 }
87 } 89 }
88 return true; 90 return true;
89 } 91 }
90 92
91 bool NativeTextfieldViews::OnMouseDragged(const views::MouseEvent& e) { 93 bool NativeTextfieldViews::OnMouseDragged(const views::MouseEvent& e) {
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 } else if (pivot == x) { 757 } else if (pivot == x) {
756 return pivot_pos; 758 return pivot_pos;
757 } else { 759 } else {
758 right = pivot; 760 right = pivot;
759 right_pos = pivot_pos; 761 right_pos = pivot_pos;
760 } 762 }
761 } 763 }
762 return left_pos; 764 return left_pos;
763 } 765 }
764 766
767 bool NativeTextfieldViews::DetectAndHandleDoubleAndTripleClick(
768 const views::MouseEvent& e) {
769 if (!e.IsOnlyLeftMouseButton())
770 return false;
oshima 2011/01/18 19:52:54 1) mouse move (with some threshold) should cancel
varunjain 2011/01/25 04:06:40 Done.
771 base::TimeDelta elapsed_time = e.GetTimeStamp() - last_mouse_press_time_;
772 last_mouse_press_time_ = e.GetTimeStamp();
773 if (elapsed_time.InMilliseconds() <= GetDoubleClickTimeMS()) {
774 if (tracking_triple_click_) {
775 model_->SelectAll();
776 } else {
777 model_->SelectWord();
778 }
779 tracking_triple_click_ = !tracking_triple_click_;
780 SchedulePaint();
781 return true;
782 } else {
783 tracking_triple_click_ = false;
784 }
785 return false;
786 }
787
765 void NativeTextfieldViews::PropagateTextChange() { 788 void NativeTextfieldViews::PropagateTextChange() {
766 textfield_->SyncText(); 789 textfield_->SyncText();
767 Textfield::Controller* controller = textfield_->GetController(); 790 Textfield::Controller* controller = textfield_->GetController();
768 if (controller) 791 if (controller)
769 controller->ContentsChanged(textfield_, GetText()); 792 controller->ContentsChanged(textfield_, GetText());
770 } 793 }
771 794
772 void NativeTextfieldViews::InitContextMenuIfRequired() { 795 void NativeTextfieldViews::InitContextMenuIfRequired() {
773 if (context_menu_menu_.get()) 796 if (context_menu_menu_.get())
774 return; 797 return;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 } 854 }
832 855
833 void NativeTextfieldViews::TextfieldBorder::SetInsets(int top, 856 void NativeTextfieldViews::TextfieldBorder::SetInsets(int top,
834 int left, 857 int left,
835 int bottom, 858 int bottom,
836 int right) { 859 int right) {
837 insets_.Set(top, left, bottom, right); 860 insets_.Set(top, left, bottom, right);
838 } 861 }
839 862
840 } // namespace views 863 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698