gtk_jawt.c (classpath_jawt_get_drawable, [...]): New functions.

2005-02-15  Anthony Green  <green@redhat.com>

	* 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
This commit is contained in:
Anthony Green 2005-03-05 21:47:10 +00:00 committed by Thomas Fitzsimmons
parent 3f724eb8a7
commit 011ad05844
5 changed files with 61 additions and 0 deletions

View File

@ -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;

View File

@ -52,6 +52,7 @@ struct _JAWT_X11DrawingSurfaceInfo
{
Display* display;
Drawable drawable;
VisualID visualID;
};
typedef struct _JAWT_X11DrawingSurfaceInfo JAWT_X11DrawingSurfaceInfo;

View File

@ -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 ();
}

View File

@ -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 ();

View File

@ -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)
{