summaryrefslogtreecommitdiff
path: root/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
diff options
context:
space:
mode:
Diffstat (limited to 'native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c')
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
index c17c223a7..016313330 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
@@ -94,8 +94,6 @@ void cp_gtk_grab_current_drawable(GtkWidget *widget, GdkDrawable **draw,
*draw = *win;
gdk_window_get_internal_paint_info (*win, draw, 0, 0);
- /* g_object_ref (*draw); */
- /* FIXME: Unref this. */
}
/**
@@ -211,3 +209,38 @@ Java_gnu_java_awt_peer_gtk_ComponentGraphics_copyAreaNative
gdk_threads_leave();
}
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_ComponentGraphics_drawVolatile
+(JNIEnv *env, jobject obj __attribute__ ((unused)), jobject peer,
+ jobject img, jint x, jint y, jint w, jint h)
+{
+ GdkPixmap *pixmap;
+ GtkWidget *widget = NULL;
+ void *ptr = NULL;
+ GdkGC *gc;
+
+ gdk_threads_enter();
+
+ ptr = NSA_GET_PTR (env, peer);
+ g_assert (ptr != NULL);
+
+ widget = GTK_WIDGET (ptr);
+ g_assert (widget != NULL);
+
+ while(widget->window != NULL)
+ widget = widget->window;
+ pixmap = cp_gtk_get_pixmap( env, img );
+
+
+ gc = gdk_gc_new( widget );
+ gdk_draw_drawable(widget,
+ gc,
+ pixmap,
+ 0, 0,
+ x, y,
+ w, h);
+
+ schedule_flush ();
+
+ gdk_threads_leave();
+}