From 011ad0584495ebbf43243a811166df479bba578c Mon Sep 17 00:00:00 2001 From: Anthony Green Date: Sat, 5 Mar 2005 21:47:10 +0000 Subject: [PATCH] gtk_jawt.c (classpath_jawt_get_drawable, [...]): New functions. 2005-02-15 Anthony Green * jni/gtk-peer/gtk_jawt.c (classpath_jawt_get_drawable, classpath_jawt_lock, classpath_jawt_unlock): New functions. * jawt.c (_Jv_JAWT_Lock, _Jv_JAWT_Unlock): New functions. (_Jv_GetDrawingSurface): Set visualID. (_Jv_FreeDrawingSurfaceInfo): Clear visualID. (JAWT_GetAWT): Set Lock and Unlock. * include/jawt_md.h (struct _JAWT_X11DrawingSurfaceInfo): Add visualID. * include/jawt.h (JAWT_VERSION_1_4, JAWT_LOCK_ERROR, JAWT_LOCK_CLIP_CHANGED, JAWT_LOCK_BOUNDS_CHANGED, JAWT_LOCK_SURFACE_CHANGED): New macros. (struct _JAWT): Add Lock and Unlock. From-SVN: r95943 --- libjava/include/jawt.h | 6 +++++ libjava/include/jawt_md.h | 1 + libjava/jawt.c | 19 ++++++++++++++ libjava/jni/classpath/classpath_jawt.h | 1 + libjava/jni/gtk-peer/gtk_jawt.c | 34 ++++++++++++++++++++++++++ 5 files changed, 61 insertions(+) diff --git a/libjava/include/jawt.h b/libjava/include/jawt.h index 52cde838e69..fdff9356a11 100644 --- a/libjava/include/jawt.h +++ b/libjava/include/jawt.h @@ -50,8 +50,12 @@ extern "C" #endif #define JAWT_VERSION_1_3 0x10003 +#define JAWT_VERSION_1_4 0x10004 #define JAWT_LOCK_ERROR 0x1 +#define JAWT_LOCK_CLIP_CHANGED 0x2 +#define JAWT_LOCK_BOUNDS_CHANGED 0x4 +#define JAWT_LOCK_SURFACE_CHANGED 0x8 struct _JAWT_DrawingSurfaceInfo { @@ -77,6 +81,8 @@ struct _JAWT jint version; struct _JAWT_DrawingSurface* (JNICALL* GetDrawingSurface) (JNIEnv*, jobject); void (JNICALL* FreeDrawingSurface) (struct _JAWT_DrawingSurface*); + void (JNICALL *Lock) (JNIEnv*); + void (JNICALL *Unlock) (JNIEnv*); }; typedef struct _JAWT_DrawingSurfaceInfo JAWT_DrawingSurfaceInfo; diff --git a/libjava/include/jawt_md.h b/libjava/include/jawt_md.h index 94abb57863b..9e74ec1cc7c 100644 --- a/libjava/include/jawt_md.h +++ b/libjava/include/jawt_md.h @@ -52,6 +52,7 @@ struct _JAWT_X11DrawingSurfaceInfo { Display* display; Drawable drawable; + VisualID visualID; }; typedef struct _JAWT_X11DrawingSurfaceInfo JAWT_X11DrawingSurfaceInfo; diff --git a/libjava/jawt.c b/libjava/jawt.c index c0d65b80e52..20890da48a3 100644 --- a/libjava/jawt.c +++ b/libjava/jawt.c @@ -50,6 +50,8 @@ static void (JNICALL _Jv_FreeDrawingSurfaceInfo) static JAWT_DrawingSurface* (JNICALL _Jv_GetDrawingSurface) (JNIEnv* env, jobject canvas); static void (JNICALL _Jv_FreeDrawingSurface) (JAWT_DrawingSurface* surface); +static void (JNICALL _Jv_AWTLock) (JNIEnv*); +static void (JNICALL _Jv_AWTUnlock) (JNIEnv*); JNIEXPORT jboolean JNICALL JAWT_GetAWT (JNIEnv* env, JAWT* awt) @@ -63,6 +65,8 @@ JAWT_GetAWT (JNIEnv* env, JAWT* awt) awt->GetDrawingSurface = _Jv_GetDrawingSurface; awt->FreeDrawingSurface = _Jv_FreeDrawingSurface; + awt->Lock = _Jv_AWTLock; + awt->Unlock = _Jv_AWTUnlock; return JNI_TRUE; } @@ -103,6 +107,7 @@ static void surface_info_x11->display = NULL; surface_info_x11->drawable = 0; + surface_info_x11->visualID = 0; free (surface_info); surface_info = NULL; @@ -142,6 +147,7 @@ static JAWT_DrawingSurface* surface_info_x11->display = classpath_jawt_get_default_display (env, canvas); surface_info_x11->drawable = classpath_jawt_get_drawable (env, canvas); + surface_info_x11->visualID = classpath_jawt_get_visualID (env, canvas); /* FIXME: also include bounding rectangle of drawing surface */ /* FIXME: also include current clipping region */ @@ -154,3 +160,16 @@ static void { free (surface); } + +static void +(JNICALL _Jv_AWTLock) (JNIEnv* env) +{ + classpath_jawt_lock (); +} + +static void +(JNICALL _Jv_AWTUnlock) (JNIEnv* env) +{ + classpath_jawt_unlock (); +} + diff --git a/libjava/jni/classpath/classpath_jawt.h b/libjava/jni/classpath/classpath_jawt.h index 51e6af3ea1d..1629505ac5c 100644 --- a/libjava/jni/classpath/classpath_jawt.h +++ b/libjava/jni/classpath/classpath_jawt.h @@ -53,6 +53,7 @@ jint classpath_jawt_get_awt_version (); Display* classpath_jawt_get_default_display (JNIEnv* env, jobject canvas); Drawable classpath_jawt_get_drawable (JNIEnv* env, jobject canvas); +VisualID classpath_jawt_get_visualID (JNIEnv* env, jobject canvas); jint classpath_jawt_lock (); void classpath_jawt_unlock (); diff --git a/libjava/jni/gtk-peer/gtk_jawt.c b/libjava/jni/gtk-peer/gtk_jawt.c index 6a12fc7954c..cba3b1509ec 100644 --- a/libjava/jni/gtk-peer/gtk_jawt.c +++ b/libjava/jni/gtk-peer/gtk_jawt.c @@ -85,6 +85,40 @@ classpath_jawt_get_default_display (JNIEnv* env, jobject canvas) return xdisplay; } +VisualID +classpath_jawt_get_visualID (JNIEnv* env, jobject canvas) +{ + GtkWidget *widget; + Visual *visual; + void *ptr; + jobject peer; + jclass class_id; + jmethodID method_id; + + class_id = (*env)->GetObjectClass (env, canvas); + + method_id = (*env)->GetMethodID (env, class_id, + "getPeer", + "()Ljava/awt/peer/ComponentPeer;"); + + peer = (*env)->CallObjectMethod (env, canvas, method_id); + + ptr = NSA_GET_PTR (env, peer); + + gdk_threads_enter (); + + widget = GTK_WIDGET (ptr); + + g_assert (GTK_WIDGET_REALIZED (widget)); + + visual = gdk_x11_visual_get_xvisual (gtk_widget_get_visual (widget)); + g_assert (visual != NULL); + + gdk_threads_leave (); + + return visual->visualid; +} + Drawable classpath_jawt_get_drawable (JNIEnv* env, jobject canvas) {