Bug 913985 - Part 5: refactor the Bridge to use the generated code. r=kats
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include "nsString.h"
|
||||
#include "nsTArray.h"
|
||||
#include "nsIObserver.h"
|
||||
#include "nsIAndroidBridge.h"
|
||||
#include "mozilla/gfx/Rect.h"
|
||||
#include "mozilla/dom/Touch.h"
|
||||
#include "mozilla/EventForwards.h"
|
||||
@@ -23,21 +24,12 @@
|
||||
|
||||
//#define FORCE_ALOG 1
|
||||
|
||||
#ifndef ALOG
|
||||
#if defined(DEBUG) || defined(FORCE_ALOG)
|
||||
#define ALOG(args...) __android_log_print(ANDROID_LOG_INFO, "Gecko" , ## args)
|
||||
#else
|
||||
#define ALOG(args...) ((void)0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
class nsIAndroidDisplayport;
|
||||
class nsIAndroidViewport;
|
||||
class nsIWidget;
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
class AndroidGeckoLayerClient;
|
||||
class AutoLocalJNIFrame;
|
||||
|
||||
void InitAndroidJavaWrappers(JNIEnv *jEnv);
|
||||
@@ -75,10 +67,10 @@ private:
|
||||
class WrappedJavaObject {
|
||||
public:
|
||||
WrappedJavaObject() :
|
||||
wrapped_obj(0)
|
||||
wrapped_obj(NULL)
|
||||
{ }
|
||||
|
||||
WrappedJavaObject(jobject jobj) {
|
||||
WrappedJavaObject(jobject jobj) : wrapped_obj(NULL) {
|
||||
Init(jobj);
|
||||
}
|
||||
|
||||
@@ -87,7 +79,39 @@ public:
|
||||
}
|
||||
|
||||
bool isNull() const {
|
||||
return wrapped_obj == 0;
|
||||
return wrapped_obj == NULL;
|
||||
}
|
||||
|
||||
jobject wrappedObject() const {
|
||||
return wrapped_obj;
|
||||
}
|
||||
|
||||
protected:
|
||||
jobject wrapped_obj;
|
||||
};
|
||||
|
||||
class AutoGlobalWrappedJavaObject : protected WrappedJavaObject{
|
||||
public:
|
||||
AutoGlobalWrappedJavaObject() :
|
||||
wrapped_obj(NULL)
|
||||
{ }
|
||||
|
||||
AutoGlobalWrappedJavaObject(jobject jobj, JNIEnv* env) : wrapped_obj(NULL) {
|
||||
Init(jobj, env);
|
||||
}
|
||||
|
||||
virtual ~AutoGlobalWrappedJavaObject();
|
||||
void Dispose();
|
||||
|
||||
void Init(jobject jobj, JNIEnv* env) {
|
||||
if (!isNull()) {
|
||||
env->DeleteGlobalRef(wrapped_obj);
|
||||
}
|
||||
wrapped_obj = env->NewGlobalRef(jobj);
|
||||
}
|
||||
|
||||
bool isNull() const {
|
||||
return wrapped_obj == NULL;
|
||||
}
|
||||
|
||||
jobject wrappedObject() const {
|
||||
@@ -186,128 +210,6 @@ protected:
|
||||
static jfieldID jTopField;
|
||||
};
|
||||
|
||||
class AndroidViewTransform : public WrappedJavaObject {
|
||||
public:
|
||||
static void InitViewTransformClass(JNIEnv *jEnv);
|
||||
|
||||
void Init(jobject jobj);
|
||||
|
||||
AndroidViewTransform() {}
|
||||
AndroidViewTransform(jobject jobj) { Init(jobj); }
|
||||
|
||||
float GetX(JNIEnv *env);
|
||||
float GetY(JNIEnv *env);
|
||||
float GetScale(JNIEnv *env);
|
||||
void GetFixedLayerMargins(JNIEnv *env, LayerMargin &aFixedLayerMargins);
|
||||
float GetOffsetX(JNIEnv *env);
|
||||
float GetOffsetY(JNIEnv *env);
|
||||
|
||||
private:
|
||||
static jclass jViewTransformClass;
|
||||
static jfieldID jXField;
|
||||
static jfieldID jYField;
|
||||
static jfieldID jScaleField;
|
||||
static jfieldID jFixedLayerMarginLeft;
|
||||
static jfieldID jFixedLayerMarginTop;
|
||||
static jfieldID jFixedLayerMarginRight;
|
||||
static jfieldID jFixedLayerMarginBottom;
|
||||
static jfieldID jOffsetXField;
|
||||
static jfieldID jOffsetYField;
|
||||
};
|
||||
|
||||
class AndroidProgressiveUpdateData : public WrappedJavaObject {
|
||||
public:
|
||||
static void InitProgressiveUpdateDataClass(JNIEnv *jEnv);
|
||||
|
||||
void Init(jobject jobj);
|
||||
|
||||
AndroidProgressiveUpdateData() {}
|
||||
AndroidProgressiveUpdateData(jobject jobj) { Init(jobj); }
|
||||
|
||||
float GetX(JNIEnv *env);
|
||||
float GetY(JNIEnv *env);
|
||||
float GetWidth(JNIEnv *env);
|
||||
float GetHeight(JNIEnv *env);
|
||||
float GetScale(JNIEnv *env);
|
||||
bool GetShouldAbort(JNIEnv *env);
|
||||
|
||||
private:
|
||||
static jclass jProgressiveUpdateDataClass;
|
||||
static jfieldID jXField;
|
||||
static jfieldID jYField;
|
||||
static jfieldID jWidthField;
|
||||
static jfieldID jHeightField;
|
||||
static jfieldID jScaleField;
|
||||
static jfieldID jShouldAbortField;
|
||||
};
|
||||
|
||||
class AndroidLayerRendererFrame : public WrappedJavaObject {
|
||||
public:
|
||||
static void InitLayerRendererFrameClass(JNIEnv *jEnv);
|
||||
|
||||
void Init(JNIEnv *env, jobject jobj);
|
||||
void Dispose(JNIEnv *env);
|
||||
|
||||
bool BeginDrawing(AutoLocalJNIFrame *jniFrame);
|
||||
bool DrawBackground(AutoLocalJNIFrame *jniFrame);
|
||||
bool DrawForeground(AutoLocalJNIFrame *jniFrame);
|
||||
bool EndDrawing(AutoLocalJNIFrame *jniFrame);
|
||||
|
||||
private:
|
||||
static jclass jLayerRendererFrameClass;
|
||||
static jmethodID jBeginDrawingMethod;
|
||||
static jmethodID jDrawBackgroundMethod;
|
||||
static jmethodID jDrawForegroundMethod;
|
||||
static jmethodID jEndDrawingMethod;
|
||||
};
|
||||
|
||||
class AndroidGeckoLayerClient : public WrappedJavaObject {
|
||||
public:
|
||||
static void InitGeckoLayerClientClass(JNIEnv *jEnv);
|
||||
|
||||
void Init(jobject jobj);
|
||||
|
||||
AndroidGeckoLayerClient() {}
|
||||
AndroidGeckoLayerClient(jobject jobj) { Init(jobj); }
|
||||
|
||||
void SetFirstPaintViewport(const LayerIntPoint& aOffset, const CSSToLayerScale& aZoom, const CSSRect& aCssPageRect);
|
||||
void SetPageRect(const CSSRect& aCssPageRect);
|
||||
void SyncViewportInfo(const LayerIntRect& aDisplayPort, const CSSToLayerScale& aDisplayResolution,
|
||||
bool aLayersUpdated, ScreenPoint& aScrollOffset, CSSToScreenScale& aScale,
|
||||
LayerMargin& aFixedLayerMargins, ScreenPoint& aOffset);
|
||||
void SyncFrameMetrics(const ScreenPoint& aScrollOffset, float aZoom, const CSSRect& aCssPageRect,
|
||||
bool aLayersUpdated, const CSSRect& aDisplayPort, const CSSToLayerScale& aDisplayResolution,
|
||||
bool aIsFirstPaint, LayerMargin& aFixedLayerMargins, ScreenPoint& aOffset);
|
||||
bool ProgressiveUpdateCallback(bool aHasPendingNewThebesContent, const LayerRect& aDisplayPort, float aDisplayResolution, bool aDrawingCritical, gfx::Rect& aViewport, float& aScaleX, float& aScaleY);
|
||||
bool CreateFrame(AutoLocalJNIFrame *jniFrame, AndroidLayerRendererFrame& aFrame);
|
||||
bool ActivateProgram(AutoLocalJNIFrame *jniFrame);
|
||||
bool DeactivateProgram(AutoLocalJNIFrame *jniFrame);
|
||||
void GetDisplayPort(AutoLocalJNIFrame *jniFrame, bool aPageSizeUpdate, bool aIsBrowserContentDisplayed, int32_t tabId, nsIAndroidViewport* metrics, nsIAndroidDisplayport** displayPort);
|
||||
void ContentDocumentChanged(AutoLocalJNIFrame *jniFrame);
|
||||
bool IsContentDocumentDisplayed(AutoLocalJNIFrame *jniFrame);
|
||||
|
||||
protected:
|
||||
static jclass jGeckoLayerClientClass;
|
||||
static jmethodID jSetFirstPaintViewport;
|
||||
static jmethodID jSetPageRect;
|
||||
static jmethodID jSyncViewportInfoMethod;
|
||||
static jmethodID jSyncFrameMetricsMethod;
|
||||
static jmethodID jCreateFrameMethod;
|
||||
static jmethodID jActivateProgramMethod;
|
||||
static jmethodID jDeactivateProgramMethod;
|
||||
static jmethodID jGetDisplayPort;
|
||||
static jmethodID jContentDocumentChanged;
|
||||
static jmethodID jIsContentDocumentDisplayed;
|
||||
static jmethodID jProgressiveUpdateCallbackMethod;
|
||||
|
||||
public:
|
||||
static jclass jViewportClass;
|
||||
static jclass jDisplayportClass;
|
||||
static jmethodID jViewportCtor;
|
||||
static jfieldID jDisplayportPosition;
|
||||
static jfieldID jDisplayportResolution;
|
||||
};
|
||||
|
||||
enum {
|
||||
// These keycode masks are not defined in android/keycodes.h:
|
||||
AKEYCODE_ESCAPE = 111,
|
||||
@@ -433,6 +335,29 @@ enum {
|
||||
AMETA_SHIFT_MASK = AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_RIGHT_ON | AMETA_SHIFT_ON,
|
||||
};
|
||||
|
||||
class nsAndroidDisplayport MOZ_FINAL : public nsIAndroidDisplayport
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
virtual nsresult GetLeft(float *aLeft) { *aLeft = mLeft; return NS_OK; }
|
||||
virtual nsresult GetTop(float *aTop) { *aTop = mTop; return NS_OK; }
|
||||
virtual nsresult GetRight(float *aRight) { *aRight = mRight; return NS_OK; }
|
||||
virtual nsresult GetBottom(float *aBottom) { *aBottom = mBottom; return NS_OK; }
|
||||
virtual nsresult GetResolution(float *aResolution) { *aResolution = mResolution; return NS_OK; }
|
||||
virtual nsresult SetLeft(float aLeft) { mLeft = aLeft; return NS_OK; }
|
||||
virtual nsresult SetTop(float aTop) { mTop = aTop; return NS_OK; }
|
||||
virtual nsresult SetRight(float aRight) { mRight = aRight; return NS_OK; }
|
||||
virtual nsresult SetBottom(float aBottom) { mBottom = aBottom; return NS_OK; }
|
||||
virtual nsresult SetResolution(float aResolution) { mResolution = aResolution; return NS_OK; }
|
||||
|
||||
nsAndroidDisplayport(AndroidRectF aRect, float aResolution):
|
||||
mLeft(aRect.Left()), mTop(aRect.Top()), mRight(aRect.Right()), mBottom(aRect.Bottom()), mResolution(aResolution) {}
|
||||
|
||||
private:
|
||||
~nsAndroidDisplayport() {}
|
||||
float mLeft, mTop, mRight, mBottom, mResolution;
|
||||
};
|
||||
|
||||
class AndroidMotionEvent
|
||||
{
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user