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

Unified Diff: content/browser/android/vr_content_view_core_impl_delegate.cc

Issue 2350253004: Controller support for VrShell (Closed)
Patch Set: Created 4 years, 3 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/android/vr_content_view_core_impl_delegate.cc
diff --git a/content/browser/android/vr_content_view_core_impl_delegate.cc b/content/browser/android/vr_content_view_core_impl_delegate.cc
new file mode 100644
index 0000000000000000000000000000000000000000..8b19686cdbdf57e4de66d22e84ee2c6dc7e79219
--- /dev/null
+++ b/content/browser/android/vr_content_view_core_impl_delegate.cc
@@ -0,0 +1,227 @@
+// Copyright 2016 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 "base/android/scoped_java_ref.h"
+#include "content/browser/android/vr_content_view_core_impl_delegate.h"
+#include "content/public/browser/android/vr_gesture.h"
+
+using blink::WebGestureEvent;
+using blink::WebMouseEvent;
+using blink::WebInputEvent;
+
+namespace content {
+
+namespace {
+
+/*int GetRenderProcessIdFromRenderViewHost(RenderViewHost* host) {
+ DCHECK(host);
+ RenderProcessHost* render_process = host->GetProcess();
+ DCHECK(render_process);
+ if (render_process->HasConnection())
+ return render_process->GetHandle();
+ return 0;
+}
+*/
+} // namespace
bshe 2016/09/21 15:18:41 nit: remove this namespace.
asimjour 2016/09/22 14:48:36 Done.
+
+VrContentViewCoreImplDelegate::VrContentViewCoreImplDelegate(
+ ContentViewCore* content_view_core)
+ : content_view_core_impl_(
+ static_cast<ContentViewCoreImpl*>(content_view_core)) {
+ dpi_scale_ = 1;
+}
+
+// static
+VrContentViewCoreImplDelegate*
+VrContentViewCoreImplDelegate::FromContentViewCore(
+ ContentViewCore* content_view_core) {
+ return new VrContentViewCoreImplDelegate(content_view_core);
+}
+// static
mthiesse 2016/09/21 17:43:27 newline
asimjour 2016/09/22 14:48:36 Done.
+VrContentViewCore* VrContentViewCore::FromContentViewCore(
bshe 2016/09/21 15:18:41 I am not sure I understand why do you want to have
asimjour 2016/09/22 14:48:37 There are two static functions here, One of these
+ ContentViewCore* content_view_core) {
+ return VrContentViewCoreImplDelegate::FromContentViewCore(content_view_core);
+}
+VrContentViewCoreImplDelegate::~VrContentViewCoreImplDelegate() {}
+
+void VrContentViewCoreImplDelegate::ScrollBegin(long time_ms,
+ float x,
+ float y,
+ float hintx,
+ float hinty,
+ bool target_viewport) {
+ WebGestureEvent event =
+ MakeGestureEvent(WebInputEvent::GestureScrollBegin, time_ms, x, y);
+ event.data.scrollBegin.deltaXHint = hintx / dpi_scale();
+ event.data.scrollBegin.deltaYHint = hinty / dpi_scale();
+ event.data.scrollBegin.targetViewport = target_viewport;
+
+ SendGestureEvent(event);
+}
+
+void VrContentViewCoreImplDelegate::ScrollEnd(long time_ms) {
+ WebGestureEvent event =
+ MakeGestureEvent(WebInputEvent::GestureScrollEnd, time_ms, 0, 0);
+ SendGestureEvent(event);
+}
+
+void VrContentViewCoreImplDelegate::ScrollBy(long time_ms,
+ float x,
+ float y,
+ float dx,
+ float dy) {
+ WebGestureEvent event =
+ MakeGestureEvent(WebInputEvent::GestureScrollUpdate, time_ms, x, y);
+ event.data.scrollUpdate.deltaX = -dx / dpi_scale();
+ event.data.scrollUpdate.deltaY = -dy / dpi_scale();
+
+ SendGestureEvent(event);
+}
+
+void VrContentViewCoreImplDelegate::SendScrollEvent(long time_ms,
+ float x,
+ float y,
+ float dx,
+ float dy,
+ int type) {
+ float hinty = -dy;
+ float hintx = -dx;
+ bool target_viewport = false;
+ switch (type) {
+ case GESTURE_EVENT_TYPE_SCROLL_START: {
+ WebGestureEvent event_start =
+ MakeGestureEvent(WebInputEvent::GestureScrollBegin, time_ms, x, y);
+ event_start.data.scrollBegin.deltaXHint = hintx / dpi_scale();
+ event_start.data.scrollBegin.deltaYHint = hinty / dpi_scale();
+ event_start.data.scrollBegin.targetViewport = target_viewport;
+ SendGestureEvent(event_start);
+ break;
+ }
+ case GESTURE_EVENT_TYPE_SCROLL_BY: {
+ WebGestureEvent event =
+ MakeGestureEvent(WebInputEvent::GestureScrollUpdate, time_ms, x, y);
+ event.data.scrollUpdate.deltaX = -dx / dpi_scale();
+ event.data.scrollUpdate.deltaY = -dy / dpi_scale();
+ SendGestureEvent(event);
+ break;
+ }
+ case GESTURE_EVENT_TYPE_SCROLL_END: {
+ WebGestureEvent event_end =
+ MakeGestureEvent(WebInputEvent::GestureScrollEnd, time_ms, 0, 0);
+ SendGestureEvent(event_end);
+ break;
+ }
+ }
+}
+
+void VrContentViewCoreImplDelegate::SendMouseMoveEvent(long time_ms,
+ float x,
+ float y,
+ int type) {
+ WebInputEvent::Type event_type = WebInputEvent::MouseMove;
+ if (type == 1) {
+ event_type = WebInputEvent::MouseEnter;
+ } else if (type == 2) {
+ event_type = WebInputEvent::MouseLeave;
+ }
+ WebMouseEvent event = WebMouseEventBuilder::Build(
+ event_type, blink::WebMouseEvent::Button::NoButton, time_ms / 1000.0,
+ x / dpi_scale(), y / dpi_scale(), 0, 1,
+ blink::WebPointerProperties::PointerType::Mouse);
+
+ SendMouseEvent(event);
+}
+
+void VrContentViewCoreImplDelegate::SendClickEvent(long time_ms,
+ float x,
+ float y) {
+ WebGestureEvent tap_down_event =
+ MakeGestureEvent(WebInputEvent::GestureTapDown, time_ms, x, y);
+ tap_down_event.data.tap.tapCount = 1;
+ SendGestureEvent(tap_down_event);
+
+ WebGestureEvent tap_event =
+ MakeGestureEvent(WebInputEvent::GestureTap, time_ms, x, y);
+ tap_event.data.tap.tapCount = 1;
+ SendGestureEvent(tap_event);
+}
+
+void VrContentViewCoreImplDelegate::PinchBegin(long time_ms, float x, float y) {
+ WebGestureEvent event =
+ MakeGestureEvent(WebInputEvent::GesturePinchBegin, time_ms, x, y);
+ SendGestureEvent(event);
+}
+
+void VrContentViewCoreImplDelegate::PinchEnd(long time_ms) {
+ WebGestureEvent event =
+ MakeGestureEvent(WebInputEvent::GesturePinchEnd, time_ms, 0, 0);
+ SendGestureEvent(event);
+}
+
+void VrContentViewCoreImplDelegate::PinchBy(long time_ms,
+ float anchor_x,
+ float anchor_y,
+ float delta) {
+ WebGestureEvent event = MakeGestureEvent(WebInputEvent::GesturePinchUpdate,
+ time_ms, anchor_x, anchor_y);
+ event.data.pinchUpdate.scale = delta;
+
+ SendGestureEvent(event);
+}
+
+void VrContentViewCoreImplDelegate::SendPinchEvent(long time_ms,
+ float x,
+ float y,
+ float dz,
+ int type) {
+ switch (type) {
+ case GESTURE_EVENT_TYPE_PINCH_BEGIN: {
+ WebGestureEvent event_start =
+ MakeGestureEvent(WebInputEvent::GesturePinchBegin, time_ms, x, y);
+ SendGestureEvent(event_start);
+ break;
+ }
+ case GESTURE_EVENT_TYPE_PINCH_BY: {
+ WebGestureEvent event =
+ MakeGestureEvent(WebInputEvent::GesturePinchUpdate, time_ms, x, y);
+ event.data.pinchUpdate.scale = dz;
+
+ SendGestureEvent(event);
+ break;
+ }
+ case GESTURE_EVENT_TYPE_PINCH_END: {
+ WebGestureEvent event_end =
+ MakeGestureEvent(WebInputEvent::GesturePinchEnd, time_ms, 0, 0);
+ SendGestureEvent(event_end);
+ break;
+ }
+ }
+}
+
+WebGestureEvent VrContentViewCoreImplDelegate::MakeGestureEvent(
+ WebInputEvent::Type type,
+ int64_t time_ms,
+ float x,
+ float y) const {
+ return WebGestureEventBuilder::Build(type, time_ms / 1000.0, x / dpi_scale_,
+ y / dpi_scale_);
+}
+
+void VrContentViewCoreImplDelegate::SendGestureEvent(
+ const blink::WebGestureEvent& event) {
+ RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
+ content_view_core_impl_->GetWebContents()->GetRenderWidgetHostView());
+ if (rwhv)
+ rwhv->SendGestureEvent(event);
+}
+
+void VrContentViewCoreImplDelegate::SendMouseEvent(
+ const blink::WebMouseEvent& event) {
+ RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
+ content_view_core_impl_->GetWebContents()->GetRenderWidgetHostView());
+ if (rwhv)
+ rwhv->SendMouseEvent(event);
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698