Chromium Code Reviews| 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" |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 256 bool NativeTextfieldViews::CanDrop(const OSExchangeData& data) { | 256 bool NativeTextfieldViews::CanDrop(const OSExchangeData& data) { |
| 257 int formats; | 257 int formats; |
| 258 std::set<OSExchangeData::CustomFormat> custom_formats; | 258 std::set<OSExchangeData::CustomFormat> custom_formats; |
| 259 GetDropFormats(&formats, &custom_formats); | 259 GetDropFormats(&formats, &custom_formats); |
| 260 return textfield_->enabled() && !textfield_->read_only() && | 260 return textfield_->enabled() && !textfield_->read_only() && |
| 261 data.HasAnyFormat(formats, custom_formats); | 261 data.HasAnyFormat(formats, custom_formats); |
| 262 } | 262 } |
| 263 | 263 |
| 264 int NativeTextfieldViews::OnDragUpdated(const ui::DropTargetEvent& event) { | 264 int NativeTextfieldViews::OnDragUpdated(const ui::DropTargetEvent& event) { |
| 265 DCHECK(CanDrop(event.data())); | 265 DCHECK(CanDrop(event.data())); |
| 266 bool in_selection = GetRenderText()->IsPointInSelection(event.location()); | 266 |
| 267 const gfx::Point& location = event.location(); | |
| 268 bool in_selection = GetRenderText()->IsPointInSelection(location); | |
| 267 is_drop_cursor_visible_ = !in_selection; | 269 is_drop_cursor_visible_ = !in_selection; |
| 270 if (is_drop_cursor_visible_) | |
| 271 drop_cursor_position_ = GetRenderText()->FindCursorPosition(location); | |
|
msw
2013/04/15 17:14:04
You can optionally avoid calling both FindCursorPo
ckocagil
2013/04/15 20:41:15
Done.
| |
| 268 // TODO(msw): Pan over text when the user drags to the visible text edge. | 272 // TODO(msw): Pan over text when the user drags to the visible text edge. |
| 269 OnCaretBoundsChanged(); | 273 OnCaretBoundsChanged(); |
| 270 SchedulePaint(); | 274 SchedulePaint(); |
| 271 | 275 |
| 272 if (initiating_drag_) { | 276 if (initiating_drag_) { |
| 273 if (in_selection) | 277 if (in_selection) |
| 274 return ui::DragDropTypes::DRAG_NONE; | 278 return ui::DragDropTypes::DRAG_NONE; |
| 275 return event.IsControlDown() ? ui::DragDropTypes::DRAG_COPY : | 279 return event.IsControlDown() ? ui::DragDropTypes::DRAG_COPY : |
| 276 ui::DragDropTypes::DRAG_MOVE; | 280 ui::DragDropTypes::DRAG_MOVE; |
| 277 } | 281 } |
| 278 return ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_MOVE; | 282 return ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_MOVE; |
| 279 } | 283 } |
| 280 | 284 |
| 285 void NativeTextfieldViews::OnDragExited() { | |
| 286 is_drop_cursor_visible_ = false; | |
| 287 SchedulePaint(); | |
| 288 } | |
| 289 | |
| 281 int NativeTextfieldViews::OnPerformDrop(const ui::DropTargetEvent& event) { | 290 int NativeTextfieldViews::OnPerformDrop(const ui::DropTargetEvent& event) { |
| 282 DCHECK(CanDrop(event.data())); | 291 DCHECK(CanDrop(event.data())); |
| 283 | 292 |
| 284 TextfieldController* controller = textfield_->GetController(); | 293 TextfieldController* controller = textfield_->GetController(); |
| 285 if (controller) { | 294 if (controller) { |
| 286 int drag_operation = controller->OnDrop(event.data()); | 295 int drag_operation = controller->OnDrop(event.data()); |
| 287 if (drag_operation != ui::DragDropTypes::DRAG_NONE) | 296 if (drag_operation != ui::DragDropTypes::DRAG_NONE) |
| 288 return drag_operation; | 297 return drag_operation; |
| 289 } | 298 } |
| 290 | 299 |
| (...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1074 | 1083 |
| 1075 void NativeTextfieldViews::RepaintCursor() { | 1084 void NativeTextfieldViews::RepaintCursor() { |
| 1076 gfx::Rect r(GetCaretBounds()); | 1085 gfx::Rect r(GetCaretBounds()); |
| 1077 r.Inset(-1, -1, -1, -1); | 1086 r.Inset(-1, -1, -1, -1); |
| 1078 SchedulePaintInRect(r); | 1087 SchedulePaintInRect(r); |
| 1079 } | 1088 } |
| 1080 | 1089 |
| 1081 void NativeTextfieldViews::PaintTextAndCursor(gfx::Canvas* canvas) { | 1090 void NativeTextfieldViews::PaintTextAndCursor(gfx::Canvas* canvas) { |
| 1082 TRACE_EVENT0("views", "NativeTextfieldViews::PaintTextAndCursor"); | 1091 TRACE_EVENT0("views", "NativeTextfieldViews::PaintTextAndCursor"); |
| 1083 canvas->Save(); | 1092 canvas->Save(); |
| 1084 GetRenderText()->set_cursor_visible(is_drop_cursor_visible_ || | 1093 GetRenderText()->set_cursor_visible(!is_drop_cursor_visible_ && |
| 1085 (is_cursor_visible_ && !model_->HasSelection())); | 1094 is_cursor_visible_ && !model_->HasSelection()); |
| 1086 // Draw the text, cursor, and selection. | 1095 // Draw the text, cursor, and selection. |
| 1087 GetRenderText()->Draw(canvas); | 1096 GetRenderText()->Draw(canvas); |
| 1088 | 1097 |
| 1098 // Draw the detached drop cursor that marks where the text will be dropped. | |
| 1099 if (is_drop_cursor_visible_) | |
| 1100 GetRenderText()->DrawCursor(canvas, drop_cursor_position_); | |
| 1101 | |
| 1089 // Draw placeholder text if needed. | 1102 // Draw placeholder text if needed. |
| 1090 if (model_->GetText().empty() && | 1103 if (model_->GetText().empty() && |
| 1091 !textfield_->placeholder_text().empty()) { | 1104 !textfield_->placeholder_text().empty()) { |
| 1092 canvas->DrawStringInt( | 1105 canvas->DrawStringInt( |
| 1093 textfield_->placeholder_text(), | 1106 textfield_->placeholder_text(), |
| 1094 GetRenderText()->GetFont(), | 1107 GetRenderText()->GetFont(), |
| 1095 textfield_->placeholder_text_color(), | 1108 textfield_->placeholder_text_color(), |
| 1096 GetRenderText()->display_rect()); | 1109 GetRenderText()->display_rect()); |
| 1097 } | 1110 } |
| 1098 canvas->Restore(); | 1111 canvas->Restore(); |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1413 | 1426 |
| 1414 void NativeTextfieldViews::PlatformGestureEventHandling( | 1427 void NativeTextfieldViews::PlatformGestureEventHandling( |
| 1415 const ui::GestureEvent* event) { | 1428 const ui::GestureEvent* event) { |
| 1416 #if defined(OS_WIN) && defined(USE_AURA) | 1429 #if defined(OS_WIN) && defined(USE_AURA) |
| 1417 if (event->type() == ui::ET_GESTURE_TAP_DOWN && !textfield_->read_only()) | 1430 if (event->type() == ui::ET_GESTURE_TAP_DOWN && !textfield_->read_only()) |
| 1418 base::win::DisplayVirtualKeyboard(); | 1431 base::win::DisplayVirtualKeyboard(); |
| 1419 #endif | 1432 #endif |
| 1420 } | 1433 } |
| 1421 | 1434 |
| 1422 } // namespace views | 1435 } // namespace views |
| OLD | NEW |