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

Side by Side Diff: blimp/client/android/blimp_view.cc

Issue 1430623004: blimp: Add support for input handling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "blimp/client/android/blimp_view.h" 5 #include "blimp/client/android/blimp_view.h"
6 6
7 #include "blimp/client/compositor/blimp_compositor_android.h" 7 #include "blimp/client/compositor/blimp_compositor_android.h"
8 #include "jni/BlimpView_jni.h" 8 #include "jni/BlimpView_jni.h"
9 #include "ui/events/android/motion_event_android.h"
10 #include "ui/events/blink/blink_event_util.h"
11 #include "ui/events/gesture_detection/gesture_provider_config_helper.h"
9 #include "ui/gfx/geometry/size.h" 12 #include "ui/gfx/geometry/size.h"
13 #include "third_party/WebKit/public/web/WebInputEvent.h"
10 14
11 namespace blimp { 15 namespace blimp {
12 16
13 // static 17 // static
14 static jlong Init(JNIEnv* env, 18 static jlong Init(JNIEnv* env,
15 const JavaParamRef<jobject>& jobj, 19 const JavaParamRef<jobject>& jobj,
16 jint real_width, 20 jint real_width,
17 jint real_height, 21 jint real_height,
18 jint width, 22 jint width,
19 jint height, 23 jint height,
20 jfloat dp_to_px) { 24 jfloat dp_to_px) {
21 return reinterpret_cast<intptr_t>( 25 return reinterpret_cast<intptr_t>(
22 new BlimpView(env, jobj, gfx::Size(real_width, real_height), 26 new BlimpView(env, jobj, gfx::Size(real_width, real_height),
23 gfx::Size(width, height), dp_to_px)); 27 gfx::Size(width, height), dp_to_px));
24 } 28 }
25 29
26 // static 30 // static
27 bool BlimpView::RegisterJni(JNIEnv* env) { 31 bool BlimpView::RegisterJni(JNIEnv* env) {
28 return RegisterNativesImpl(env); 32 return RegisterNativesImpl(env);
29 } 33 }
30 34
31 BlimpView::BlimpView(JNIEnv* env, 35 BlimpView::BlimpView(JNIEnv* env,
32 const JavaParamRef<jobject>& jobj, 36 const JavaParamRef<jobject>& jobj,
33 const gfx::Size& real_size, 37 const gfx::Size& real_size,
34 const gfx::Size& size, 38 const gfx::Size& size,
35 float dp_to_px) 39 float dp_to_px)
36 : compositor_(BlimpCompositorAndroid::Create(real_size, size, dp_to_px)), 40 : device_scale_factor_(dp_to_px),
41 compositor_(BlimpCompositorAndroid::Create(real_size, size, dp_to_px)),
42 // TODO(khushalsagar): Verify if any default configurations need to be
43 // changed.
44 gesture_provider_(ui::GetGestureProviderConfig(
45 ui::GestureProviderConfigType::CURRENT_PLATFORM), this),
37 current_surface_format_(0) { 46 current_surface_format_(0) {
38 java_obj_.Reset(env, jobj); 47 java_obj_.Reset(env, jobj);
39 } 48 }
40 49
41 BlimpView::~BlimpView() {} 50 BlimpView::~BlimpView() {}
42 51
43 void BlimpView::Destroy(JNIEnv* env, jobject jobj) { 52 void BlimpView::Destroy(JNIEnv* env, jobject jobj) {
44 delete this; 53 delete this;
45 } 54 }
46 55
(...skipping 19 matching lines...) Expand all
66 75
67 void BlimpView::OnSurfaceDestroyed(JNIEnv* env, jobject jobj) { 76 void BlimpView::OnSurfaceDestroyed(JNIEnv* env, jobject jobj) {
68 current_surface_format_ = 0 /** PixelFormat.UNKNOWN */; 77 current_surface_format_ = 0 /** PixelFormat.UNKNOWN */;
69 compositor_->SetSurface(env, 0 /** nullptr jobject */); 78 compositor_->SetSurface(env, 0 /** nullptr jobject */);
70 } 79 }
71 80
72 void BlimpView::SetVisibility(JNIEnv* env, jobject jobj, jboolean visible) { 81 void BlimpView::SetVisibility(JNIEnv* env, jobject jobj, jboolean visible) {
73 compositor_->SetVisible(visible); 82 compositor_->SetVisible(visible);
74 } 83 }
75 84
85 jboolean BlimpView::OnTouchEvent(JNIEnv* env,
86 jobject obj,
87 jobject motion_event,
88 jlong time_ms,
89 jint android_action,
90 jint pointer_count,
91 jint history_size,
92 jint action_index,
93 jfloat pos_x_0,
94 jfloat pos_y_0,
95 jfloat pos_x_1,
96 jfloat pos_y_1,
97 jint pointer_id_0,
98 jint pointer_id_1,
99 jfloat touch_major_0,
100 jfloat touch_major_1,
101 jfloat touch_minor_0,
102 jfloat touch_minor_1,
103 jfloat orientation_0,
104 jfloat orientation_1,
105 jfloat raw_pos_x,
106 jfloat raw_pos_y,
107 jint android_tool_type_0,
108 jint android_tool_type_1,
109 jint android_button_state,
110 jint android_meta_state) {
111
112 ui::MotionEventAndroid::Pointer pointer0(pointer_id_0,
113 pos_x_0,
David Trainor- moved to gerrit 2015/11/02 16:55:30 fix indentation. Same for all other MotionEventAn
Khushal 2015/12/01 08:22:25 Done.
114 pos_y_0,
115 touch_major_0,
116 touch_minor_0,
117 orientation_0,
118 android_tool_type_0);
119 ui::MotionEventAndroid::Pointer pointer1(pointer_id_1,
120 pos_x_1,
121 pos_y_1,
122 touch_major_1,
123 touch_minor_1,
124 orientation_1,
125 android_tool_type_1);
126 ui::MotionEventAndroid event(1.f / device_scale_factor_,
127 env,
128 motion_event,
129 time_ms,
130 android_action,
131 pointer_count,
132 history_size,
133 action_index,
134 android_button_state,
135 android_meta_state,
136 raw_pos_x - pos_x_0,
137 raw_pos_y - pos_y_0,
138 pointer0,
139 pointer1);
140
141 ui::FilteredGestureProvider::TouchHandlingResult result =
142 gesture_provider_.OnTouchEvent(event);
143 if (!result.succeeded)
David Trainor- moved to gerrit 2015/11/02 16:55:30 indentation
Khushal 2015/12/01 08:22:25 Moved to BlimpInputManager.
144 return false;
145
146 blink::WebTouchEvent web_event =
147 ui::CreateWebTouchEventFromMotionEvent(event, result.did_generate_scroll);
148
149 // Touch events are queued in the Gesture Provider until acknowledged to
150 // allow them to be consumed by the touch event handlers in blink which can
151 // prevent-default on the event. Since we currently do not support touch
152 // handlers the event is always acknowledged as not consumed.
153 // TODO(khushalsagar): Add support for touch events to blink.
David Trainor- moved to gerrit 2015/11/02 16:55:30 s/blink/blimp?
Khushal 2015/12/01 08:22:25 Moved to BlimpInputManager.
154 gesture_provider_.OnTouchEventAck(web_event.uniqueTouchEventId, false);
155
156 return true;
157 }
158
159 void BlimpView::OnGestureEvent(const ui::GestureEventData& gesture) {
160 blink::WebGestureEvent web_gesture =
161 ui::CreateWebGestureEventFromGestureEventData(gesture);
162 // TODO(jdduke): Remove this workaround after Android fixes UiAutomator to
163 // stop providing shift meta values to synthetic MotionEvents. This prevents
164 // unintended shift+click interpretation of all accessibility clicks.
165 // See crbug.com/443247.
166 if (web_gesture.type == blink::WebInputEvent::GestureTap &&
167 web_gesture.modifiers == blink::WebInputEvent::ShiftKey) {
168 web_gesture.modifiers = 0;
169 }
170
171 // TODO(khushalsagar): Use the GestureEventQueue.
David Trainor- moved to gerrit 2015/11/02 16:55:30 TODO: Push the event to the compositor?
Khushal 2015/12/01 08:22:25 Done. Moved to BlimpInputManager.
172 }
173
76 } // namespace blimp 174 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698