| Index: ui/views/controls/textfield/textfield.cc
|
| diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc
|
| index 94888d7d2a16d4d3e4777688c84bb2ff8a70ab2d..8442b7c015c52ef61b4a6071bc8f1fcf0a8b0985 100644
|
| --- a/ui/views/controls/textfield/textfield.cc
|
| +++ b/ui/views/controls/textfield/textfield.cc
|
| @@ -18,10 +18,13 @@
|
| #include "ui/events/event.h"
|
| #include "ui/events/keycodes/keyboard_codes.h"
|
| #include "ui/gfx/canvas.h"
|
| +#include "ui/gfx/display.h"
|
| #include "ui/gfx/insets.h"
|
| +#include "ui/gfx/screen.h"
|
| #include "ui/native_theme/native_theme.h"
|
| #include "ui/views/background.h"
|
| #include "ui/views/controls/focusable_border.h"
|
| +#include "ui/views/controls/label.h"
|
| #include "ui/views/controls/menu/menu_item_view.h"
|
| #include "ui/views/controls/menu/menu_runner.h"
|
| #include "ui/views/controls/native/native_view_host.h"
|
| @@ -37,23 +40,23 @@
|
| #include "base/win/win_util.h"
|
| #endif
|
|
|
| +namespace views {
|
| +
|
| namespace {
|
|
|
| // Default placeholder text color.
|
| const SkColor kDefaultPlaceholderTextColor = SK_ColorLTGRAY;
|
|
|
| -void ConvertRectToScreen(const views::View* src, gfx::Rect* r) {
|
| +void ConvertRectToScreen(const View* src, gfx::Rect* r) {
|
| DCHECK(src);
|
|
|
| gfx::Point new_origin = r->origin();
|
| - views::View::ConvertPointToScreen(src, &new_origin);
|
| + View::ConvertPointToScreen(src, &new_origin);
|
| r->set_origin(new_origin);
|
| }
|
|
|
| } // namespace
|
|
|
| -namespace views {
|
| -
|
| // static
|
| const char Textfield::kViewClassName[] = "Textfield";
|
|
|
| @@ -827,40 +830,47 @@ void Textfield::OnCompositionTextConfirmedOrCleared() {
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // Textfield, ContextMenuController overrides:
|
|
|
| -void Textfield::ShowContextMenuForView(
|
| - View* source,
|
| - const gfx::Point& point,
|
| - ui::MenuSourceType source_type) {
|
| +void Textfield::ShowContextMenuForView(View* source,
|
| + const gfx::Point& point,
|
| + ui::MenuSourceType source_type) {
|
| UpdateContextMenu();
|
| - if (context_menu_runner_->RunMenuAt(GetWidget(), NULL,
|
| - gfx::Rect(point, gfx::Size()), views::MenuItemView::TOPLEFT,
|
| - source_type,
|
| - MenuRunner::HAS_MNEMONICS | views::MenuRunner::CONTEXT_MENU) ==
|
| - MenuRunner::MENU_DELETED)
|
| - return;
|
| + ignore_result(context_menu_runner_->RunMenuAt(GetWidget(), NULL,
|
| + gfx::Rect(point, gfx::Size()), MenuItemView::TOPLEFT, source_type,
|
| + MenuRunner::HAS_MNEMONICS | MenuRunner::CONTEXT_MENU));
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| -// Textfield, views::DragController overrides:
|
| +// Textfield, DragController overrides:
|
|
|
| -void Textfield::WriteDragDataForView(views::View* sender,
|
| +void Textfield::WriteDragDataForView(View* sender,
|
| const gfx::Point& press_pt,
|
| OSExchangeData* data) {
|
| - DCHECK_NE(ui::DragDropTypes::DRAG_NONE,
|
| - GetDragOperationsForView(sender, press_pt));
|
| - data->SetString(model_->GetSelectedText());
|
| + const base::string16& selected_text(GetSelectedText());
|
| + data->SetString(selected_text);
|
| + Label label(selected_text, GetFontList());
|
| + const SkColor background = GetBackgroundColor();
|
| + label.SetBackgroundColor(SkColorSetA(background, SK_AlphaTRANSPARENT));
|
| + gfx::Size size(label.GetPreferredSize());
|
| + gfx::NativeView native_view = GetWidget()->GetNativeView();
|
| + gfx::Display display = gfx::Screen::GetScreenFor(native_view)->
|
| + GetDisplayNearestWindow(native_view);
|
| + size.SetToMin(gfx::Size(display.size().width(), height()));
|
| + label.SetBoundsRect(gfx::Rect(size));
|
| scoped_ptr<gfx::Canvas> canvas(
|
| - views::GetCanvasForDragImage(GetWidget(), size()));
|
| - GetRenderText()->DrawSelectedTextForDrag(canvas.get());
|
| - drag_utils::SetDragImageOnDataObject(*canvas, size(),
|
| - press_pt.OffsetFromOrigin(),
|
| - data);
|
| + GetCanvasForDragImage(GetWidget(), label.size()));
|
| + label.SetEnabledColor(GetTextColor());
|
| +#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
|
| + // Desktop Linux Aura does not yet support transparency in drag images.
|
| + canvas->DrawColor(background);
|
| +#endif
|
| + label.Paint(canvas.get());
|
| + const gfx::Vector2d kOffset(-15, 0);
|
| + drag_utils::SetDragImageOnDataObject(*canvas, label.size(), kOffset, data);
|
| if (controller_)
|
| controller_->OnWriteDragData(data);
|
| }
|
|
|
| -int Textfield::GetDragOperationsForView(views::View* sender,
|
| - const gfx::Point& p) {
|
| +int Textfield::GetDragOperationsForView(View* sender, const gfx::Point& p) {
|
| int drag_operations = ui::DragDropTypes::DRAG_COPY;
|
| if (!enabled() || text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD ||
|
| !GetRenderText()->IsPointInSelection(p)) {
|
|
|