< prev index next >

src/java.desktop/unix/native/libawt_xawt/awt/awt_Robot.c

Print this page

        

*** 43,53 **** #include "robot_common.h" #include "canvas.h" #include "wsutils.h" #include "list.h" #include "multiVis.h" ! #include "gtk2_interface.h" #if defined(__linux__) || defined(MACOSX) #include <sys/socket.h> #endif --- 43,53 ---- #include "robot_common.h" #include "canvas.h" #include "wsutils.h" #include "list.h" #include "multiVis.h" ! #include "gtk_interface.h" #if defined(__linux__) || defined(MACOSX) #include <sys/socket.h> #endif
*** 262,335 **** int dy = attr.y > sy ? attr.y - sy : 0; int index; if (isGtkSupported) { ! GdkPixbuf *pixbuf; ! (*fp_gdk_threads_enter)(); ! GdkWindow *root = (*fp_gdk_get_default_root_window)(); ! ! pixbuf = (*fp_gdk_pixbuf_get_from_drawable)(NULL, root, NULL, ! x, y, 0, 0, width, height); ! if (pixbuf && scale != 1) { ! GdkPixbuf *scaledPixbuf; ! x /= scale; ! y /= scale; ! width /= scale; ! height /= scale; ! dx /= scale; ! dy /= scale; ! scaledPixbuf = (*fp_gdk_pixbuf_scale_simple)(pixbuf, width, height, ! GDK_INTERP_BILINEAR); ! (*fp_g_object_unref)(pixbuf); ! pixbuf = scaledPixbuf; ! } ! ! if (pixbuf) { ! int nchan = (*fp_gdk_pixbuf_get_n_channels)(pixbuf); ! int stride = (*fp_gdk_pixbuf_get_rowstride)(pixbuf); ! ! if ((*fp_gdk_pixbuf_get_width)(pixbuf) == width ! && (*fp_gdk_pixbuf_get_height)(pixbuf) == height ! && (*fp_gdk_pixbuf_get_bits_per_sample)(pixbuf) == 8 ! && (*fp_gdk_pixbuf_get_colorspace)(pixbuf) == GDK_COLORSPACE_RGB ! && nchan >= 3 ! ) { ! guchar *p, *pix = (*fp_gdk_pixbuf_get_pixels)(pixbuf); ! ! ary = (*env)->GetPrimitiveArrayCritical(env, pixelArray, NULL); ! if (!ary) { ! (*fp_g_object_unref)(pixbuf); ! (*fp_gdk_threads_leave)(); ! AWT_UNLOCK(); ! return; ! } ! ! for (_y = 0; _y < height; _y++) { ! for (_x = 0; _x < width; _x++) { ! p = pix + _y * stride + _x * nchan; ! ! index = (_y + dy) * jwidth + (_x + dx); ! ary[index] = 0xff000000 ! | (p[0] << 16) ! | (p[1] << 8) ! | (p[2]); ! ! } ! } ! (*env)->ReleasePrimitiveArrayCritical(env, pixelArray, ary, 0); ! if ((*env)->ExceptionCheck(env)) { ! (*fp_g_object_unref)(pixbuf); ! (*fp_gdk_threads_leave)(); ! AWT_UNLOCK(); ! return; ! } ! gtk_failed = FALSE; ! } ! (*fp_g_object_unref)(pixbuf); ! } ! (*fp_gdk_threads_leave)(); } if (gtk_failed) { image = getWindowImage(awt_display, rootWindow, sx, sy, swidth, sheight); --- 262,275 ---- int dy = attr.y > sy ? attr.y - sy : 0; int index; if (isGtkSupported) { ! gtk->gdk_threads_enter(); ! gtk_failed = gtk->get_drawable_data(env, pixelArray, x, y, width, ! jwidth, height, dx, dy, scale); ! gtk->gdk_threads_leave(); } if (gtk_failed) { image = getWindowImage(awt_display, rootWindow, sx, sy, swidth, sheight);
< prev index next >