2010-06-04 00:56:36 +04:00
|
|
|
/* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
|
|
|
|
* ***** BEGIN LICENSE BLOCK *****
|
|
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
|
|
* the License. You may obtain a copy of the License at
|
|
|
|
* http://www.mozilla.org/MPL/
|
|
|
|
*
|
|
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
|
|
* for the specific language governing rights and limitations under the
|
|
|
|
* License.
|
|
|
|
*
|
|
|
|
* The Original Code is Mozilla Android code.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is Mozilla Foundation.
|
|
|
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
|
|
|
* the Initial Developer. All Rights Reserved.
|
|
|
|
*
|
|
|
|
* Contributor(s):
|
|
|
|
* Vladimir Vukicevic <vladimir@pobox.com>
|
|
|
|
*
|
|
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
|
|
* the provisions above, a recipient may use your version of this file under
|
|
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
|
|
*
|
|
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
|
|
|
|
#include "AndroidJavaWrappers.h"
|
|
|
|
#include "AndroidBridge.h"
|
|
|
|
|
|
|
|
using namespace mozilla;
|
|
|
|
|
|
|
|
jclass AndroidGeckoEvent::jGeckoEventClass = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jActionField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jTypeField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jTimeField = 0;
|
2012-01-25 04:31:33 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jPoints = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jPointIndicies = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jPressures = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jPointRadii = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jOrientations = 0;
|
2011-06-20 09:36:17 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jXField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jYField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jZField = 0;
|
2011-10-29 14:35:29 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jDistanceField = 0;
|
2010-06-04 00:56:36 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jRectField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jNativeWindowField = 0;
|
|
|
|
|
|
|
|
jfieldID AndroidGeckoEvent::jCharactersField = 0;
|
2011-11-15 07:12:14 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jCharactersExtraField = 0;
|
2010-06-04 00:56:36 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jKeyCodeField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jMetaStateField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jFlagsField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jUnicodeCharField = 0;
|
2012-04-20 00:55:33 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jRepeatCountField = 0;
|
2010-08-04 23:47:26 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jOffsetField = 0;
|
2010-06-04 00:56:36 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jCountField = 0;
|
2012-01-25 04:31:33 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jPointerIndexField = 0;
|
2010-08-04 23:47:26 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jRangeTypeField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jRangeStylesField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jRangeForeColorField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jRangeBackColorField = 0;
|
2010-06-05 01:14:43 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jLocationField = 0;
|
2012-01-17 22:40:39 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jBandwidthField = 0;
|
|
|
|
jfieldID AndroidGeckoEvent::jCanBeMeteredField = 0;
|
2012-03-20 17:09:45 +04:00
|
|
|
jfieldID AndroidGeckoEvent::jScreenOrientationField = 0;
|
2010-06-04 00:56:36 +04:00
|
|
|
|
|
|
|
jclass AndroidPoint::jPointClass = 0;
|
|
|
|
jfieldID AndroidPoint::jXField = 0;
|
|
|
|
jfieldID AndroidPoint::jYField = 0;
|
|
|
|
|
|
|
|
jclass AndroidRect::jRectClass = 0;
|
|
|
|
jfieldID AndroidRect::jBottomField = 0;
|
|
|
|
jfieldID AndroidRect::jLeftField = 0;
|
|
|
|
jfieldID AndroidRect::jRightField = 0;
|
|
|
|
jfieldID AndroidRect::jTopField = 0;
|
|
|
|
|
2010-06-05 01:14:43 +04:00
|
|
|
jclass AndroidLocation::jLocationClass = 0;
|
|
|
|
jmethodID AndroidLocation::jGetLatitudeMethod = 0;
|
|
|
|
jmethodID AndroidLocation::jGetLongitudeMethod = 0;
|
|
|
|
jmethodID AndroidLocation::jGetAltitudeMethod = 0;
|
|
|
|
jmethodID AndroidLocation::jGetAccuracyMethod = 0;
|
|
|
|
jmethodID AndroidLocation::jGetBearingMethod = 0;
|
|
|
|
jmethodID AndroidLocation::jGetSpeedMethod = 0;
|
|
|
|
jmethodID AndroidLocation::jGetTimeMethod = 0;
|
|
|
|
|
2012-02-03 10:07:05 +04:00
|
|
|
jclass AndroidGeckoLayerClient::jGeckoLayerClientClass = 0;
|
2012-03-12 19:50:21 +04:00
|
|
|
jmethodID AndroidGeckoLayerClient::jSetFirstPaintViewport = 0;
|
|
|
|
jmethodID AndroidGeckoLayerClient::jSetPageSize = 0;
|
2012-03-17 19:08:22 +04:00
|
|
|
jmethodID AndroidGeckoLayerClient::jSyncViewportInfoMethod = 0;
|
2012-02-22 23:45:44 +04:00
|
|
|
jmethodID AndroidGeckoLayerClient::jCreateFrameMethod = 0;
|
|
|
|
jmethodID AndroidGeckoLayerClient::jActivateProgramMethod = 0;
|
|
|
|
jmethodID AndroidGeckoLayerClient::jDeactivateProgramMethod = 0;
|
2012-02-10 10:58:18 +04:00
|
|
|
|
|
|
|
jclass AndroidLayerRendererFrame::jLayerRendererFrameClass = 0;
|
|
|
|
jmethodID AndroidLayerRendererFrame::jBeginDrawingMethod = 0;
|
|
|
|
jmethodID AndroidLayerRendererFrame::jDrawBackgroundMethod = 0;
|
|
|
|
jmethodID AndroidLayerRendererFrame::jDrawForegroundMethod = 0;
|
|
|
|
jmethodID AndroidLayerRendererFrame::jEndDrawingMethod = 0;
|
2012-02-04 11:31:05 +04:00
|
|
|
|
|
|
|
jclass AndroidViewTransform::jViewTransformClass = 0;
|
|
|
|
jfieldID AndroidViewTransform::jXField = 0;
|
|
|
|
jfieldID AndroidViewTransform::jYField = 0;
|
|
|
|
jfieldID AndroidViewTransform::jScaleField = 0;
|
2012-02-04 03:48:26 +04:00
|
|
|
|
2010-06-04 00:56:36 +04:00
|
|
|
jclass AndroidGeckoSurfaceView::jGeckoSurfaceViewClass = 0;
|
|
|
|
jmethodID AndroidGeckoSurfaceView::jBeginDrawingMethod = 0;
|
|
|
|
jmethodID AndroidGeckoSurfaceView::jEndDrawingMethod = 0;
|
2011-06-16 13:03:00 +04:00
|
|
|
jmethodID AndroidGeckoSurfaceView::jDraw2DBitmapMethod = 0;
|
|
|
|
jmethodID AndroidGeckoSurfaceView::jDraw2DBufferMethod = 0;
|
|
|
|
jmethodID AndroidGeckoSurfaceView::jGetSoftwareDrawBitmapMethod = 0;
|
2010-06-04 00:56:36 +04:00
|
|
|
jmethodID AndroidGeckoSurfaceView::jGetSoftwareDrawBufferMethod = 0;
|
2011-09-21 20:46:00 +04:00
|
|
|
jmethodID AndroidGeckoSurfaceView::jGetSurfaceMethod = 0;
|
2010-06-26 04:52:37 +04:00
|
|
|
jmethodID AndroidGeckoSurfaceView::jGetHolderMethod = 0;
|
2010-06-04 00:56:36 +04:00
|
|
|
|
|
|
|
#define initInit() jclass jClass
|
|
|
|
|
|
|
|
// note that this also sets jClass
|
|
|
|
#define getClassGlobalRef(cname) \
|
|
|
|
(jClass = jclass(jEnv->NewGlobalRef(jEnv->FindClass(cname))))
|
|
|
|
|
|
|
|
#define getField(fname, ftype) \
|
|
|
|
((jfieldID) jEnv->GetFieldID(jClass, fname, ftype))
|
|
|
|
|
|
|
|
#define getMethod(fname, ftype) \
|
|
|
|
((jmethodID) jEnv->GetMethodID(jClass, fname, ftype))
|
|
|
|
|
|
|
|
void
|
|
|
|
mozilla::InitAndroidJavaWrappers(JNIEnv *jEnv)
|
|
|
|
{
|
|
|
|
AndroidGeckoEvent::InitGeckoEventClass(jEnv);
|
|
|
|
AndroidPoint::InitPointClass(jEnv);
|
2010-06-05 01:14:43 +04:00
|
|
|
AndroidLocation::InitLocationClass(jEnv);
|
2011-11-15 07:12:14 +04:00
|
|
|
AndroidRect::InitRectClass(jEnv);
|
2012-02-03 10:07:05 +04:00
|
|
|
AndroidGeckoLayerClient::InitGeckoLayerClientClass(jEnv);
|
2012-02-10 10:58:18 +04:00
|
|
|
AndroidLayerRendererFrame::InitLayerRendererFrameClass(jEnv);
|
2012-02-04 11:31:05 +04:00
|
|
|
AndroidViewTransform::InitViewTransformClass(jEnv);
|
2011-11-15 21:30:59 +04:00
|
|
|
AndroidGeckoSurfaceView::InitGeckoSurfaceViewClass(jEnv);
|
2010-06-04 00:56:36 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
AndroidGeckoEvent::InitGeckoEventClass(JNIEnv *jEnv)
|
|
|
|
{
|
|
|
|
initInit();
|
|
|
|
|
|
|
|
jGeckoEventClass = getClassGlobalRef("org/mozilla/gecko/GeckoEvent");
|
|
|
|
|
|
|
|
jActionField = getField("mAction", "I");
|
|
|
|
jTypeField = getField("mType", "I");
|
|
|
|
jTimeField = getField("mTime", "J");
|
2012-01-25 04:31:33 +04:00
|
|
|
jPoints = getField("mPoints", "[Landroid/graphics/Point;");
|
|
|
|
jPointIndicies = getField("mPointIndicies", "[I");
|
|
|
|
jOrientations = getField("mOrientations", "[F");
|
|
|
|
jPressures = getField("mPressures", "[F");
|
|
|
|
jPointRadii = getField("mPointRadii", "[Landroid/graphics/Point;");
|
2011-06-20 09:36:17 +04:00
|
|
|
jXField = getField("mX", "D");
|
|
|
|
jYField = getField("mY", "D");
|
|
|
|
jZField = getField("mZ", "D");
|
2010-06-04 00:56:36 +04:00
|
|
|
jRectField = getField("mRect", "Landroid/graphics/Rect;");
|
|
|
|
|
|
|
|
jCharactersField = getField("mCharacters", "Ljava/lang/String;");
|
2011-11-15 07:12:14 +04:00
|
|
|
jCharactersExtraField = getField("mCharactersExtra", "Ljava/lang/String;");
|
2010-06-04 00:56:36 +04:00
|
|
|
jKeyCodeField = getField("mKeyCode", "I");
|
|
|
|
jMetaStateField = getField("mMetaState", "I");
|
|
|
|
jFlagsField = getField("mFlags", "I");
|
|
|
|
jUnicodeCharField = getField("mUnicodeChar", "I");
|
2012-04-20 00:55:33 +04:00
|
|
|
jRepeatCountField = getField("mRepeatCount", "I");
|
2010-08-04 23:47:26 +04:00
|
|
|
jOffsetField = getField("mOffset", "I");
|
2010-06-04 00:56:36 +04:00
|
|
|
jCountField = getField("mCount", "I");
|
2012-01-25 04:31:33 +04:00
|
|
|
jPointerIndexField = getField("mPointerIndex", "I");
|
2010-08-04 23:47:26 +04:00
|
|
|
jRangeTypeField = getField("mRangeType", "I");
|
|
|
|
jRangeStylesField = getField("mRangeStyles", "I");
|
|
|
|
jRangeForeColorField = getField("mRangeForeColor", "I");
|
|
|
|
jRangeBackColorField = getField("mRangeBackColor", "I");
|
2010-06-05 01:14:43 +04:00
|
|
|
jLocationField = getField("mLocation", "Landroid/location/Location;");
|
2012-01-17 22:40:39 +04:00
|
|
|
jBandwidthField = getField("mBandwidth", "D");
|
|
|
|
jCanBeMeteredField = getField("mCanBeMetered", "Z");
|
2012-03-20 17:09:45 +04:00
|
|
|
jScreenOrientationField = getField("mScreenOrientation", "S");
|
2010-06-04 00:56:36 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
AndroidGeckoSurfaceView::InitGeckoSurfaceViewClass(JNIEnv *jEnv)
|
|
|
|
{
|
2011-11-15 21:30:59 +04:00
|
|
|
#ifndef MOZ_JAVA_COMPOSITOR
|
2010-06-04 00:56:36 +04:00
|
|
|
initInit();
|
|
|
|
|
|
|
|
jGeckoSurfaceViewClass = getClassGlobalRef("org/mozilla/gecko/GeckoSurfaceView");
|
|
|
|
|
|
|
|
jBeginDrawingMethod = getMethod("beginDrawing", "()I");
|
2011-06-16 13:03:00 +04:00
|
|
|
jGetSoftwareDrawBitmapMethod = getMethod("getSoftwareDrawBitmap", "()Landroid/graphics/Bitmap;");
|
2010-06-04 00:56:36 +04:00
|
|
|
jGetSoftwareDrawBufferMethod = getMethod("getSoftwareDrawBuffer", "()Ljava/nio/ByteBuffer;");
|
|
|
|
jEndDrawingMethod = getMethod("endDrawing", "()V");
|
2011-06-16 13:03:00 +04:00
|
|
|
jDraw2DBitmapMethod = getMethod("draw2D", "(Landroid/graphics/Bitmap;II)V");
|
|
|
|
jDraw2DBufferMethod = getMethod("draw2D", "(Ljava/nio/ByteBuffer;I)V");
|
2011-09-21 20:46:00 +04:00
|
|
|
jGetSurfaceMethod = getMethod("getSurface", "()Landroid/view/Surface;");
|
2010-06-26 04:52:37 +04:00
|
|
|
jGetHolderMethod = getMethod("getHolder", "()Landroid/view/SurfaceHolder;");
|
2011-11-15 21:30:59 +04:00
|
|
|
#endif
|
2010-06-04 00:56:36 +04:00
|
|
|
}
|
|
|
|
|
2010-06-05 01:14:43 +04:00
|
|
|
void
|
|
|
|
AndroidLocation::InitLocationClass(JNIEnv *jEnv)
|
|
|
|
{
|
|
|
|
initInit();
|
|
|
|
|
|
|
|
jLocationClass = getClassGlobalRef("android/location/Location");
|
|
|
|
jGetLatitudeMethod = getMethod("getLatitude", "()D");
|
|
|
|
jGetLongitudeMethod = getMethod("getLongitude", "()D");
|
|
|
|
jGetAltitudeMethod = getMethod("getAltitude", "()D");
|
|
|
|
jGetAccuracyMethod = getMethod("getAccuracy", "()F");
|
|
|
|
jGetBearingMethod = getMethod("getBearing", "()F");
|
|
|
|
jGetSpeedMethod = getMethod("getSpeed", "()F");
|
|
|
|
jGetTimeMethod = getMethod("getTime", "()J");
|
|
|
|
}
|
|
|
|
|
|
|
|
nsGeoPosition*
|
|
|
|
AndroidLocation::CreateGeoPosition(JNIEnv *jenv, jobject jobj)
|
|
|
|
{
|
2012-05-04 19:08:47 +04:00
|
|
|
AutoLocalJNIFrame jniFrame(jenv);
|
|
|
|
|
2010-06-05 01:14:43 +04:00
|
|
|
double latitude = jenv->CallDoubleMethod(jobj, jGetLatitudeMethod);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame.CheckForException()) return NULL;
|
2010-06-05 01:14:43 +04:00
|
|
|
double longitude = jenv->CallDoubleMethod(jobj, jGetLongitudeMethod);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame.CheckForException()) return NULL;
|
2010-06-05 01:14:43 +04:00
|
|
|
double altitude = jenv->CallDoubleMethod(jobj, jGetAltitudeMethod);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame.CheckForException()) return NULL;
|
2010-06-05 01:14:43 +04:00
|
|
|
float accuracy = jenv->CallFloatMethod (jobj, jGetAccuracyMethod);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame.CheckForException()) return NULL;
|
2010-06-05 01:14:43 +04:00
|
|
|
float bearing = jenv->CallFloatMethod (jobj, jGetBearingMethod);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame.CheckForException()) return NULL;
|
2010-06-05 01:14:43 +04:00
|
|
|
float speed = jenv->CallFloatMethod (jobj, jGetSpeedMethod);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame.CheckForException()) return NULL;
|
2010-06-05 01:14:43 +04:00
|
|
|
long long time = jenv->CallLongMethod (jobj, jGetTimeMethod);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame.CheckForException()) return NULL;
|
2010-06-05 01:14:43 +04:00
|
|
|
|
|
|
|
return new nsGeoPosition(latitude, longitude,
|
|
|
|
altitude, accuracy,
|
|
|
|
accuracy, bearing,
|
|
|
|
speed, time);
|
|
|
|
}
|
|
|
|
|
2010-06-04 00:56:36 +04:00
|
|
|
void
|
|
|
|
AndroidPoint::InitPointClass(JNIEnv *jEnv)
|
|
|
|
{
|
|
|
|
initInit();
|
|
|
|
|
|
|
|
jPointClass = getClassGlobalRef("android/graphics/Point");
|
|
|
|
|
|
|
|
jXField = getField("x", "I");
|
|
|
|
jYField = getField("y", "I");
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
AndroidRect::InitRectClass(JNIEnv *jEnv)
|
|
|
|
{
|
|
|
|
initInit();
|
|
|
|
|
|
|
|
jRectClass = getClassGlobalRef("android/graphics/Rect");
|
|
|
|
|
|
|
|
jBottomField = getField("bottom", "I");
|
|
|
|
jLeftField = getField("left", "I");
|
|
|
|
jTopField = getField("top", "I");
|
|
|
|
jRightField = getField("right", "I");
|
|
|
|
}
|
|
|
|
|
2012-02-03 10:07:05 +04:00
|
|
|
void
|
|
|
|
AndroidGeckoLayerClient::InitGeckoLayerClientClass(JNIEnv *jEnv)
|
|
|
|
{
|
|
|
|
#ifdef MOZ_JAVA_COMPOSITOR
|
|
|
|
initInit();
|
|
|
|
|
|
|
|
jGeckoLayerClientClass = getClassGlobalRef("org/mozilla/gecko/gfx/GeckoLayerClient");
|
|
|
|
|
2012-04-13 00:00:56 +04:00
|
|
|
jSetFirstPaintViewport = getMethod("setFirstPaintViewport", "(FFFFFFF)V");
|
|
|
|
jSetPageSize = getMethod("setPageSize", "(FFFFF)V");
|
2012-03-17 19:08:22 +04:00
|
|
|
jSyncViewportInfoMethod = getMethod("syncViewportInfo",
|
2012-03-20 08:06:56 +04:00
|
|
|
"(IIIIFZ)Lorg/mozilla/gecko/gfx/ViewTransform;");
|
2012-02-14 08:20:38 +04:00
|
|
|
jCreateFrameMethod = getMethod("createFrame", "()Lorg/mozilla/gecko/gfx/LayerRenderer$Frame;");
|
2012-02-14 01:55:10 +04:00
|
|
|
jActivateProgramMethod = getMethod("activateProgram", "()V");
|
|
|
|
jDeactivateProgramMethod = getMethod("deactivateProgram", "()V");
|
2012-02-10 10:58:18 +04:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
AndroidLayerRendererFrame::InitLayerRendererFrameClass(JNIEnv *jEnv)
|
|
|
|
{
|
|
|
|
#ifdef MOZ_JAVA_COMPOSITOR
|
|
|
|
initInit();
|
|
|
|
|
|
|
|
jLayerRendererFrameClass = getClassGlobalRef("org/mozilla/gecko/gfx/LayerRenderer$Frame");
|
|
|
|
|
|
|
|
jBeginDrawingMethod = getMethod("beginDrawing", "()V");
|
|
|
|
jDrawBackgroundMethod = getMethod("drawBackground", "()V");
|
|
|
|
jDrawForegroundMethod = getMethod("drawForeground", "()V");
|
|
|
|
jEndDrawingMethod = getMethod("endDrawing", "()V");
|
2012-02-04 11:31:05 +04:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
AndroidViewTransform::InitViewTransformClass(JNIEnv *jEnv)
|
|
|
|
{
|
|
|
|
#ifdef MOZ_JAVA_COMPOSITOR
|
|
|
|
initInit();
|
|
|
|
|
|
|
|
jViewTransformClass = getClassGlobalRef("org/mozilla/gecko/gfx/ViewTransform");
|
|
|
|
|
|
|
|
jXField = getField("x", "F");
|
|
|
|
jYField = getField("y", "F");
|
|
|
|
jScaleField = getField("scale", "F");
|
2012-02-04 03:48:26 +04:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2010-06-04 00:56:36 +04:00
|
|
|
#undef initInit
|
|
|
|
#undef initClassGlobalRef
|
|
|
|
#undef getField
|
|
|
|
#undef getMethod
|
|
|
|
|
|
|
|
void
|
2012-01-25 04:31:33 +04:00
|
|
|
AndroidGeckoEvent::ReadPointArray(nsTArray<nsIntPoint> &points,
|
|
|
|
JNIEnv *jenv,
|
|
|
|
jfieldID field,
|
|
|
|
PRUint32 count)
|
2010-06-04 00:56:36 +04:00
|
|
|
{
|
2012-01-25 04:31:33 +04:00
|
|
|
jobjectArray jObjArray = (jobjectArray)jenv->GetObjectField(wrapped_obj, field);
|
|
|
|
for (PRInt32 i = 0; i < count; i++) {
|
|
|
|
jobject jObj = jenv->GetObjectArrayElement(jObjArray, i);
|
|
|
|
AndroidPoint jpoint(jenv, jObj);
|
|
|
|
|
|
|
|
nsIntPoint p(jpoint.X(), jpoint.Y());
|
|
|
|
points.AppendElement(p);
|
|
|
|
}
|
2010-06-04 00:56:36 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2012-01-25 04:31:33 +04:00
|
|
|
AndroidGeckoEvent::ReadIntArray(nsTArray<int> &aVals,
|
|
|
|
JNIEnv *jenv,
|
|
|
|
jfieldID field,
|
|
|
|
PRUint32 count)
|
2010-06-04 00:56:36 +04:00
|
|
|
{
|
2012-01-25 04:31:33 +04:00
|
|
|
jintArray jIntArray = (jintArray)jenv->GetObjectField(wrapped_obj, field);
|
|
|
|
jint *vals = jenv->GetIntArrayElements(jIntArray, false);
|
|
|
|
for (PRInt32 i = 0; i < count; i++) {
|
|
|
|
aVals.AppendElement(vals[i]);
|
|
|
|
}
|
|
|
|
jenv->ReleaseIntArrayElements(jIntArray, vals, JNI_ABORT);
|
2010-06-04 00:56:36 +04:00
|
|
|
}
|
|
|
|
|
2012-01-24 19:39:53 +04:00
|
|
|
void
|
2012-01-25 04:31:33 +04:00
|
|
|
AndroidGeckoEvent::ReadFloatArray(nsTArray<float> &aVals,
|
|
|
|
JNIEnv *jenv,
|
|
|
|
jfieldID field,
|
|
|
|
PRUint32 count)
|
2012-01-24 19:39:53 +04:00
|
|
|
{
|
2012-01-25 04:31:33 +04:00
|
|
|
jfloatArray jFloatArray = (jfloatArray)jenv->GetObjectField(wrapped_obj, field);
|
|
|
|
jfloat *vals = jenv->GetFloatArrayElements(jFloatArray, false);
|
|
|
|
for (PRInt32 i = 0; i < count; i++) {
|
|
|
|
aVals.AppendElement(vals[i]);
|
|
|
|
}
|
|
|
|
jenv->ReleaseFloatArrayElements(jFloatArray, vals, JNI_ABORT);
|
2010-06-04 00:56:36 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
AndroidGeckoEvent::ReadRectField(JNIEnv *jenv)
|
|
|
|
{
|
|
|
|
AndroidRect r(jenv, jenv->GetObjectField(wrappedObject(), jRectField));
|
|
|
|
if (!r.isNull()) {
|
|
|
|
mRect.SetRect(r.Left(),
|
|
|
|
r.Top(),
|
2012-02-09 21:28:10 +04:00
|
|
|
r.Width(),
|
|
|
|
r.Height());
|
2010-06-04 00:56:36 +04:00
|
|
|
} else {
|
2011-04-19 07:07:23 +04:00
|
|
|
mRect.SetEmpty();
|
2010-06-04 00:56:36 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
AndroidGeckoEvent::ReadCharactersField(JNIEnv *jenv)
|
|
|
|
{
|
|
|
|
jstring s = (jstring) jenv->GetObjectField(wrapped_obj, jCharactersField);
|
|
|
|
if (!s) {
|
2011-10-17 18:59:28 +04:00
|
|
|
mCharacters.SetIsVoid(true);
|
2010-06-04 00:56:36 +04:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
int len = jenv->GetStringLength(s);
|
|
|
|
mCharacters.SetLength(len);
|
|
|
|
jenv->GetStringRegion(s, 0, len, mCharacters.BeginWriting());
|
|
|
|
}
|
|
|
|
|
2011-11-15 07:12:14 +04:00
|
|
|
void
|
|
|
|
AndroidGeckoEvent::ReadCharactersExtraField(JNIEnv *jenv)
|
|
|
|
{
|
|
|
|
jstring s = (jstring) jenv->GetObjectField(wrapped_obj, jCharactersExtraField);
|
|
|
|
if (!s) {
|
2012-04-04 13:15:10 +04:00
|
|
|
mCharactersExtra.SetIsVoid(true);
|
2011-11-15 07:12:14 +04:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
int len = jenv->GetStringLength(s);
|
|
|
|
mCharactersExtra.SetLength(len);
|
|
|
|
jenv->GetStringRegion(s, 0, len, mCharactersExtra.BeginWriting());
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
AndroidGeckoEvent::Init(int aType, nsIntRect const& aRect)
|
|
|
|
{
|
|
|
|
mType = aType;
|
|
|
|
mRect = aRect;
|
|
|
|
}
|
|
|
|
|
2010-06-04 00:56:36 +04:00
|
|
|
void
|
|
|
|
AndroidGeckoEvent::Init(JNIEnv *jenv, jobject jobj)
|
|
|
|
{
|
|
|
|
NS_ASSERTION(!wrapped_obj, "Init called on non-null wrapped_obj!");
|
|
|
|
|
|
|
|
wrapped_obj = jobj;
|
|
|
|
|
|
|
|
if (!jobj)
|
|
|
|
return;
|
|
|
|
|
|
|
|
mAction = jenv->GetIntField(jobj, jActionField);
|
|
|
|
mType = jenv->GetIntField(jobj, jTypeField);
|
|
|
|
|
|
|
|
switch (mType) {
|
|
|
|
case SIZE_CHANGED:
|
2012-02-24 19:51:41 +04:00
|
|
|
ReadPointArray(mPoints, jenv, jPoints, 2);
|
2010-06-04 00:56:36 +04:00
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_EVENT:
|
|
|
|
mTime = jenv->GetLongField(jobj, jTimeField);
|
|
|
|
mMetaState = jenv->GetIntField(jobj, jMetaStateField);
|
|
|
|
mFlags = jenv->GetIntField(jobj, jFlagsField);
|
|
|
|
mKeyCode = jenv->GetIntField(jobj, jKeyCodeField);
|
|
|
|
mUnicodeChar = jenv->GetIntField(jobj, jUnicodeCharField);
|
2012-04-20 00:55:33 +04:00
|
|
|
mRepeatCount = jenv->GetIntField(jobj, jRepeatCountField);
|
2010-06-04 00:56:36 +04:00
|
|
|
ReadCharactersField(jenv);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case MOTION_EVENT:
|
|
|
|
mTime = jenv->GetLongField(jobj, jTimeField);
|
2010-12-22 01:36:28 +03:00
|
|
|
mMetaState = jenv->GetIntField(jobj, jMetaStateField);
|
2010-07-08 01:34:12 +04:00
|
|
|
mCount = jenv->GetIntField(jobj, jCountField);
|
2012-01-25 04:31:33 +04:00
|
|
|
mPointerIndex = jenv->GetIntField(jobj, jPointerIndexField);
|
|
|
|
|
|
|
|
ReadPointArray(mPointRadii, jenv, jPointRadii, mCount);
|
|
|
|
ReadFloatArray(mOrientations, jenv, jOrientations, mCount);
|
|
|
|
ReadFloatArray(mPressures, jenv, jPressures, mCount);
|
|
|
|
ReadPointArray(mPoints, jenv, jPoints, mCount);
|
|
|
|
ReadIntArray(mPointIndicies, jenv, jPointIndicies, mCount);
|
|
|
|
|
2010-06-04 00:56:36 +04:00
|
|
|
break;
|
|
|
|
|
|
|
|
case IME_EVENT:
|
2010-08-04 23:47:26 +04:00
|
|
|
if (mAction == IME_GET_TEXT || mAction == IME_SET_SELECTION) {
|
|
|
|
mOffset = jenv->GetIntField(jobj, jOffsetField);
|
|
|
|
mCount = jenv->GetIntField(jobj, jCountField);
|
|
|
|
} else if (mAction == IME_SET_TEXT || mAction == IME_ADD_RANGE) {
|
|
|
|
if (mAction == IME_SET_TEXT)
|
|
|
|
ReadCharactersField(jenv);
|
|
|
|
mOffset = jenv->GetIntField(jobj, jOffsetField);
|
|
|
|
mCount = jenv->GetIntField(jobj, jCountField);
|
|
|
|
mRangeType = jenv->GetIntField(jobj, jRangeTypeField);
|
|
|
|
mRangeStyles = jenv->GetIntField(jobj, jRangeStylesField);
|
|
|
|
mRangeForeColor =
|
|
|
|
jenv->GetIntField(jobj, jRangeForeColorField);
|
|
|
|
mRangeBackColor =
|
|
|
|
jenv->GetIntField(jobj, jRangeBackColorField);
|
|
|
|
}
|
2010-06-04 00:56:36 +04:00
|
|
|
break;
|
|
|
|
|
|
|
|
case DRAW:
|
|
|
|
ReadRectField(jenv);
|
|
|
|
break;
|
|
|
|
|
2012-03-14 03:57:51 +04:00
|
|
|
case SENSOR_EVENT:
|
|
|
|
mX = jenv->GetDoubleField(jobj, jXField);
|
|
|
|
mY = jenv->GetDoubleField(jobj, jYField);
|
|
|
|
mZ = jenv->GetDoubleField(jobj, jZField);
|
|
|
|
mFlags = jenv->GetIntField(jobj, jFlagsField);
|
2012-03-21 10:36:17 +04:00
|
|
|
mMetaState = jenv->GetIntField(jobj, jMetaStateField);
|
2012-03-14 03:57:51 +04:00
|
|
|
break;
|
2011-06-20 09:36:17 +04:00
|
|
|
|
2010-06-05 01:14:43 +04:00
|
|
|
case LOCATION_EVENT: {
|
|
|
|
jobject location = jenv->GetObjectField(jobj, jLocationField);
|
|
|
|
mGeoPosition = AndroidLocation::CreateGeoPosition(jenv, location);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2010-06-18 21:42:51 +04:00
|
|
|
case LOAD_URI: {
|
|
|
|
ReadCharactersField(jenv);
|
2012-04-14 06:45:25 +04:00
|
|
|
ReadCharactersExtraField(jenv);
|
2010-06-18 21:42:51 +04:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2011-12-22 15:35:32 +04:00
|
|
|
case VIEWPORT:
|
2011-11-15 07:12:14 +04:00
|
|
|
case BROADCAST: {
|
|
|
|
ReadCharactersField(jenv);
|
|
|
|
ReadCharactersExtraField(jenv);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2012-01-17 22:40:39 +04:00
|
|
|
case NETWORK_CHANGED: {
|
|
|
|
mBandwidth = jenv->GetDoubleField(jobj, jBandwidthField);
|
|
|
|
mCanBeMetered = jenv->GetBooleanField(jobj, jCanBeMeteredField);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2012-01-24 18:59:31 +04:00
|
|
|
case VISITED: {
|
|
|
|
ReadCharactersField(jenv);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2012-02-16 00:34:31 +04:00
|
|
|
case ACTIVITY_STOPPING:
|
|
|
|
case ACTIVITY_START:
|
|
|
|
case ACTIVITY_PAUSING:
|
|
|
|
case ACTIVITY_RESUMING: {
|
|
|
|
mFlags = jenv->GetIntField(jobj, jFlagsField);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2012-02-21 01:37:51 +04:00
|
|
|
case SCREENSHOT: {
|
|
|
|
mMetaState = jenv->GetIntField(jobj, jMetaStateField);
|
2012-04-24 23:13:36 +04:00
|
|
|
mFlags = jenv->GetIntField(jobj, jFlagsField);
|
|
|
|
ReadPointArray(mPoints, jenv, jPoints, 4);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case PAINT_LISTEN_START_EVENT: {
|
|
|
|
mMetaState = jenv->GetIntField(jobj, jMetaStateField);
|
2012-04-24 05:05:23 +04:00
|
|
|
break;
|
2012-02-21 01:37:51 +04:00
|
|
|
}
|
|
|
|
|
2012-03-20 17:09:45 +04:00
|
|
|
case SCREENORIENTATION_CHANGED: {
|
|
|
|
mScreenOrientation = jenv->GetShortField(jobj, jScreenOrientationField);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2010-06-04 00:56:36 +04:00
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2012-03-21 10:36:17 +04:00
|
|
|
#ifdef DEBUG_ANDROID_EVENTS
|
2011-01-19 03:25:20 +03:00
|
|
|
ALOG("AndroidGeckoEvent: %p : %d", (void*)jobj, mType);
|
2010-06-04 00:56:36 +04:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
AndroidGeckoEvent::Init(int aType)
|
|
|
|
{
|
|
|
|
mType = aType;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2011-01-19 03:25:20 +03:00
|
|
|
AndroidGeckoEvent::Init(int x1, int y1, int x2, int y2)
|
2010-06-04 00:56:36 +04:00
|
|
|
{
|
|
|
|
mType = DRAW;
|
2011-04-19 07:07:23 +04:00
|
|
|
mRect.SetEmpty();
|
2010-06-04 00:56:36 +04:00
|
|
|
}
|
|
|
|
|
2011-08-09 20:08:19 +04:00
|
|
|
void
|
|
|
|
AndroidGeckoEvent::Init(AndroidGeckoEvent *aResizeEvent)
|
|
|
|
{
|
|
|
|
NS_ASSERTION(aResizeEvent->Type() == SIZE_CHANGED, "Init called on non-SIZE_CHANGED event");
|
|
|
|
|
|
|
|
mType = FORCED_RESIZE;
|
|
|
|
mTime = aResizeEvent->mTime;
|
2012-01-25 04:31:33 +04:00
|
|
|
mPoints = aResizeEvent->mPoints; // x,y coordinates
|
2011-08-09 20:08:19 +04:00
|
|
|
}
|
|
|
|
|
2011-11-15 07:12:14 +04:00
|
|
|
void
|
|
|
|
AndroidPoint::Init(JNIEnv *jenv, jobject jobj)
|
|
|
|
{
|
|
|
|
if (jobj) {
|
|
|
|
mX = jenv->GetIntField(jobj, jXField);
|
|
|
|
mY = jenv->GetIntField(jobj, jYField);
|
|
|
|
} else {
|
|
|
|
mX = 0;
|
|
|
|
mY = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-02-04 03:48:26 +04:00
|
|
|
void
|
2012-02-22 23:45:44 +04:00
|
|
|
AndroidGeckoLayerClient::Init(jobject jobj)
|
2012-02-04 03:48:26 +04:00
|
|
|
{
|
|
|
|
NS_ASSERTION(wrapped_obj == nsnull, "Init called on non-null wrapped_obj!");
|
|
|
|
wrapped_obj = jobj;
|
2012-02-04 11:31:05 +04:00
|
|
|
}
|
|
|
|
|
2012-02-10 10:58:18 +04:00
|
|
|
void
|
2012-05-04 19:08:46 +04:00
|
|
|
AndroidLayerRendererFrame::Init(JNIEnv *env, jobject jobj)
|
2012-02-10 10:58:18 +04:00
|
|
|
{
|
2012-02-10 11:55:13 +04:00
|
|
|
if (!isNull()) {
|
2012-05-04 19:08:46 +04:00
|
|
|
Dispose(env);
|
2012-02-10 11:55:13 +04:00
|
|
|
}
|
|
|
|
|
2012-05-04 19:08:46 +04:00
|
|
|
wrapped_obj = env->NewGlobalRef(jobj);
|
2012-02-10 11:55:13 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2012-05-04 19:08:46 +04:00
|
|
|
AndroidLayerRendererFrame::Dispose(JNIEnv *env)
|
2012-02-10 11:55:13 +04:00
|
|
|
{
|
|
|
|
if (isNull()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2012-05-04 19:08:46 +04:00
|
|
|
env->DeleteGlobalRef(wrapped_obj);
|
2012-02-10 11:55:13 +04:00
|
|
|
wrapped_obj = 0;
|
2012-02-10 10:58:18 +04:00
|
|
|
}
|
|
|
|
|
2012-02-04 11:31:05 +04:00
|
|
|
void
|
|
|
|
AndroidViewTransform::Init(jobject jobj)
|
|
|
|
{
|
|
|
|
NS_ABORT_IF_FALSE(wrapped_obj == nsnull, "Init called on non-null wrapped_obj!");
|
|
|
|
wrapped_obj = jobj;
|
2012-02-04 03:48:26 +04:00
|
|
|
}
|
|
|
|
|
2010-06-04 00:56:36 +04:00
|
|
|
void
|
|
|
|
AndroidGeckoSurfaceView::Init(jobject jobj)
|
|
|
|
{
|
|
|
|
NS_ASSERTION(wrapped_obj == nsnull, "Init called on non-null wrapped_obj!");
|
|
|
|
|
|
|
|
wrapped_obj = jobj;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
AndroidGeckoSurfaceView::BeginDrawing()
|
|
|
|
{
|
|
|
|
NS_ASSERTION(!isNull(), "BeginDrawing called on null surfaceview!");
|
|
|
|
|
2012-01-30 00:39:30 +04:00
|
|
|
JNIEnv *env = AndroidBridge::GetJNIEnv();
|
|
|
|
if (!env)
|
|
|
|
return 0;
|
|
|
|
|
2012-05-04 19:08:47 +04:00
|
|
|
AutoLocalJNIFrame jniFrame(env, 0);
|
|
|
|
|
|
|
|
int ret = env->CallIntMethod(wrapped_obj, jBeginDrawingMethod);
|
|
|
|
if (jniFrame.CheckForException())
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
return ret;
|
2010-06-04 00:56:36 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
AndroidGeckoSurfaceView::EndDrawing()
|
|
|
|
{
|
2012-01-30 00:39:30 +04:00
|
|
|
JNIEnv *env = AndroidBridge::GetJNIEnv();
|
|
|
|
if (!env)
|
|
|
|
return;
|
|
|
|
|
2012-05-04 19:08:47 +04:00
|
|
|
AutoLocalJNIFrame jniFrame(env, 0);
|
2012-01-30 00:39:30 +04:00
|
|
|
env->CallVoidMethod(wrapped_obj, jEndDrawingMethod);
|
2010-06-04 00:56:36 +04:00
|
|
|
}
|
|
|
|
|
2011-06-16 13:03:00 +04:00
|
|
|
void
|
|
|
|
AndroidGeckoSurfaceView::Draw2D(jobject bitmap, int width, int height)
|
|
|
|
{
|
2012-01-30 00:39:30 +04:00
|
|
|
JNIEnv *env = AndroidBridge::GetJNIEnv();
|
|
|
|
if (!env)
|
|
|
|
return;
|
|
|
|
|
2012-05-04 19:08:47 +04:00
|
|
|
AutoLocalJNIFrame jniFrame(env, 0);
|
2012-01-30 00:39:30 +04:00
|
|
|
env->CallVoidMethod(wrapped_obj, jDraw2DBitmapMethod, bitmap, width, height);
|
2011-06-16 13:03:00 +04:00
|
|
|
}
|
|
|
|
|
2010-06-29 10:42:28 +04:00
|
|
|
void
|
2010-11-09 05:11:13 +03:00
|
|
|
AndroidGeckoSurfaceView::Draw2D(jobject buffer, int stride)
|
2010-06-04 00:56:36 +04:00
|
|
|
{
|
2012-01-30 00:39:30 +04:00
|
|
|
JNIEnv *env = AndroidBridge::GetJNIEnv();
|
|
|
|
if (!env)
|
|
|
|
return;
|
|
|
|
|
2012-05-04 19:08:47 +04:00
|
|
|
AutoLocalJNIFrame jniFrame(env, 0);
|
2012-01-30 00:39:30 +04:00
|
|
|
env->CallVoidMethod(wrapped_obj, jDraw2DBufferMethod, buffer, stride);
|
2011-06-16 13:03:00 +04:00
|
|
|
}
|
|
|
|
|
2012-03-12 19:50:21 +04:00
|
|
|
void
|
2012-04-13 00:00:56 +04:00
|
|
|
AndroidGeckoLayerClient::SetFirstPaintViewport(float aOffsetX, float aOffsetY, float aZoom, float aPageWidth, float aPageHeight,
|
|
|
|
float aCssPageWidth, float aCssPageHeight)
|
2012-03-12 19:50:21 +04:00
|
|
|
{
|
|
|
|
NS_ASSERTION(!isNull(), "SetFirstPaintViewport called on null layer client!");
|
2012-03-14 08:15:11 +04:00
|
|
|
JNIEnv *env = GetJNIForThread(); // this is called on the compositor thread
|
2012-03-12 19:50:21 +04:00
|
|
|
if (!env)
|
|
|
|
return;
|
|
|
|
|
2012-05-04 19:08:47 +04:00
|
|
|
AutoLocalJNIFrame jniFrame(env, 0);
|
2012-04-13 00:00:56 +04:00
|
|
|
return env->CallVoidMethod(wrapped_obj, jSetFirstPaintViewport, aOffsetX, aOffsetY, aZoom, aPageWidth, aPageHeight,
|
|
|
|
aCssPageWidth, aCssPageHeight);
|
2012-03-12 19:50:21 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2012-04-13 00:00:56 +04:00
|
|
|
AndroidGeckoLayerClient::SetPageSize(float aZoom, float aPageWidth, float aPageHeight, float aCssPageWidth, float aCssPageHeight)
|
2012-03-12 19:50:21 +04:00
|
|
|
{
|
|
|
|
NS_ASSERTION(!isNull(), "SetPageSize called on null layer client!");
|
2012-03-14 08:15:11 +04:00
|
|
|
JNIEnv *env = GetJNIForThread(); // this is called on the compositor thread
|
2012-03-12 19:50:21 +04:00
|
|
|
if (!env)
|
|
|
|
return;
|
|
|
|
|
2012-05-04 19:08:47 +04:00
|
|
|
AutoLocalJNIFrame jniFrame(env, 0);
|
2012-04-13 00:00:56 +04:00
|
|
|
return env->CallVoidMethod(wrapped_obj, jSetPageSize, aZoom, aPageWidth, aPageHeight, aCssPageWidth, aCssPageHeight);
|
2012-03-12 19:50:21 +04:00
|
|
|
}
|
|
|
|
|
2012-03-14 08:15:11 +04:00
|
|
|
void
|
2012-03-20 08:06:56 +04:00
|
|
|
AndroidGeckoLayerClient::SyncViewportInfo(const nsIntRect& aDisplayPort, float aDisplayResolution, bool aLayersUpdated,
|
|
|
|
nsIntPoint& aScrollOffset, float& aScaleX, float& aScaleY)
|
2012-03-14 08:15:11 +04:00
|
|
|
{
|
2012-03-17 19:08:22 +04:00
|
|
|
NS_ASSERTION(!isNull(), "SyncViewportInfo called on null layer client!");
|
2012-03-14 08:15:11 +04:00
|
|
|
JNIEnv *env = GetJNIForThread(); // this is called on the compositor thread
|
|
|
|
if (!env)
|
|
|
|
return;
|
|
|
|
|
2012-05-04 19:08:47 +04:00
|
|
|
AutoLocalJNIFrame jniFrame(env);
|
2012-03-14 08:15:11 +04:00
|
|
|
|
2012-03-17 19:08:22 +04:00
|
|
|
jobject viewTransformJObj = env->CallObjectMethod(wrapped_obj, jSyncViewportInfoMethod,
|
|
|
|
aDisplayPort.x, aDisplayPort.y,
|
2012-03-20 08:05:45 +04:00
|
|
|
aDisplayPort.width, aDisplayPort.height,
|
2012-03-20 08:06:56 +04:00
|
|
|
aDisplayResolution, aLayersUpdated);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame.CheckForException())
|
|
|
|
return;
|
|
|
|
|
2012-03-14 08:15:11 +04:00
|
|
|
NS_ABORT_IF_FALSE(viewTransformJObj, "No view transform object!");
|
2012-05-04 19:08:47 +04:00
|
|
|
|
|
|
|
AndroidViewTransform viewTransform;
|
2012-03-14 08:15:11 +04:00
|
|
|
viewTransform.Init(viewTransformJObj);
|
|
|
|
|
2012-04-24 05:06:41 +04:00
|
|
|
aScrollOffset = nsIntPoint(viewTransform.GetX(env), viewTransform.GetY(env));
|
|
|
|
aScaleX = aScaleY = viewTransform.GetScale(env);
|
2012-03-14 08:15:11 +04:00
|
|
|
}
|
|
|
|
|
2011-06-16 13:03:00 +04:00
|
|
|
jobject
|
2012-05-08 17:35:59 +04:00
|
|
|
AndroidGeckoSurfaceView::GetSoftwareDrawBitmap(AutoLocalJNIFrame *jniFrame)
|
2011-06-16 13:03:00 +04:00
|
|
|
{
|
2012-05-08 17:35:59 +04:00
|
|
|
if (!jniFrame || !jniFrame->GetEnv())
|
2012-01-30 00:39:30 +04:00
|
|
|
return nsnull;
|
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
jobject ret = jniFrame->GetEnv()->CallObjectMethod(wrapped_obj, jGetSoftwareDrawBitmapMethod);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame->CheckForException())
|
|
|
|
return nsnull;
|
|
|
|
|
|
|
|
return ret;
|
2010-06-29 10:42:28 +04:00
|
|
|
}
|
2010-06-04 00:56:36 +04:00
|
|
|
|
2010-06-29 10:42:28 +04:00
|
|
|
jobject
|
2012-05-08 17:35:59 +04:00
|
|
|
AndroidGeckoSurfaceView::GetSoftwareDrawBuffer(AutoLocalJNIFrame *jniFrame)
|
2010-06-29 10:42:28 +04:00
|
|
|
{
|
2012-05-08 17:35:59 +04:00
|
|
|
if (!jniFrame || !jniFrame->GetEnv())
|
2012-05-04 19:08:47 +04:00
|
|
|
return nsnull;
|
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
jobject ret = jniFrame->GetEnv()->CallObjectMethod(wrapped_obj, jGetSoftwareDrawBufferMethod);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame->CheckForException())
|
2012-01-30 00:39:30 +04:00
|
|
|
return nsnull;
|
|
|
|
|
2012-05-04 19:08:47 +04:00
|
|
|
return ret;
|
2010-06-04 00:56:36 +04:00
|
|
|
}
|
|
|
|
|
2011-09-21 20:46:00 +04:00
|
|
|
jobject
|
2012-05-08 17:35:59 +04:00
|
|
|
AndroidGeckoSurfaceView::GetSurface(AutoLocalJNIFrame *jniFrame)
|
2011-09-21 20:46:00 +04:00
|
|
|
{
|
2012-05-08 17:35:59 +04:00
|
|
|
if (!jniFrame || !jniFrame->GetEnv())
|
2012-05-04 19:08:47 +04:00
|
|
|
return nsnull;
|
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
jobject ret = jniFrame->GetEnv()->CallObjectMethod(wrapped_obj, jGetSurfaceMethod);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame->CheckForException())
|
2012-01-30 00:39:30 +04:00
|
|
|
return nsnull;
|
|
|
|
|
2012-05-04 19:08:47 +04:00
|
|
|
return ret;
|
2011-09-21 20:46:00 +04:00
|
|
|
}
|
|
|
|
|
2010-06-26 04:52:37 +04:00
|
|
|
jobject
|
2012-05-08 17:35:59 +04:00
|
|
|
AndroidGeckoSurfaceView::GetSurfaceHolder(AutoLocalJNIFrame *jniFrame)
|
2010-06-26 04:52:37 +04:00
|
|
|
{
|
2012-05-08 17:35:59 +04:00
|
|
|
if (!jniFrame || !jniFrame->GetEnv())
|
2012-05-04 19:08:47 +04:00
|
|
|
return nsnull;
|
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
jobject ret = jniFrame->GetEnv()->CallObjectMethod(wrapped_obj, jGetHolderMethod);
|
2012-05-04 19:08:47 +04:00
|
|
|
if (jniFrame->CheckForException())
|
2012-04-28 20:55:59 +04:00
|
|
|
return nsnull;
|
|
|
|
|
2012-05-04 19:08:47 +04:00
|
|
|
return ret;
|
2010-06-26 04:52:37 +04:00
|
|
|
}
|
|
|
|
|
2012-05-04 19:08:47 +04:00
|
|
|
bool
|
2012-05-08 17:35:59 +04:00
|
|
|
AndroidGeckoLayerClient::CreateFrame(AutoLocalJNIFrame *jniFrame, AndroidLayerRendererFrame& aFrame)
|
2012-02-10 10:58:18 +04:00
|
|
|
{
|
2012-05-08 17:35:59 +04:00
|
|
|
if (!jniFrame || !jniFrame->GetEnv())
|
|
|
|
return false;
|
2012-05-04 19:08:47 +04:00
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
jobject frameJObj = jniFrame->GetEnv()->CallObjectMethod(wrapped_obj, jCreateFrameMethod);
|
|
|
|
if (jniFrame->CheckForException())
|
2012-05-04 19:08:47 +04:00
|
|
|
return false;
|
2012-02-10 10:58:18 +04:00
|
|
|
NS_ABORT_IF_FALSE(frameJObj, "No frame object!");
|
2012-05-04 19:08:47 +04:00
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
aFrame.Init(jniFrame->GetEnv(), frameJObj);
|
2012-05-04 19:08:47 +04:00
|
|
|
return true;
|
2012-02-10 10:58:18 +04:00
|
|
|
}
|
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
bool
|
|
|
|
AndroidGeckoLayerClient::ActivateProgram(AutoLocalJNIFrame *jniFrame)
|
2012-02-14 01:55:10 +04:00
|
|
|
{
|
2012-05-08 17:35:59 +04:00
|
|
|
if (!jniFrame || !jniFrame->GetEnv())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
jniFrame->GetEnv()->CallVoidMethod(wrapped_obj, jActivateProgramMethod);
|
|
|
|
if (jniFrame->CheckForException())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
2012-02-14 01:55:10 +04:00
|
|
|
}
|
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
bool
|
|
|
|
AndroidGeckoLayerClient::DeactivateProgram(AutoLocalJNIFrame *jniFrame)
|
2012-02-14 01:55:10 +04:00
|
|
|
{
|
2012-05-08 17:35:59 +04:00
|
|
|
if (!jniFrame || !jniFrame->GetEnv())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
jniFrame->GetEnv()->CallVoidMethod(wrapped_obj, jDeactivateProgramMethod);
|
|
|
|
if (jniFrame->CheckForException())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
2012-02-14 01:55:10 +04:00
|
|
|
}
|
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
bool
|
|
|
|
AndroidLayerRendererFrame::BeginDrawing(AutoLocalJNIFrame *jniFrame)
|
2012-02-10 10:58:18 +04:00
|
|
|
{
|
2012-05-08 17:35:59 +04:00
|
|
|
if (!jniFrame || !jniFrame->GetEnv())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
jniFrame->GetEnv()->CallVoidMethod(wrapped_obj, jBeginDrawingMethod);
|
|
|
|
if (jniFrame->CheckForException())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
2012-02-10 10:58:18 +04:00
|
|
|
}
|
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
bool
|
|
|
|
AndroidLayerRendererFrame::DrawBackground(AutoLocalJNIFrame *jniFrame)
|
2012-02-10 10:58:18 +04:00
|
|
|
{
|
2012-05-08 17:35:59 +04:00
|
|
|
if (!jniFrame || !jniFrame->GetEnv())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
jniFrame->GetEnv()->CallVoidMethod(wrapped_obj, jDrawBackgroundMethod);
|
|
|
|
if (jniFrame->CheckForException())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
2012-02-10 10:58:18 +04:00
|
|
|
}
|
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
bool
|
|
|
|
AndroidLayerRendererFrame::DrawForeground(AutoLocalJNIFrame *jniFrame)
|
2012-02-10 10:58:18 +04:00
|
|
|
{
|
2012-05-08 17:35:59 +04:00
|
|
|
if (!jniFrame || !jniFrame->GetEnv())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
jniFrame->GetEnv()->CallVoidMethod(wrapped_obj, jDrawForegroundMethod);
|
|
|
|
if (jniFrame->CheckForException())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
2012-02-10 10:58:18 +04:00
|
|
|
}
|
|
|
|
|
2012-05-08 17:35:59 +04:00
|
|
|
bool
|
|
|
|
AndroidLayerRendererFrame::EndDrawing(AutoLocalJNIFrame *jniFrame)
|
2012-02-10 10:58:18 +04:00
|
|
|
{
|
2012-05-08 17:35:59 +04:00
|
|
|
if (!jniFrame || !jniFrame->GetEnv())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
jniFrame->GetEnv()->CallVoidMethod(wrapped_obj, jEndDrawingMethod);
|
|
|
|
if (jniFrame->CheckForException())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
2012-02-10 10:58:18 +04:00
|
|
|
}
|
|
|
|
|
2012-02-04 11:31:05 +04:00
|
|
|
float
|
2012-04-24 05:06:41 +04:00
|
|
|
AndroidViewTransform::GetX(JNIEnv *env)
|
2012-02-04 11:31:05 +04:00
|
|
|
{
|
|
|
|
if (!env)
|
|
|
|
return 0.0f;
|
|
|
|
return env->GetFloatField(wrapped_obj, jXField);
|
|
|
|
}
|
|
|
|
|
|
|
|
float
|
2012-04-24 05:06:41 +04:00
|
|
|
AndroidViewTransform::GetY(JNIEnv *env)
|
2012-02-04 11:31:05 +04:00
|
|
|
{
|
|
|
|
if (!env)
|
|
|
|
return 0.0f;
|
|
|
|
return env->GetFloatField(wrapped_obj, jYField);
|
|
|
|
}
|
|
|
|
|
|
|
|
float
|
2012-04-24 05:06:41 +04:00
|
|
|
AndroidViewTransform::GetScale(JNIEnv *env)
|
2012-02-04 11:31:05 +04:00
|
|
|
{
|
|
|
|
if (!env)
|
|
|
|
return 0.0f;
|
|
|
|
return env->GetFloatField(wrapped_obj, jScaleField);
|
|
|
|
}
|
|
|
|
|
2010-06-04 00:56:36 +04:00
|
|
|
void
|
|
|
|
AndroidRect::Init(JNIEnv *jenv, jobject jobj)
|
|
|
|
{
|
|
|
|
NS_ASSERTION(wrapped_obj == nsnull, "Init called on non-null wrapped_obj!");
|
|
|
|
|
|
|
|
wrapped_obj = jobj;
|
|
|
|
|
|
|
|
if (jobj) {
|
|
|
|
mTop = jenv->GetIntField(jobj, jTopField);
|
|
|
|
mLeft = jenv->GetIntField(jobj, jLeftField);
|
|
|
|
mRight = jenv->GetIntField(jobj, jRightField);
|
|
|
|
mBottom = jenv->GetIntField(jobj, jBottomField);
|
|
|
|
} else {
|
|
|
|
mTop = 0;
|
|
|
|
mLeft = 0;
|
|
|
|
mRight = 0;
|
|
|
|
mBottom = 0;
|
|
|
|
}
|
|
|
|
}
|
2010-06-14 23:04:16 +04:00
|
|
|
|
2010-06-15 06:17:37 +04:00
|
|
|
nsJNIString::nsJNIString(jstring jstr, JNIEnv *jenv)
|
2010-06-14 23:04:16 +04:00
|
|
|
{
|
2010-06-16 03:39:43 +04:00
|
|
|
if (!jstr) {
|
2011-10-17 18:59:28 +04:00
|
|
|
SetIsVoid(true);
|
2010-06-16 03:39:43 +04:00
|
|
|
return;
|
|
|
|
}
|
2010-06-15 06:17:37 +04:00
|
|
|
JNIEnv *jni = jenv;
|
2012-04-28 20:55:59 +04:00
|
|
|
if (!jni) {
|
2012-01-30 00:39:30 +04:00
|
|
|
jni = AndroidBridge::GetJNIEnv();
|
2012-04-28 20:55:59 +04:00
|
|
|
if (!jni) {
|
|
|
|
SetIsVoid(true);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
2011-01-25 21:51:29 +03:00
|
|
|
const jchar* jCharPtr = jni->GetStringChars(jstr, NULL);
|
2011-03-02 03:03:38 +03:00
|
|
|
|
|
|
|
if (!jCharPtr) {
|
2011-10-17 18:59:28 +04:00
|
|
|
SetIsVoid(true);
|
2011-01-25 21:51:29 +03:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2011-03-02 03:03:38 +03:00
|
|
|
jsize len = jni->GetStringLength(jstr);
|
|
|
|
|
|
|
|
if (len <= 0) {
|
2011-10-17 18:59:28 +04:00
|
|
|
SetIsVoid(true);
|
2011-03-02 03:03:38 +03:00
|
|
|
} else {
|
|
|
|
Assign(jCharPtr, len);
|
|
|
|
}
|
2010-06-15 06:17:37 +04:00
|
|
|
jni->ReleaseStringChars(jstr, jCharPtr);
|
2010-06-14 23:04:16 +04:00
|
|
|
}
|