< prev index next >

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

Print this page
rev 52901 : 8233250: Better X11 rendering
Reviewed-by: prr, rhalade, mschoene, serb


2506     }
2507 
2508     if (pixbuf) {
2509         int nchan = (*fp_gdk_pixbuf_get_n_channels)(pixbuf);
2510         int stride = (*fp_gdk_pixbuf_get_rowstride)(pixbuf);
2511 
2512         if ((*fp_gdk_pixbuf_get_width)(pixbuf) == width
2513                 && (*fp_gdk_pixbuf_get_height)(pixbuf) == height
2514                 && (*fp_gdk_pixbuf_get_bits_per_sample)(pixbuf) == 8
2515                 && (*fp_gdk_pixbuf_get_colorspace)(pixbuf) == GDK_COLORSPACE_RGB
2516                 && nchan >= 3
2517                 ) {
2518             guchar *p, *pix = (*fp_gdk_pixbuf_get_pixels)(pixbuf);
2519 
2520             ary = (*env)->GetPrimitiveArrayCritical(env, pixelArray, NULL);
2521             if (ary) {
2522                 jint _x, _y;
2523                 int index;
2524                 for (_y = 0; _y < height; _y++) {
2525                     for (_x = 0; _x < width; _x++) {
2526                         p = pix + _y * stride + _x * nchan;
2527 
2528                         index = (_y + dy) * jwidth + (_x + dx);
2529                         ary[index] = 0xff000000
2530                                         | (p[0] << 16)
2531                                         | (p[1] << 8)
2532                                         | (p[2]);
2533 
2534                     }
2535                 }
2536                 (*env)->ReleasePrimitiveArrayCritical(env, pixelArray, ary, 0);
2537             }
2538         }
2539         (*fp_g_object_unref)(pixbuf);
2540     }
2541     return JNI_FALSE;
2542 }
2543 
2544 static GdkWindow* gtk2_get_window(void *widget) {
2545     return ((GtkWidget*)widget)->window;
2546 }




2506     }
2507 
2508     if (pixbuf) {
2509         int nchan = (*fp_gdk_pixbuf_get_n_channels)(pixbuf);
2510         int stride = (*fp_gdk_pixbuf_get_rowstride)(pixbuf);
2511 
2512         if ((*fp_gdk_pixbuf_get_width)(pixbuf) == width
2513                 && (*fp_gdk_pixbuf_get_height)(pixbuf) == height
2514                 && (*fp_gdk_pixbuf_get_bits_per_sample)(pixbuf) == 8
2515                 && (*fp_gdk_pixbuf_get_colorspace)(pixbuf) == GDK_COLORSPACE_RGB
2516                 && nchan >= 3
2517                 ) {
2518             guchar *p, *pix = (*fp_gdk_pixbuf_get_pixels)(pixbuf);
2519 
2520             ary = (*env)->GetPrimitiveArrayCritical(env, pixelArray, NULL);
2521             if (ary) {
2522                 jint _x, _y;
2523                 int index;
2524                 for (_y = 0; _y < height; _y++) {
2525                     for (_x = 0; _x < width; _x++) {
2526                         p = pix + (intptr_t) _y * stride + _x * nchan;
2527 
2528                         index = (_y + dy) * jwidth + (_x + dx);
2529                         ary[index] = 0xff000000
2530                                         | (p[0] << 16)
2531                                         | (p[1] << 8)
2532                                         | (p[2]);
2533 
2534                     }
2535                 }
2536                 (*env)->ReleasePrimitiveArrayCritical(env, pixelArray, ary, 0);
2537             }
2538         }
2539         (*fp_g_object_unref)(pixbuf);
2540     }
2541     return JNI_FALSE;
2542 }
2543 
2544 static GdkWindow* gtk2_get_window(void *widget) {
2545     return ((GtkWidget*)widget)->window;
2546 }


< prev index next >