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

Side by Side Diff: ui/android/event_forwarder.cc

Issue 2896993002: Route OnDragEvent through ViewAndroid tree (Closed)
Patch Set: +ui/base Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "ui/android/event_forwarder.h" 5 #include "ui/android/event_forwarder.h"
6 6
7 #include "base/android/jni_array.h"
7 #include "base/metrics/histogram_macros.h" 8 #include "base/metrics/histogram_macros.h"
8 #include "jni/EventForwarder_jni.h" 9 #include "jni/EventForwarder_jni.h"
9 #include "ui/android/view_android.h" 10 #include "ui/android/view_android.h"
10 #include "ui/android/view_client.h" 11 #include "ui/base/ui_base_switches_util.h"
12 #include "ui/events/android/drag_event_android.h"
11 #include "ui/events/android/motion_event_android.h" 13 #include "ui/events/android/motion_event_android.h"
12 #include "ui/events/base_event_utils.h" 14 #include "ui/events/base_event_utils.h"
13 15
14 namespace ui { 16 namespace ui {
15 17
18 using base::android::AppendJavaStringArrayToStringVector;
16 using base::android::JavaParamRef; 19 using base::android::JavaParamRef;
17 using base::android::ScopedJavaLocalRef; 20 using base::android::ScopedJavaLocalRef;
18 21
19 EventForwarder::EventForwarder(ViewAndroid* view) : view_(view) {} 22 EventForwarder::EventForwarder(ViewAndroid* view) : view_(view) {}
20 23
21 EventForwarder::~EventForwarder() { 24 EventForwarder::~EventForwarder() {
22 if (!java_obj_.is_null()) { 25 if (!java_obj_.is_null()) {
23 Java_EventForwarder_destroy(base::android::AttachCurrentThread(), 26 Java_EventForwarder_destroy(base::android::AttachCurrentThread(),
24 java_obj_); 27 java_obj_);
25 java_obj_.Reset(); 28 java_obj_.Reset();
26 } 29 }
27 } 30 }
28 31
29 ScopedJavaLocalRef<jobject> EventForwarder::GetJavaObject() { 32 ScopedJavaLocalRef<jobject> EventForwarder::GetJavaObject() {
30 if (java_obj_.is_null()) { 33 if (java_obj_.is_null()) {
34 JNIEnv* env = base::android::AttachCurrentThread();
31 java_obj_.Reset( 35 java_obj_.Reset(
32 Java_EventForwarder_create(base::android::AttachCurrentThread(), 36 Java_EventForwarder_create(env, reinterpret_cast<intptr_t>(this),
33 reinterpret_cast<intptr_t>(this))); 37 switches::IsTouchDragDropEnabled()));
34 } 38 }
35 return ScopedJavaLocalRef<jobject>(java_obj_); 39 return ScopedJavaLocalRef<jobject>(java_obj_);
36 } 40 }
37 41
38 jboolean EventForwarder::OnTouchEvent(JNIEnv* env, 42 jboolean EventForwarder::OnTouchEvent(JNIEnv* env,
39 const JavaParamRef<jobject>& obj, 43 const JavaParamRef<jobject>& obj,
40 const JavaParamRef<jobject>& motion_event, 44 const JavaParamRef<jobject>& motion_event,
41 jlong time_ms, 45 jlong time_ms,
42 jint android_action, 46 jint android_action,
43 jint pointer_count, 47 jint pointer_count,
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 ui::MotionEventAndroid event(env, nullptr, 1.f / view_->GetDipScale(), 134 ui::MotionEventAndroid event(env, nullptr, 1.f / view_->GetDipScale(),
131 ticks_x, ticks_y, pixels_per_tick, time_ms, 135 ticks_x, ticks_y, pixels_per_tick, time_ms,
132 0 /* action */, 1 /* pointer_count */, 136 0 /* action */, 1 /* pointer_count */,
133 0 /* history_size */, 0 /* action_index */, 0, 0, 137 0 /* history_size */, 0 /* action_index */, 0, 0,
134 0, 0 /* raw_offset_x_pixels */, 138 0, 0 /* raw_offset_x_pixels */,
135 0 /* raw_offset_y_pixels */, &pointer, nullptr); 139 0 /* raw_offset_y_pixels */, &pointer, nullptr);
136 140
137 view_->OnMouseWheelEvent(event); 141 view_->OnMouseWheelEvent(event);
138 } 142 }
139 143
144 void EventForwarder::OnDragEvent(JNIEnv* env,
145 const JavaParamRef<jobject>& jobj,
146 jint action,
147 jint x,
148 jint y,
149 jint screen_x,
150 jint screen_y,
151 const JavaParamRef<jobjectArray>& j_mimeTypes,
152 const JavaParamRef<jstring>& j_content) {
153 float dip_scale = view_->GetDipScale();
154 gfx::PointF location(x / dip_scale, y / dip_scale);
155 gfx::PointF root_location(screen_x / dip_scale, screen_y / dip_scale);
156 std::vector<base::string16> mime_types;
157 AppendJavaStringArrayToStringVector(env, j_mimeTypes, &mime_types);
158
159 DragEventAndroid event(env, action, location, root_location, mime_types,
160 j_content.obj());
161 view_->OnDragEvent(event);
162 }
163
140 bool RegisterEventForwarder(JNIEnv* env) { 164 bool RegisterEventForwarder(JNIEnv* env) {
141 return RegisterNativesImpl(env); 165 return RegisterNativesImpl(env);
142 } 166 }
143 167
144 } // namespace ui 168 } // namespace ui
OLDNEW
« no previous file with comments | « ui/android/event_forwarder.h ('k') | ui/android/java/src/org/chromium/ui/base/EventForwarder.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698