|
1 /* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- |
|
2 * This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 #ifndef AndroidJavaWrappers_h__ |
|
7 #define AndroidJavaWrappers_h__ |
|
8 |
|
9 #include <jni.h> |
|
10 #include <android/input.h> |
|
11 #include <android/log.h> |
|
12 |
|
13 #include "nsGeoPosition.h" |
|
14 #include "nsRect.h" |
|
15 #include "nsString.h" |
|
16 #include "nsTArray.h" |
|
17 #include "nsIObserver.h" |
|
18 #include "nsIAndroidBridge.h" |
|
19 #include "mozilla/gfx/Rect.h" |
|
20 #include "mozilla/dom/Touch.h" |
|
21 #include "mozilla/EventForwards.h" |
|
22 #include "InputData.h" |
|
23 #include "Units.h" |
|
24 |
|
25 //#define FORCE_ALOG 1 |
|
26 |
|
27 class nsIAndroidDisplayport; |
|
28 class nsIAndroidViewport; |
|
29 class nsIWidget; |
|
30 |
|
31 namespace mozilla { |
|
32 |
|
33 class AutoLocalJNIFrame; |
|
34 |
|
35 void InitAndroidJavaWrappers(JNIEnv *jEnv); |
|
36 |
|
37 /* |
|
38 * Note: do not store global refs to any WrappedJavaObject; |
|
39 * these are live only during a particular JNI method, as |
|
40 * NewGlobalRef is -not- called on the jobject. |
|
41 * |
|
42 * If this is needed, WrappedJavaObject can be extended to |
|
43 * handle it. |
|
44 */ |
|
45 |
|
46 class RefCountedJavaObject { |
|
47 public: |
|
48 RefCountedJavaObject(JNIEnv* env, jobject obj) : mRefCnt(0), mObject(env->NewGlobalRef(obj)) {} |
|
49 |
|
50 ~RefCountedJavaObject(); |
|
51 |
|
52 int32_t AddRef() { return ++mRefCnt; } |
|
53 |
|
54 int32_t Release() { |
|
55 int32_t refcnt = --mRefCnt; |
|
56 if (refcnt == 0) |
|
57 delete this; |
|
58 return refcnt; |
|
59 } |
|
60 |
|
61 jobject GetObject() { return mObject; } |
|
62 private: |
|
63 int32_t mRefCnt; |
|
64 jobject mObject; |
|
65 }; |
|
66 |
|
67 class WrappedJavaObject { |
|
68 public: |
|
69 WrappedJavaObject() : |
|
70 wrapped_obj(nullptr) |
|
71 { } |
|
72 |
|
73 WrappedJavaObject(jobject jobj) : wrapped_obj(nullptr) { |
|
74 Init(jobj); |
|
75 } |
|
76 |
|
77 void Init(jobject jobj) { |
|
78 wrapped_obj = jobj; |
|
79 } |
|
80 |
|
81 bool isNull() const { |
|
82 return wrapped_obj == nullptr; |
|
83 } |
|
84 |
|
85 jobject wrappedObject() const { |
|
86 return wrapped_obj; |
|
87 } |
|
88 |
|
89 protected: |
|
90 jobject wrapped_obj; |
|
91 }; |
|
92 |
|
93 class AutoGlobalWrappedJavaObject : protected WrappedJavaObject{ |
|
94 public: |
|
95 AutoGlobalWrappedJavaObject() : |
|
96 wrapped_obj(nullptr) |
|
97 { } |
|
98 |
|
99 AutoGlobalWrappedJavaObject(jobject jobj, JNIEnv* env) : wrapped_obj(nullptr) { |
|
100 Init(jobj, env); |
|
101 } |
|
102 |
|
103 virtual ~AutoGlobalWrappedJavaObject(); |
|
104 void Dispose(); |
|
105 |
|
106 void Init(jobject jobj, JNIEnv* env) { |
|
107 if (!isNull()) { |
|
108 env->DeleteGlobalRef(wrapped_obj); |
|
109 } |
|
110 wrapped_obj = env->NewGlobalRef(jobj); |
|
111 } |
|
112 |
|
113 bool isNull() const { |
|
114 return wrapped_obj == nullptr; |
|
115 } |
|
116 |
|
117 jobject wrappedObject() const { |
|
118 return wrapped_obj; |
|
119 } |
|
120 |
|
121 protected: |
|
122 jobject wrapped_obj; |
|
123 }; |
|
124 |
|
125 class AndroidPoint : public WrappedJavaObject |
|
126 { |
|
127 public: |
|
128 static void InitPointClass(JNIEnv *jEnv); |
|
129 |
|
130 AndroidPoint() { } |
|
131 AndroidPoint(JNIEnv *jenv, jobject jobj) { |
|
132 Init(jenv, jobj); |
|
133 } |
|
134 |
|
135 void Init(JNIEnv *jenv, jobject jobj); |
|
136 |
|
137 int X() { return mX; } |
|
138 int Y() { return mY; } |
|
139 |
|
140 protected: |
|
141 int mX; |
|
142 int mY; |
|
143 |
|
144 static jclass jPointClass; |
|
145 static jfieldID jXField; |
|
146 static jfieldID jYField; |
|
147 }; |
|
148 |
|
149 class AndroidRect : public WrappedJavaObject |
|
150 { |
|
151 public: |
|
152 static void InitRectClass(JNIEnv *jEnv); |
|
153 |
|
154 AndroidRect() { } |
|
155 AndroidRect(JNIEnv *jenv, jobject jobj) { |
|
156 Init(jenv, jobj); |
|
157 } |
|
158 |
|
159 void Init(JNIEnv *jenv, jobject jobj); |
|
160 |
|
161 int Bottom() { return mBottom; } |
|
162 int Left() { return mLeft; } |
|
163 int Right() { return mRight; } |
|
164 int Top() { return mTop; } |
|
165 int Width() { return mRight - mLeft; } |
|
166 int Height() { return mBottom - mTop; } |
|
167 |
|
168 protected: |
|
169 int mBottom; |
|
170 int mLeft; |
|
171 int mRight; |
|
172 int mTop; |
|
173 |
|
174 static jclass jRectClass; |
|
175 static jfieldID jBottomField; |
|
176 static jfieldID jLeftField; |
|
177 static jfieldID jRightField; |
|
178 static jfieldID jTopField; |
|
179 }; |
|
180 |
|
181 class AndroidRectF : public WrappedJavaObject |
|
182 { |
|
183 public: |
|
184 static void InitRectFClass(JNIEnv *jEnv); |
|
185 |
|
186 AndroidRectF() { } |
|
187 AndroidRectF(JNIEnv *jenv, jobject jobj) { |
|
188 Init(jenv, jobj); |
|
189 } |
|
190 |
|
191 void Init(JNIEnv *jenv, jobject jobj); |
|
192 |
|
193 float Bottom() { return mBottom; } |
|
194 float Left() { return mLeft; } |
|
195 float Right() { return mRight; } |
|
196 float Top() { return mTop; } |
|
197 float Width() { return mRight - mLeft; } |
|
198 float Height() { return mBottom - mTop; } |
|
199 |
|
200 protected: |
|
201 float mBottom; |
|
202 float mLeft; |
|
203 float mRight; |
|
204 float mTop; |
|
205 |
|
206 static jclass jRectClass; |
|
207 static jfieldID jBottomField; |
|
208 static jfieldID jLeftField; |
|
209 static jfieldID jRightField; |
|
210 static jfieldID jTopField; |
|
211 }; |
|
212 |
|
213 class AndroidLayerRendererFrame : public WrappedJavaObject { |
|
214 public: |
|
215 static void InitLayerRendererFrameClass(JNIEnv *jEnv); |
|
216 |
|
217 void Init(JNIEnv *env, jobject jobj); |
|
218 void Dispose(JNIEnv *env); |
|
219 |
|
220 bool BeginDrawing(AutoLocalJNIFrame *jniFrame); |
|
221 bool DrawBackground(AutoLocalJNIFrame *jniFrame); |
|
222 bool DrawForeground(AutoLocalJNIFrame *jniFrame); |
|
223 bool EndDrawing(AutoLocalJNIFrame *jniFrame); |
|
224 |
|
225 private: |
|
226 static jclass jLayerRendererFrameClass; |
|
227 static jmethodID jBeginDrawingMethod; |
|
228 static jmethodID jDrawBackgroundMethod; |
|
229 static jmethodID jDrawForegroundMethod; |
|
230 static jmethodID jEndDrawingMethod; |
|
231 }; |
|
232 |
|
233 enum { |
|
234 // These keycode masks are not defined in android/keycodes.h: |
|
235 AKEYCODE_ESCAPE = 111, |
|
236 AKEYCODE_FORWARD_DEL = 112, |
|
237 AKEYCODE_CTRL_LEFT = 113, |
|
238 AKEYCODE_CTRL_RIGHT = 114, |
|
239 AKEYCODE_CAPS_LOCK = 115, |
|
240 AKEYCODE_SCROLL_LOCK = 116, |
|
241 AKEYCODE_META_LEFT = 117, |
|
242 AKEYCODE_META_RIGHT = 118, |
|
243 AKEYCODE_FUNCTION = 119, |
|
244 AKEYCODE_SYSRQ = 120, |
|
245 AKEYCODE_BREAK = 121, |
|
246 AKEYCODE_MOVE_HOME = 122, |
|
247 AKEYCODE_MOVE_END = 123, |
|
248 AKEYCODE_INSERT = 124, |
|
249 AKEYCODE_FORWARD = 125, |
|
250 AKEYCODE_MEDIA_PLAY = 126, |
|
251 AKEYCODE_MEDIA_PAUSE = 127, |
|
252 AKEYCODE_MEDIA_CLOSE = 128, |
|
253 AKEYCODE_MEDIA_EJECT = 129, |
|
254 AKEYCODE_MEDIA_RECORD = 130, |
|
255 AKEYCODE_F1 = 131, |
|
256 AKEYCODE_F2 = 132, |
|
257 AKEYCODE_F3 = 133, |
|
258 AKEYCODE_F4 = 134, |
|
259 AKEYCODE_F5 = 135, |
|
260 AKEYCODE_F6 = 136, |
|
261 AKEYCODE_F7 = 137, |
|
262 AKEYCODE_F8 = 138, |
|
263 AKEYCODE_F9 = 139, |
|
264 AKEYCODE_F10 = 140, |
|
265 AKEYCODE_F11 = 141, |
|
266 AKEYCODE_F12 = 142, |
|
267 AKEYCODE_NUM_LOCK = 143, |
|
268 AKEYCODE_NUMPAD_0 = 144, |
|
269 AKEYCODE_NUMPAD_1 = 145, |
|
270 AKEYCODE_NUMPAD_2 = 146, |
|
271 AKEYCODE_NUMPAD_3 = 147, |
|
272 AKEYCODE_NUMPAD_4 = 148, |
|
273 AKEYCODE_NUMPAD_5 = 149, |
|
274 AKEYCODE_NUMPAD_6 = 150, |
|
275 AKEYCODE_NUMPAD_7 = 151, |
|
276 AKEYCODE_NUMPAD_8 = 152, |
|
277 AKEYCODE_NUMPAD_9 = 153, |
|
278 AKEYCODE_NUMPAD_DIVIDE = 154, |
|
279 AKEYCODE_NUMPAD_MULTIPLY = 155, |
|
280 AKEYCODE_NUMPAD_SUBTRACT = 156, |
|
281 AKEYCODE_NUMPAD_ADD = 157, |
|
282 AKEYCODE_NUMPAD_DOT = 158, |
|
283 AKEYCODE_NUMPAD_COMMA = 159, |
|
284 AKEYCODE_NUMPAD_ENTER = 160, |
|
285 AKEYCODE_NUMPAD_EQUALS = 161, |
|
286 AKEYCODE_NUMPAD_LEFT_PAREN = 162, |
|
287 AKEYCODE_NUMPAD_RIGHT_PAREN = 163, |
|
288 AKEYCODE_VOLUME_MUTE = 164, |
|
289 AKEYCODE_INFO = 165, |
|
290 AKEYCODE_CHANNEL_UP = 166, |
|
291 AKEYCODE_CHANNEL_DOWN = 167, |
|
292 AKEYCODE_ZOOM_IN = 168, |
|
293 AKEYCODE_ZOOM_OUT = 169, |
|
294 AKEYCODE_TV = 170, |
|
295 AKEYCODE_WINDOW = 171, |
|
296 AKEYCODE_GUIDE = 172, |
|
297 AKEYCODE_DVR = 173, |
|
298 AKEYCODE_BOOKMARK = 174, |
|
299 AKEYCODE_CAPTIONS = 175, |
|
300 AKEYCODE_SETTINGS = 176, |
|
301 AKEYCODE_TV_POWER = 177, |
|
302 AKEYCODE_TV_INPUT = 178, |
|
303 AKEYCODE_STB_POWER = 179, |
|
304 AKEYCODE_STB_INPUT = 180, |
|
305 AKEYCODE_AVR_POWER = 181, |
|
306 AKEYCODE_AVR_INPUT = 182, |
|
307 AKEYCODE_PROG_RED = 183, |
|
308 AKEYCODE_PROG_GREEN = 184, |
|
309 AKEYCODE_PROG_YELLOW = 185, |
|
310 AKEYCODE_PROG_BLUE = 186, |
|
311 AKEYCODE_APP_SWITCH = 187, |
|
312 AKEYCODE_BUTTON_1 = 188, |
|
313 AKEYCODE_BUTTON_2 = 189, |
|
314 AKEYCODE_BUTTON_3 = 190, |
|
315 AKEYCODE_BUTTON_4 = 191, |
|
316 AKEYCODE_BUTTON_5 = 192, |
|
317 AKEYCODE_BUTTON_6 = 193, |
|
318 AKEYCODE_BUTTON_7 = 194, |
|
319 AKEYCODE_BUTTON_8 = 195, |
|
320 AKEYCODE_BUTTON_9 = 196, |
|
321 AKEYCODE_BUTTON_10 = 197, |
|
322 AKEYCODE_BUTTON_11 = 198, |
|
323 AKEYCODE_BUTTON_12 = 199, |
|
324 AKEYCODE_BUTTON_13 = 200, |
|
325 AKEYCODE_BUTTON_14 = 201, |
|
326 AKEYCODE_BUTTON_15 = 202, |
|
327 AKEYCODE_BUTTON_16 = 203, |
|
328 AKEYCODE_LANGUAGE_SWITCH = 204, |
|
329 AKEYCODE_MANNER_MODE = 205, |
|
330 AKEYCODE_3D_MODE = 206, |
|
331 AKEYCODE_CONTACTS = 207, |
|
332 AKEYCODE_CALENDAR = 208, |
|
333 AKEYCODE_MUSIC = 209, |
|
334 AKEYCODE_CALCULATOR = 210, |
|
335 AKEYCODE_ZENKAKU_HANKAKU = 211, |
|
336 AKEYCODE_EISU = 212, |
|
337 AKEYCODE_MUHENKAN = 213, |
|
338 AKEYCODE_HENKAN = 214, |
|
339 AKEYCODE_KATAKANA_HIRAGANA = 215, |
|
340 AKEYCODE_YEN = 216, |
|
341 AKEYCODE_RO = 217, |
|
342 AKEYCODE_KANA = 218, |
|
343 AKEYCODE_ASSIST = 219, |
|
344 |
|
345 AMETA_FUNCTION_ON = 0x00000008, |
|
346 AMETA_CTRL_ON = 0x00001000, |
|
347 AMETA_CTRL_LEFT_ON = 0x00002000, |
|
348 AMETA_CTRL_RIGHT_ON = 0x00004000, |
|
349 AMETA_META_ON = 0x00010000, |
|
350 AMETA_META_LEFT_ON = 0x00020000, |
|
351 AMETA_META_RIGHT_ON = 0x00040000, |
|
352 AMETA_CAPS_LOCK_ON = 0x00100000, |
|
353 AMETA_NUM_LOCK_ON = 0x00200000, |
|
354 AMETA_SCROLL_LOCK_ON = 0x00400000, |
|
355 |
|
356 AMETA_ALT_MASK = AMETA_ALT_LEFT_ON | AMETA_ALT_RIGHT_ON | AMETA_ALT_ON, |
|
357 AMETA_CTRL_MASK = AMETA_CTRL_LEFT_ON | AMETA_CTRL_RIGHT_ON | AMETA_CTRL_ON, |
|
358 AMETA_META_MASK = AMETA_META_LEFT_ON | AMETA_META_RIGHT_ON | AMETA_META_ON, |
|
359 AMETA_SHIFT_MASK = AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_RIGHT_ON | AMETA_SHIFT_ON, |
|
360 }; |
|
361 |
|
362 class nsAndroidDisplayport MOZ_FINAL : public nsIAndroidDisplayport |
|
363 { |
|
364 public: |
|
365 NS_DECL_ISUPPORTS |
|
366 virtual nsresult GetLeft(float *aLeft) { *aLeft = mLeft; return NS_OK; } |
|
367 virtual nsresult GetTop(float *aTop) { *aTop = mTop; return NS_OK; } |
|
368 virtual nsresult GetRight(float *aRight) { *aRight = mRight; return NS_OK; } |
|
369 virtual nsresult GetBottom(float *aBottom) { *aBottom = mBottom; return NS_OK; } |
|
370 virtual nsresult GetResolution(float *aResolution) { *aResolution = mResolution; return NS_OK; } |
|
371 virtual nsresult SetLeft(float aLeft) { mLeft = aLeft; return NS_OK; } |
|
372 virtual nsresult SetTop(float aTop) { mTop = aTop; return NS_OK; } |
|
373 virtual nsresult SetRight(float aRight) { mRight = aRight; return NS_OK; } |
|
374 virtual nsresult SetBottom(float aBottom) { mBottom = aBottom; return NS_OK; } |
|
375 virtual nsresult SetResolution(float aResolution) { mResolution = aResolution; return NS_OK; } |
|
376 |
|
377 nsAndroidDisplayport(AndroidRectF aRect, float aResolution): |
|
378 mLeft(aRect.Left()), mTop(aRect.Top()), mRight(aRect.Right()), mBottom(aRect.Bottom()), mResolution(aResolution) {} |
|
379 |
|
380 private: |
|
381 ~nsAndroidDisplayport() {} |
|
382 float mLeft, mTop, mRight, mBottom, mResolution; |
|
383 }; |
|
384 |
|
385 class AndroidMotionEvent |
|
386 { |
|
387 public: |
|
388 enum { |
|
389 ACTION_DOWN = 0, |
|
390 ACTION_UP = 1, |
|
391 ACTION_MOVE = 2, |
|
392 ACTION_CANCEL = 3, |
|
393 ACTION_OUTSIDE = 4, |
|
394 ACTION_POINTER_DOWN = 5, |
|
395 ACTION_POINTER_UP = 6, |
|
396 ACTION_HOVER_MOVE = 7, |
|
397 ACTION_HOVER_ENTER = 9, |
|
398 ACTION_HOVER_EXIT = 10, |
|
399 ACTION_MAGNIFY_START = 11, |
|
400 ACTION_MAGNIFY = 12, |
|
401 ACTION_MAGNIFY_END = 13, |
|
402 EDGE_TOP = 0x00000001, |
|
403 EDGE_BOTTOM = 0x00000002, |
|
404 EDGE_LEFT = 0x00000004, |
|
405 EDGE_RIGHT = 0x00000008, |
|
406 SAMPLE_X = 0, |
|
407 SAMPLE_Y = 1, |
|
408 SAMPLE_PRESSURE = 2, |
|
409 SAMPLE_SIZE = 3, |
|
410 NUM_SAMPLE_DATA = 4, |
|
411 dummy_java_enum_list_end |
|
412 }; |
|
413 }; |
|
414 |
|
415 class AndroidLocation : public WrappedJavaObject |
|
416 { |
|
417 public: |
|
418 static void InitLocationClass(JNIEnv *jEnv); |
|
419 static nsGeoPosition* CreateGeoPosition(JNIEnv *jenv, jobject jobj); |
|
420 static jclass jLocationClass; |
|
421 static jmethodID jGetLatitudeMethod; |
|
422 static jmethodID jGetLongitudeMethod; |
|
423 static jmethodID jGetAltitudeMethod; |
|
424 static jmethodID jGetAccuracyMethod; |
|
425 static jmethodID jGetBearingMethod; |
|
426 static jmethodID jGetSpeedMethod; |
|
427 static jmethodID jGetTimeMethod; |
|
428 }; |
|
429 |
|
430 class AndroidGeckoEvent : public WrappedJavaObject |
|
431 { |
|
432 private: |
|
433 AndroidGeckoEvent() { |
|
434 } |
|
435 |
|
436 void Init(JNIEnv *jenv, jobject jobj); |
|
437 void Init(int aType); |
|
438 void Init(AndroidGeckoEvent *aResizeEvent); |
|
439 |
|
440 public: |
|
441 static void InitGeckoEventClass(JNIEnv *jEnv); |
|
442 |
|
443 static AndroidGeckoEvent* MakeNativePoke() { |
|
444 AndroidGeckoEvent *event = new AndroidGeckoEvent(); |
|
445 event->Init(NATIVE_POKE); |
|
446 return event; |
|
447 } |
|
448 |
|
449 static AndroidGeckoEvent* MakeIMEEvent(int aAction) { |
|
450 AndroidGeckoEvent *event = new AndroidGeckoEvent(); |
|
451 event->Init(IME_EVENT); |
|
452 event->mAction = aAction; |
|
453 return event; |
|
454 } |
|
455 |
|
456 static AndroidGeckoEvent* MakeDrawEvent(const nsIntRect& aRect) { |
|
457 AndroidGeckoEvent *event = new AndroidGeckoEvent(); |
|
458 event->Init(DRAW); |
|
459 event->mRect = aRect; |
|
460 return event; |
|
461 } |
|
462 |
|
463 static AndroidGeckoEvent* MakeFromJavaObject(JNIEnv *jenv, jobject jobj) { |
|
464 AndroidGeckoEvent *event = new AndroidGeckoEvent(); |
|
465 event->Init(jenv, jobj); |
|
466 return event; |
|
467 } |
|
468 |
|
469 static AndroidGeckoEvent* CopyResizeEvent(AndroidGeckoEvent *aResizeEvent) { |
|
470 AndroidGeckoEvent *event = new AndroidGeckoEvent(); |
|
471 event->Init(aResizeEvent); |
|
472 return event; |
|
473 } |
|
474 |
|
475 static AndroidGeckoEvent* MakeBroadcastEvent(const nsCString& topic, const nsCString& data) { |
|
476 AndroidGeckoEvent* event = new AndroidGeckoEvent(); |
|
477 event->Init(BROADCAST); |
|
478 CopyUTF8toUTF16(topic, event->mCharacters); |
|
479 CopyUTF8toUTF16(data, event->mCharactersExtra); |
|
480 return event; |
|
481 } |
|
482 |
|
483 static AndroidGeckoEvent* MakeAddObserver(const nsAString &key, nsIObserver *observer) { |
|
484 AndroidGeckoEvent *event = new AndroidGeckoEvent(); |
|
485 event->Init(ADD_OBSERVER); |
|
486 event->mCharacters.Assign(key); |
|
487 event->mObserver = observer; |
|
488 return event; |
|
489 } |
|
490 |
|
491 int Action() { return mAction; } |
|
492 int Type() { return mType; } |
|
493 bool AckNeeded() { return mAckNeeded; } |
|
494 int64_t Time() { return mTime; } |
|
495 const nsTArray<nsIntPoint>& Points() { return mPoints; } |
|
496 const nsTArray<int>& PointIndicies() { return mPointIndicies; } |
|
497 const nsTArray<float>& Pressures() { return mPressures; } |
|
498 const nsTArray<float>& Orientations() { return mOrientations; } |
|
499 const nsTArray<nsIntPoint>& PointRadii() { return mPointRadii; } |
|
500 const nsTArray<nsString>& PrefNames() { return mPrefNames; } |
|
501 double X() { return mX; } |
|
502 double Y() { return mY; } |
|
503 double Z() { return mZ; } |
|
504 const nsIntRect& Rect() { return mRect; } |
|
505 nsAString& Characters() { return mCharacters; } |
|
506 nsAString& CharactersExtra() { return mCharactersExtra; } |
|
507 nsAString& Data() { return mData; } |
|
508 int KeyCode() { return mKeyCode; } |
|
509 int MetaState() { return mMetaState; } |
|
510 uint32_t DomKeyLocation() { return mDomKeyLocation; } |
|
511 Modifiers DOMModifiers() const; |
|
512 bool IsAltPressed() const { return (mMetaState & AMETA_ALT_MASK) != 0; } |
|
513 bool IsShiftPressed() const { return (mMetaState & AMETA_SHIFT_MASK) != 0; } |
|
514 bool IsCtrlPressed() const { return (mMetaState & AMETA_CTRL_MASK) != 0; } |
|
515 bool IsMetaPressed() const { return (mMetaState & AMETA_META_MASK) != 0; } |
|
516 int Flags() { return mFlags; } |
|
517 int UnicodeChar() { return mUnicodeChar; } |
|
518 int BaseUnicodeChar() { return mBaseUnicodeChar; } |
|
519 int DOMPrintableKeyValue() { return mDOMPrintableKeyValue; } |
|
520 int RepeatCount() const { return mRepeatCount; } |
|
521 int Count() { return mCount; } |
|
522 int Start() { return mStart; } |
|
523 int End() { return mEnd; } |
|
524 int PointerIndex() { return mPointerIndex; } |
|
525 int RangeType() { return mRangeType; } |
|
526 int RangeStyles() { return mRangeStyles; } |
|
527 int RangeLineStyle() { return mRangeLineStyle; } |
|
528 bool RangeBoldLine() { return mRangeBoldLine; } |
|
529 int RangeForeColor() { return mRangeForeColor; } |
|
530 int RangeBackColor() { return mRangeBackColor; } |
|
531 int RangeLineColor() { return mRangeLineColor; } |
|
532 nsGeoPosition* GeoPosition() { return mGeoPosition; } |
|
533 int ConnectionType() { return mConnectionType; } |
|
534 bool IsWifi() { return mIsWifi; } |
|
535 int DHCPGateway() { return mDHCPGateway; } |
|
536 short ScreenOrientation() { return mScreenOrientation; } |
|
537 RefCountedJavaObject* ByteBuffer() { return mByteBuffer; } |
|
538 int Width() { return mWidth; } |
|
539 int Height() { return mHeight; } |
|
540 int RequestId() { return mCount; } // for convenience |
|
541 WidgetTouchEvent MakeTouchEvent(nsIWidget* widget); |
|
542 MultiTouchInput MakeMultiTouchInput(nsIWidget* widget); |
|
543 WidgetMouseEvent MakeMouseEvent(nsIWidget* widget); |
|
544 void UnionRect(nsIntRect const& aRect); |
|
545 nsIObserver *Observer() { return mObserver; } |
|
546 |
|
547 protected: |
|
548 int mAction; |
|
549 int mType; |
|
550 bool mAckNeeded; |
|
551 int64_t mTime; |
|
552 nsTArray<nsIntPoint> mPoints; |
|
553 nsTArray<nsIntPoint> mPointRadii; |
|
554 nsTArray<int> mPointIndicies; |
|
555 nsTArray<float> mOrientations; |
|
556 nsTArray<float> mPressures; |
|
557 nsIntRect mRect; |
|
558 int mFlags, mMetaState; |
|
559 uint32_t mDomKeyLocation; |
|
560 int mKeyCode, mUnicodeChar, mBaseUnicodeChar, mDOMPrintableKeyValue; |
|
561 int mRepeatCount; |
|
562 int mCount; |
|
563 int mStart, mEnd; |
|
564 int mRangeType, mRangeStyles, mRangeLineStyle; |
|
565 bool mRangeBoldLine; |
|
566 int mRangeForeColor, mRangeBackColor, mRangeLineColor; |
|
567 double mX, mY, mZ; |
|
568 int mPointerIndex; |
|
569 nsString mCharacters, mCharactersExtra, mData; |
|
570 nsRefPtr<nsGeoPosition> mGeoPosition; |
|
571 int mConnectionType; |
|
572 bool mIsWifi; |
|
573 int mDHCPGateway; |
|
574 short mScreenOrientation; |
|
575 nsRefPtr<RefCountedJavaObject> mByteBuffer; |
|
576 int mWidth, mHeight; |
|
577 nsCOMPtr<nsIObserver> mObserver; |
|
578 nsTArray<nsString> mPrefNames; |
|
579 |
|
580 void ReadIntArray(nsTArray<int> &aVals, |
|
581 JNIEnv *jenv, |
|
582 jfieldID field, |
|
583 int32_t count); |
|
584 void ReadFloatArray(nsTArray<float> &aVals, |
|
585 JNIEnv *jenv, |
|
586 jfieldID field, |
|
587 int32_t count); |
|
588 void ReadPointArray(nsTArray<nsIntPoint> &mPoints, |
|
589 JNIEnv *jenv, |
|
590 jfieldID field, |
|
591 int32_t count); |
|
592 void ReadStringArray(nsTArray<nsString> &aStrings, |
|
593 JNIEnv *jenv, |
|
594 jfieldID field); |
|
595 void ReadRectField(JNIEnv *jenv); |
|
596 void ReadCharactersField(JNIEnv *jenv); |
|
597 void ReadCharactersExtraField(JNIEnv *jenv); |
|
598 void ReadDataField(JNIEnv *jenv); |
|
599 void ReadStringFromJString(nsString &aString, JNIEnv *jenv, jstring s); |
|
600 |
|
601 uint32_t ReadDomKeyLocation(JNIEnv* jenv, jobject jGeckoEventObj); |
|
602 |
|
603 static jclass jGeckoEventClass; |
|
604 static jfieldID jActionField; |
|
605 static jfieldID jTypeField; |
|
606 static jfieldID jAckNeededField; |
|
607 static jfieldID jTimeField; |
|
608 static jfieldID jPoints; |
|
609 static jfieldID jPointIndicies; |
|
610 static jfieldID jOrientations; |
|
611 static jfieldID jPressures; |
|
612 static jfieldID jPointRadii; |
|
613 static jfieldID jXField; |
|
614 static jfieldID jYField; |
|
615 static jfieldID jZField; |
|
616 static jfieldID jDistanceField; |
|
617 static jfieldID jRectField; |
|
618 static jfieldID jNativeWindowField; |
|
619 |
|
620 static jfieldID jCharactersField; |
|
621 static jfieldID jCharactersExtraField; |
|
622 static jfieldID jDataField; |
|
623 static jfieldID jDOMPrintableKeyValueField; |
|
624 static jfieldID jKeyCodeField; |
|
625 static jfieldID jMetaStateField; |
|
626 static jfieldID jDomKeyLocationField; |
|
627 static jfieldID jFlagsField; |
|
628 static jfieldID jCountField; |
|
629 static jfieldID jStartField; |
|
630 static jfieldID jEndField; |
|
631 static jfieldID jPointerIndexField; |
|
632 static jfieldID jUnicodeCharField; |
|
633 static jfieldID jBaseUnicodeCharField; |
|
634 static jfieldID jRepeatCountField; |
|
635 static jfieldID jRangeTypeField; |
|
636 static jfieldID jRangeStylesField; |
|
637 static jfieldID jRangeLineStyleField; |
|
638 static jfieldID jRangeBoldLineField; |
|
639 static jfieldID jRangeForeColorField; |
|
640 static jfieldID jRangeBackColorField; |
|
641 static jfieldID jRangeLineColorField; |
|
642 static jfieldID jLocationField; |
|
643 static jfieldID jPrefNamesField; |
|
644 |
|
645 static jfieldID jConnectionTypeField; |
|
646 static jfieldID jIsWifiField; |
|
647 static jfieldID jDHCPGatewayField; |
|
648 |
|
649 static jfieldID jScreenOrientationField; |
|
650 static jfieldID jByteBufferField; |
|
651 |
|
652 static jfieldID jWidthField; |
|
653 static jfieldID jHeightField; |
|
654 |
|
655 static jclass jDomKeyLocationClass; |
|
656 static jfieldID jDomKeyLocationValueField; |
|
657 |
|
658 public: |
|
659 enum { |
|
660 NATIVE_POKE = 0, |
|
661 KEY_EVENT = 1, |
|
662 MOTION_EVENT = 2, |
|
663 SENSOR_EVENT = 3, |
|
664 LOCATION_EVENT = 5, |
|
665 IME_EVENT = 6, |
|
666 DRAW = 7, |
|
667 SIZE_CHANGED = 8, |
|
668 APP_BACKGROUNDING = 9, |
|
669 APP_FOREGROUNDING = 10, |
|
670 LOAD_URI = 12, |
|
671 NOOP = 15, |
|
672 FORCED_RESIZE = 16, // used internally in nsAppShell/nsWindow |
|
673 BROADCAST = 19, |
|
674 VIEWPORT = 20, |
|
675 VISITED = 21, |
|
676 NETWORK_CHANGED = 22, |
|
677 THUMBNAIL = 25, |
|
678 SCREENORIENTATION_CHANGED = 27, |
|
679 COMPOSITOR_CREATE = 28, |
|
680 COMPOSITOR_PAUSE = 29, |
|
681 COMPOSITOR_RESUME = 30, |
|
682 NATIVE_GESTURE_EVENT = 31, |
|
683 IME_KEY_EVENT = 32, |
|
684 CALL_OBSERVER = 33, |
|
685 REMOVE_OBSERVER = 34, |
|
686 LOW_MEMORY = 35, |
|
687 NETWORK_LINK_CHANGE = 36, |
|
688 TELEMETRY_HISTOGRAM_ADD = 37, |
|
689 ADD_OBSERVER = 38, |
|
690 PREFERENCES_OBSERVE = 39, |
|
691 PREFERENCES_GET = 40, |
|
692 PREFERENCES_REMOVE_OBSERVERS = 41, |
|
693 TELEMETRY_UI_SESSION_START = 42, |
|
694 TELEMETRY_UI_SESSION_STOP = 43, |
|
695 TELEMETRY_UI_EVENT = 44, |
|
696 dummy_java_enum_list_end |
|
697 }; |
|
698 |
|
699 enum { |
|
700 // Memory pressure levels. Keep these in sync with those in MemoryMonitor.java. |
|
701 MEMORY_PRESSURE_NONE = 0, |
|
702 MEMORY_PRESSURE_CLEANUP = 1, |
|
703 MEMORY_PRESSURE_LOW = 2, |
|
704 MEMORY_PRESSURE_MEDIUM = 3, |
|
705 MEMORY_PRESSURE_HIGH = 4 |
|
706 }; |
|
707 |
|
708 enum { |
|
709 // Internal Gecko events |
|
710 IME_FLUSH_CHANGES = -2, |
|
711 IME_UPDATE_CONTEXT = -1, |
|
712 // Events from Java to Gecko |
|
713 IME_SYNCHRONIZE = 0, |
|
714 IME_REPLACE_TEXT = 1, |
|
715 IME_SET_SELECTION = 2, |
|
716 IME_ADD_COMPOSITION_RANGE = 3, |
|
717 IME_UPDATE_COMPOSITION = 4, |
|
718 IME_REMOVE_COMPOSITION = 5, |
|
719 IME_ACKNOWLEDGE_FOCUS = 6, |
|
720 dummy_ime_enum_list_end |
|
721 }; |
|
722 }; |
|
723 |
|
724 class nsJNIString : public nsString |
|
725 { |
|
726 public: |
|
727 nsJNIString(jstring jstr, JNIEnv *jenv); |
|
728 }; |
|
729 |
|
730 } |
|
731 |
|
732 #endif |