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 }
|