| Index: content/browser/renderer_host/input/touch_selection_controller_client_aura.cc
|
| diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc b/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc
|
| deleted file mode 100644
|
| index ada3e9f2fc7549240bf0d1d5061a92a562044e58..0000000000000000000000000000000000000000
|
| --- a/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc
|
| +++ /dev/null
|
| @@ -1,353 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "content/browser/renderer_host/input/touch_selection_controller_client_aura.h"
|
| -
|
| -#include "content/browser/renderer_host/render_widget_host_delegate.h"
|
| -#include "content/browser/renderer_host/render_widget_host_impl.h"
|
| -#include "content/browser/renderer_host/render_widget_host_view_aura.h"
|
| -#include "content/common/view_messages.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| -#include "ui/aura/client/cursor_client.h"
|
| -#include "ui/aura/client/screen_position_client.h"
|
| -#include "ui/aura/env.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/base/clipboard/clipboard.h"
|
| -#include "ui/gfx/geometry/point_conversions.h"
|
| -#include "ui/gfx/geometry/size_conversions.h"
|
| -#include "ui/strings/grit/ui_strings.h"
|
| -#include "ui/touch_selection/touch_handle_drawable_aura.h"
|
| -#include "ui/touch_selection/touch_selection_menu_runner.h"
|
| -
|
| -namespace content {
|
| -namespace {
|
| -
|
| -// Delay before showing the quick menu, in milliseconds.
|
| -const int kQuickMenuDelayInMs = 100;
|
| -
|
| -gfx::Rect ConvertRectToScreen(aura::Window* window, const gfx::RectF& rect) {
|
| - gfx::Point origin = gfx::ToRoundedPoint(rect.origin());
|
| - gfx::Point bottom_right = gfx::ToRoundedPoint(rect.bottom_right());
|
| -
|
| - aura::Window* root_window = window->GetRootWindow();
|
| - if (root_window) {
|
| - aura::client::ScreenPositionClient* screen_position_client =
|
| - aura::client::GetScreenPositionClient(root_window);
|
| - if (screen_position_client) {
|
| - screen_position_client->ConvertPointToScreen(window, &origin);
|
| - screen_position_client->ConvertPointToScreen(window, &bottom_right);
|
| - }
|
| - }
|
| - return gfx::Rect(origin.x(), origin.y(), bottom_right.x() - origin.x(),
|
| - bottom_right.y() - origin.y());
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// A pre-target event handler for aura::Env which deactivates touch selection on
|
| -// mouse and keyboard events.
|
| -class TouchSelectionControllerClientAura::EnvPreTargetHandler
|
| - : public ui::EventHandler {
|
| - public:
|
| - EnvPreTargetHandler(ui::TouchSelectionController* selection_controller,
|
| - aura::Window* window);
|
| - ~EnvPreTargetHandler() override;
|
| -
|
| - private:
|
| - // EventHandler:
|
| - void OnKeyEvent(ui::KeyEvent* event) override;
|
| - void OnMouseEvent(ui::MouseEvent* event) override;
|
| - void OnScrollEvent(ui::ScrollEvent* event) override;
|
| -
|
| - ui::TouchSelectionController* selection_controller_;
|
| - aura::Window* window_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(EnvPreTargetHandler);
|
| -};
|
| -
|
| -TouchSelectionControllerClientAura::EnvPreTargetHandler::EnvPreTargetHandler(
|
| - ui::TouchSelectionController* selection_controller,
|
| - aura::Window* window)
|
| - : selection_controller_(selection_controller), window_(window) {
|
| - aura::Env::GetInstance()->AddPreTargetHandler(this);
|
| -}
|
| -
|
| -TouchSelectionControllerClientAura::EnvPreTargetHandler::
|
| - ~EnvPreTargetHandler() {
|
| - aura::Env::GetInstance()->RemovePreTargetHandler(this);
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::EnvPreTargetHandler::OnKeyEvent(
|
| - ui::KeyEvent* event) {
|
| - DCHECK_NE(ui::TouchSelectionController::INACTIVE,
|
| - selection_controller_->active_status());
|
| -
|
| - selection_controller_->HideAndDisallowShowingAutomatically();
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::EnvPreTargetHandler::OnMouseEvent(
|
| - ui::MouseEvent* event) {
|
| - DCHECK_NE(ui::TouchSelectionController::INACTIVE,
|
| - selection_controller_->active_status());
|
| -
|
| - // If mouse events are not enabled, this mouse event is synthesized from a
|
| - // touch event in which case we don't want to deactivate touch selection.
|
| - aura::client::CursorClient* cursor_client =
|
| - aura::client::GetCursorClient(window_->GetRootWindow());
|
| - if (!cursor_client || cursor_client->IsMouseEventsEnabled())
|
| - selection_controller_->HideAndDisallowShowingAutomatically();
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::EnvPreTargetHandler::OnScrollEvent(
|
| - ui::ScrollEvent* event) {
|
| - DCHECK_NE(ui::TouchSelectionController::INACTIVE,
|
| - selection_controller_->active_status());
|
| -
|
| - selection_controller_->HideAndDisallowShowingAutomatically();
|
| -}
|
| -
|
| -TouchSelectionControllerClientAura::TouchSelectionControllerClientAura(
|
| - RenderWidgetHostViewAura* rwhva)
|
| - : rwhva_(rwhva),
|
| - quick_menu_timer_(
|
| - FROM_HERE,
|
| - base::TimeDelta::FromMilliseconds(kQuickMenuDelayInMs),
|
| - base::Bind(&TouchSelectionControllerClientAura::ShowQuickMenu,
|
| - base::Unretained(this)),
|
| - false),
|
| - touch_down_(false),
|
| - scroll_in_progress_(false),
|
| - handle_drag_in_progress_(false) {
|
| - DCHECK(rwhva_);
|
| -}
|
| -
|
| -TouchSelectionControllerClientAura::~TouchSelectionControllerClientAura() {
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::OnWindowMoved() {
|
| - UpdateQuickMenu();
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::OnTouchDown() {
|
| - touch_down_ = true;
|
| - UpdateQuickMenu();
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::OnTouchUp() {
|
| - touch_down_ = false;
|
| - UpdateQuickMenu();
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::OnScrollStarted() {
|
| - scroll_in_progress_ = true;
|
| - rwhva_->selection_controller()->SetTemporarilyHidden(true);
|
| - UpdateQuickMenu();
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::OnScrollCompleted() {
|
| - scroll_in_progress_ = false;
|
| - rwhva_->selection_controller()->SetTemporarilyHidden(false);
|
| - UpdateQuickMenu();
|
| -}
|
| -
|
| -bool TouchSelectionControllerClientAura::IsQuickMenuAllowed() const {
|
| - return !touch_down_ && !scroll_in_progress_ && !handle_drag_in_progress_;
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::ShowQuickMenu() {
|
| - if (!ui::TouchSelectionMenuRunner::GetInstance())
|
| - return;
|
| -
|
| - gfx::RectF rect = rwhva_->selection_controller()->GetRectBetweenBounds();
|
| -
|
| - // Clip rect, which is in |rwhva_|'s window's coordinate space, to client
|
| - // bounds.
|
| - gfx::PointF origin = rect.origin();
|
| - gfx::PointF bottom_right = rect.bottom_right();
|
| - gfx::Rect client_bounds = rwhva_->GetNativeView()->bounds();
|
| - origin.SetToMax(client_bounds.origin());
|
| - bottom_right.SetToMin(client_bounds.bottom_right());
|
| - if (origin.x() > bottom_right.x() || origin.y() > bottom_right.y())
|
| - return;
|
| -
|
| - gfx::Vector2dF diagonal = bottom_right - origin;
|
| - gfx::SizeF size(diagonal.x(), diagonal.y());
|
| - gfx::RectF anchor_rect(origin, size);
|
| -
|
| - // Calculate maximum handle image size;
|
| - gfx::SizeF max_handle_size =
|
| - rwhva_->selection_controller()->GetStartHandleRect().size();
|
| - max_handle_size.SetToMax(
|
| - rwhva_->selection_controller()->GetEndHandleRect().size());
|
| -
|
| - aura::Window* parent = rwhva_->GetNativeView();
|
| - ui::TouchSelectionMenuRunner::GetInstance()->OpenMenu(
|
| - this, ConvertRectToScreen(parent, anchor_rect),
|
| - gfx::ToRoundedSize(max_handle_size), parent->GetToplevelWindow());
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::UpdateQuickMenu() {
|
| - bool menu_is_showing =
|
| - ui::TouchSelectionMenuRunner::GetInstance() &&
|
| - ui::TouchSelectionMenuRunner::GetInstance()->IsRunning();
|
| - bool menu_should_show = rwhva_->selection_controller()->active_status() !=
|
| - ui::TouchSelectionController::INACTIVE &&
|
| - IsQuickMenuAllowed();
|
| -
|
| - // Hide the quick menu if there is any. This should happen even if the menu
|
| - // should be shown again, in order to update its location or content.
|
| - if (menu_is_showing)
|
| - ui::TouchSelectionMenuRunner::GetInstance()->CloseMenu();
|
| - else
|
| - quick_menu_timer_.Stop();
|
| -
|
| - // Start timer to show quick menu if necessary.
|
| - if (menu_should_show) {
|
| - if (show_quick_menu_immediately_for_test_)
|
| - ShowQuickMenu();
|
| - else
|
| - quick_menu_timer_.Reset();
|
| - }
|
| -}
|
| -
|
| -bool TouchSelectionControllerClientAura::SupportsAnimation() const {
|
| - return false;
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::SetNeedsAnimate() {
|
| - NOTREACHED();
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::MoveCaret(
|
| - const gfx::PointF& position) {
|
| - RenderWidgetHostImpl* host =
|
| - RenderWidgetHostImpl::From(rwhva_->GetRenderWidgetHost());
|
| - host->MoveCaret(gfx::ToRoundedPoint(position));
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::MoveRangeSelectionExtent(
|
| - const gfx::PointF& extent) {
|
| - RenderWidgetHostDelegate* host_delegate =
|
| - RenderWidgetHostImpl::From(rwhva_->GetRenderWidgetHost())->delegate();
|
| - if (host_delegate)
|
| - host_delegate->MoveRangeSelectionExtent(gfx::ToRoundedPoint(extent));
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::SelectBetweenCoordinates(
|
| - const gfx::PointF& base,
|
| - const gfx::PointF& extent) {
|
| - RenderWidgetHostDelegate* host_delegate =
|
| - RenderWidgetHostImpl::From(rwhva_->GetRenderWidgetHost())->delegate();
|
| - if (host_delegate) {
|
| - host_delegate->SelectRange(gfx::ToRoundedPoint(base),
|
| - gfx::ToRoundedPoint(extent));
|
| - }
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::OnSelectionEvent(
|
| - ui::SelectionEventType event) {
|
| - switch (event) {
|
| - case ui::SELECTION_HANDLES_SHOWN:
|
| - case ui::INSERTION_HANDLE_SHOWN:
|
| - UpdateQuickMenu();
|
| - env_pre_target_handler_.reset(new EnvPreTargetHandler(
|
| - rwhva_->selection_controller(), rwhva_->GetNativeView()));
|
| - break;
|
| - case ui::SELECTION_HANDLES_CLEARED:
|
| - case ui::INSERTION_HANDLE_CLEARED:
|
| - env_pre_target_handler_.reset();
|
| - UpdateQuickMenu();
|
| - break;
|
| - case ui::SELECTION_HANDLE_DRAG_STARTED:
|
| - case ui::INSERTION_HANDLE_DRAG_STARTED:
|
| - handle_drag_in_progress_ = true;
|
| - UpdateQuickMenu();
|
| - break;
|
| - case ui::SELECTION_HANDLE_DRAG_STOPPED:
|
| - case ui::INSERTION_HANDLE_DRAG_STOPPED:
|
| - handle_drag_in_progress_ = false;
|
| - UpdateQuickMenu();
|
| - break;
|
| - case ui::SELECTION_HANDLES_MOVED:
|
| - case ui::INSERTION_HANDLE_MOVED:
|
| - UpdateQuickMenu();
|
| - break;
|
| - case ui::INSERTION_HANDLE_TAPPED:
|
| - case ui::SELECTION_ESTABLISHED:
|
| - case ui::SELECTION_DISSOLVED:
|
| - break;
|
| - };
|
| -}
|
| -
|
| -scoped_ptr<ui::TouchHandleDrawable>
|
| -TouchSelectionControllerClientAura::CreateDrawable() {
|
| - return scoped_ptr<ui::TouchHandleDrawable>(
|
| - new ui::TouchHandleDrawableAura(rwhva_->GetNativeView()));
|
| -}
|
| -
|
| -bool TouchSelectionControllerClientAura::IsCommandIdEnabled(
|
| - int command_id) const {
|
| - bool editable = rwhva_->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE;
|
| - bool readable = rwhva_->GetTextInputType() != ui::TEXT_INPUT_TYPE_PASSWORD;
|
| - gfx::Range selection_range;
|
| - rwhva_->GetSelectionRange(&selection_range);
|
| - bool has_selection = !selection_range.is_empty();
|
| - switch (command_id) {
|
| - case IDS_APP_CUT:
|
| - return editable && readable && has_selection;
|
| - case IDS_APP_COPY:
|
| - return readable && has_selection;
|
| - case IDS_APP_PASTE: {
|
| - base::string16 result;
|
| - ui::Clipboard::GetForCurrentThread()->ReadText(
|
| - ui::CLIPBOARD_TYPE_COPY_PASTE, &result);
|
| - return editable && !result.empty();
|
| - }
|
| - default:
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::ExecuteCommand(int command_id,
|
| - int event_flags) {
|
| - rwhva_->selection_controller()->HideAndDisallowShowingAutomatically();
|
| - RenderWidgetHostDelegate* host_delegate =
|
| - RenderWidgetHostImpl::From(rwhva_->GetRenderWidgetHost())->delegate();
|
| - if (!host_delegate)
|
| - return;
|
| -
|
| - switch (command_id) {
|
| - case IDS_APP_CUT:
|
| - host_delegate->Cut();
|
| - break;
|
| - case IDS_APP_COPY:
|
| - host_delegate->Copy();
|
| - break;
|
| - case IDS_APP_PASTE:
|
| - host_delegate->Paste();
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - break;
|
| - }
|
| -}
|
| -
|
| -void TouchSelectionControllerClientAura::RunContextMenu() {
|
| - gfx::RectF anchor_rect =
|
| - rwhva_->selection_controller()->GetRectBetweenBounds();
|
| - gfx::PointF anchor_point =
|
| - gfx::PointF(anchor_rect.CenterPoint().x(), anchor_rect.y());
|
| - RenderWidgetHostImpl* host =
|
| - RenderWidgetHostImpl::From(rwhva_->GetRenderWidgetHost());
|
| - host->Send(new ViewMsg_ShowContextMenu(host->GetRoutingID(),
|
| - ui::MENU_SOURCE_TOUCH_EDIT_MENU,
|
| - gfx::ToRoundedPoint(anchor_point)));
|
| -
|
| - // Hide selection handles after getting rect-between-bounds from touch
|
| - // selection controller; otherwise, rect would be empty and the above
|
| - // calculations would be invalid.
|
| - rwhva_->selection_controller()->HideAndDisallowShowingAutomatically();
|
| -}
|
| -
|
| -} // namespace content
|
|
|