diff options
Diffstat (limited to 'native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c')
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c | 75 |
1 files changed, 37 insertions, 38 deletions
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c index 45cf4fbda..0a35a3f18 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c @@ -134,7 +134,11 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_setGradient cairo_pattern_add_color_stop_rgba(pattern, 1.0, r2 / 255.0, g2 / 255.0, b2 / 255.0, a2 / 255.0); - extend = (cyclic == JNI_TRUE) ? CAIRO_EXTEND_REFLECT : CAIRO_EXTEND_NONE; + #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 2, 0) + extend = (cyclic == JNI_TRUE) ? CAIRO_EXTEND_REFLECT : CAIRO_EXTEND_PAD; + #else + extend = (cyclic == JNI_TRUE) ? CAIRO_EXTEND_REFLECT : CAIRO_EXTEND_NONE; + #endif cairo_pattern_set_extend( pattern, extend ); @@ -143,9 +147,9 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_setGradient } JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_CairoGraphics2D_setTexturePixels +Java_gnu_java_awt_peer_gtk_CairoGraphics2D_setPaintPixels (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), - jlong pointer, jintArray jarr, jint w, jint h, jint stride) + jlong pointer, jintArray jarr, jint w, jint h, jint stride, jboolean repeat) { struct cairographics2d *gr = NULL; jint *jpixels = NULL; @@ -180,7 +184,12 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_setTexturePixels g_assert (gr->pattern_surface != NULL); gr->pattern = cairo_pattern_create_for_surface (gr->pattern_surface); g_assert (gr->pattern != NULL); - cairo_pattern_set_extend (gr->pattern, CAIRO_EXTEND_REPEAT); + + if (repeat) + cairo_pattern_set_extend (gr->pattern, CAIRO_EXTEND_REPEAT); + else + cairo_pattern_set_extend (gr->pattern, CAIRO_EXTEND_NONE); + cairo_set_source (gr->cr, gr->pattern); } @@ -188,7 +197,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_drawPixels (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), jlong pointer, jintArray java_pixels, - jint w, jint h, jint stride, jdoubleArray java_matrix, jdouble alpha) + jint w, jint h, jint stride, jdoubleArray java_matrix, jdouble alpha, + jint interpolation) { jint *native_pixels = NULL; jdouble *native_matrix = NULL; @@ -215,8 +225,28 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_drawPixels p = cairo_pattern_create_for_surface (surf); cairo_pattern_set_matrix (p, &mat); - if (gr->pattern) - cairo_pattern_set_filter (p, cairo_pattern_get_filter (gr->pattern)); + switch ((enum java_awt_rendering_hints_filter) interpolation) + { + case java_awt_rendering_hints_VALUE_INTERPOLATION_NEAREST_NEIGHBOR: + cairo_pattern_set_filter (p, CAIRO_FILTER_NEAREST); + break; + case java_awt_rendering_hints_VALUE_INTERPOLATION_BILINEAR: + cairo_pattern_set_filter (p, CAIRO_FILTER_BILINEAR); + break; + case java_awt_rendering_hints_VALUE_INTERPOLATION_BICUBIC: + cairo_pattern_set_filter (p, CAIRO_FILTER_GAUSSIAN); + break; + case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_SPEED: + cairo_pattern_set_filter (p, CAIRO_FILTER_FAST); + break; + case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_DEFAULT: + cairo_pattern_set_filter (p, CAIRO_FILTER_NEAREST); + break; + case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_QUALITY: + cairo_pattern_set_filter (p, CAIRO_FILTER_BEST); + break; + } + cairo_set_source (gr->cr, p); if (alpha == 1.) cairo_paint (gr->cr); @@ -679,37 +709,6 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoPreserveClip } JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSurfaceSetFilter -(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), - jlong pointer, jint filter) -{ - struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); - g_assert (gr != NULL); - - if (gr->pattern == NULL) - return; - - switch ((enum java_awt_rendering_hints_filter) filter) - { - case java_awt_rendering_hints_VALUE_INTERPOLATION_NEAREST_NEIGHBOR: - cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_NEAREST); - break; - case java_awt_rendering_hints_VALUE_INTERPOLATION_BILINEAR: - cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_BILINEAR); - break; - case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_SPEED: - cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_FAST); - break; - case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_DEFAULT: - cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_NEAREST); - break; - case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_QUALITY: - cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_BEST); - break; - } -} - -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawLine (JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)), jlong pointer, jdouble x1, jdouble y1, jdouble x2, jdouble y2) |