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

Unified Diff: content/browser/web_contents/touch_selection_controller_aura_client_impl.cc

Issue 698253004: Reland: Implement Aura side of unified touch text selection for contents (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased after addition of touch_handle_orientation file Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/web_contents/touch_selection_controller_aura_client_impl.cc
diff --git a/content/browser/web_contents/touch_selection_controller_aura_client_impl.cc b/content/browser/web_contents/touch_selection_controller_aura_client_impl.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a1e9850bb24266dea434c99bc5b52387c99292e0
--- /dev/null
+++ b/content/browser/web_contents/touch_selection_controller_aura_client_impl.cc
@@ -0,0 +1,121 @@
+// 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/web_contents/touch_selection_controller_aura_client_impl.h"
+
+#include "content/browser/renderer_host/render_widget_host_impl.h"
+#include "content/browser/renderer_host/render_widget_host_view_aura.h"
+#include "content/browser/web_contents/web_contents_impl.h"
+#include "content/common/view_messages.h"
+#include "content/public/browser/render_view_host.h"
+#include "ui/aura/window.h"
+#include "ui/base/clipboard/clipboard.h"
+#include "ui/gfx/geometry/point_conversions.h"
+#include "ui/strings/grit/ui_strings.h"
+
+namespace content {
+
+TouchSelectionControllerAuraClientImpl::TouchSelectionControllerAuraClientImpl(
+ RenderWidgetHostViewAura* rwhva) : rwhva_(rwhva) {
+}
+
+TouchSelectionControllerAuraClientImpl::
+ ~TouchSelectionControllerAuraClientImpl() {
+}
+
+void TouchSelectionControllerAuraClientImpl::MoveCaret(
+ const gfx::PointF& position) {
+ RenderWidgetHostImpl* host =
+ RenderWidgetHostImpl::From(rwhva_->GetRenderWidgetHost());
+ host->MoveCaret(gfx::ToRoundedPoint(position));
+}
+
+void TouchSelectionControllerAuraClientImpl::MoveRangeSelectionExtent(
+ const gfx::PointF& extent) {
+ RenderViewHost* rvh = RenderViewHost::From(rwhva_->GetRenderWidgetHost());
+ WebContentsImpl* wc =
+ static_cast<WebContentsImpl*>(WebContents::FromRenderViewHost(rvh));
+ wc->MoveRangeSelectionExtent(gfx::ToRoundedPoint(extent));
+}
+
+void TouchSelectionControllerAuraClientImpl::SelectBetweenCoordinates(
+ const gfx::PointF& base,
+ const gfx::PointF& extent) {
+ RenderViewHost* rvh = RenderViewHost::From(rwhva_->GetRenderWidgetHost());
+ WebContentsImpl* wc =
+ static_cast<WebContentsImpl*>(WebContents::FromRenderViewHost(rvh));
+ wc->SelectRange(gfx::ToRoundedPoint(base), gfx::ToRoundedPoint(extent));
+}
+
+aura::Window* TouchSelectionControllerAuraClientImpl::GetParentWindow() const {
+ return rwhva_->GetNativeView();
+}
+
+gfx::Rect TouchSelectionControllerAuraClientImpl::GetClientBounds() const {
+ return gfx::Rect(rwhva_->GetNativeView()->bounds().size());
+}
+
+bool TouchSelectionControllerAuraClientImpl::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();
+ }
+ case IDS_APP_DELETE:
+ return editable && has_selection;
+ case IDS_APP_SELECT_ALL:
+ return true;
+ default:
+ return false;
+ }
+}
+
+void TouchSelectionControllerAuraClientImpl::ExecuteCommand(int command_id,
+ int event_flags) {
+ RenderViewHost* rvh = RenderViewHost::From(rwhva_->GetRenderWidgetHost());
+ WebContents* wc = WebContents::FromRenderViewHost(rvh);
+ switch (command_id) {
+ case IDS_APP_CUT:
+ wc->Cut();
+ break;
+ case IDS_APP_COPY:
+ wc->Copy();
+ break;
+ case IDS_APP_PASTE:
+ wc->Paste();
+ break;
+ case IDS_APP_DELETE:
+ wc->Delete();
+ break;
+ case IDS_APP_SELECT_ALL:
+ wc->SelectAll();
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+}
+
+void TouchSelectionControllerAuraClientImpl::OpenContextMenu(
+ const gfx::PointF& point) {
+ RenderWidgetHostImpl* host =
+ RenderWidgetHostImpl::From(rwhva_->GetRenderWidgetHost());
+ host->Send(new ViewMsg_ShowContextMenu(host->GetRoutingID(),
+ ui::MENU_SOURCE_TOUCH_EDIT_MENU,
+ gfx::ToRoundedPoint(point)));
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698