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 |