? .snprj ? libjava.proj ? patch ? patch_interpolation Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.2642 diff -c -p -u -r1.2642 ChangeLog --- ChangeLog 5 Feb 2004 16:34:28 -0000 1.2642 +++ ChangeLog 5 Feb 2004 18:27:30 -0000 @@ -1,3 +1,15 @@ +2004-02-05 Olga Rodimina + + * gnu/java/awt/peer/gtk/GdkGraphics2D.java: + (setRenderingHint): Added implementation of + Interpolation rendering hints. + (setRenderingHints): Ditto. + * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: + (drawPixels): fixed to allow user to choose type + of filtering that should be used when displaying images. + (cairoSurfaceSetFilter): New method. Sets filter type for + interpolation of pixel values. + 2004-02-05 Michael Koch * java/lang/Thread.java: Reordered fields, reformated much code, Index: gnu/java/awt/peer/gtk/GdkGraphics2D.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java,v retrieving revision 1.6 diff -c -p -u -r1.6 GdkGraphics2D.java --- gnu/java/awt/peer/gtk/GdkGraphics2D.java 16 Jan 2004 14:22:23 -0000 1.6 +++ gnu/java/awt/peer/gtk/GdkGraphics2D.java 5 Feb 2004 18:27:30 -0000 @@ -91,6 +91,7 @@ public class GdkGraphics2D extends Graph native private void initState (int width, int height); native private void copyState (GdkGraphics2D g); native public void dispose (); + native private void cairoSurfaceSetFilter(int filter); public void finalize () { @@ -1061,6 +1062,28 @@ public class GdkGraphics2D extends Graph Object hintValue) { hints.put (hintKey, hintValue); + + if (hintKey.equals(RenderingHints.KEY_INTERPOLATION) + || hintKey.equals(RenderingHints.KEY_ALPHA_INTERPOLATION)) + { + + if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR)) + cairoSurfaceSetFilter(0); + + else if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_BILINEAR)) + cairoSurfaceSetFilter(1); + + else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED)) + cairoSurfaceSetFilter(2); + + else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY)) + cairoSurfaceSetFilter(3); + + else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT)) + cairoSurfaceSetFilter(4); + + } + } public Object getRenderingHint(RenderingHints.Key hintKey) @@ -1072,6 +1095,27 @@ public class GdkGraphics2D extends Graph { this.hints = new RenderingHints (getDefaultHints ()); this.hints.add (new RenderingHints (hints)); + + if (hints.containsKey(RenderingHints.KEY_INTERPOLATION)) + { + if(hints.containsValue(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR)) + cairoSurfaceSetFilter(0); + + else if(hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR)) + cairoSurfaceSetFilter(1); + } + + if (hints.containsKey(RenderingHints.KEY_ALPHA_INTERPOLATION)) + { + if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED)) + cairoSurfaceSetFilter(2); + + else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY)) + cairoSurfaceSetFilter(3); + + else if(hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT)) + cairoSurfaceSetFilter(4); + } } public void addRenderingHints(Map hints) Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c =================================================================== RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,v retrieving revision 1.5 diff -c -p -u -r1.5 gnu_java_awt_peer_gtk_GdkGraphics2D.c --- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c 31 Dec 2003 08:58:31 -0000 1.5 +++ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c 5 Feb 2004 18:27:32 -0000 @@ -114,6 +114,15 @@ enum java_awt_geom_path_iterator_winding java_awt_geom_path_iterator_WIND_NON_ZERO = 1 }; +enum java_awt_rendering_hints_filter + { + java_awt_rendering_hints_VALUE_INTERPOLATION_NEAREST_NEIGHBOR = 0, + java_awt_rendering_hints_VALUE_INTERPOLATION_BILINEAR = 1, + java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_SPEED = 2, + java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_QUALITY = 3, + java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_DEFAULT = 4 + + }; static void grab_current_drawable (GtkWidget *widget, GdkDrawable **draw, GdkWindow **win) @@ -683,21 +692,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt native_matrix[2], native_matrix[3], native_matrix[4], native_matrix[5]); cairo_surface_set_matrix (surf, mat); - if (native_matrix[0] != 1. - || native_matrix[1] != 0. - || native_matrix[2] != 0. - || native_matrix[3] != 1.) - { - cairo_surface_set_filter (surf, CAIRO_FILTER_BILINEAR); - cairo_surface_set_filter (gr->surface, CAIRO_FILTER_BILINEAR); - } - else - { - cairo_surface_set_filter (surf, CAIRO_FILTER_FAST); - cairo_surface_set_filter (gr->surface, CAIRO_FILTER_FAST); - } + cairo_surface_set_filter (surf, cairo_surface_get_filter(gr->surface)); cairo_show_surface (gr->cr, surf, w, h); - cairo_surface_set_filter (gr->surface, CAIRO_FILTER_FAST); cairo_matrix_destroy (mat); cairo_surface_destroy (surf); } @@ -1157,3 +1153,30 @@ JNIEXPORT void JNICALL Java_gnu_java_awt cairo_clip (gr->cr); } +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilter + (JNIEnv *env, jobject obj, jint filter) +{ + + struct graphics2d *gr = NULL; + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); + g_assert (gr != NULL); + if (gr->debug) printf ("cairo_surface_set_filter %d\n", filter); + switch ((enum java_awt_rendering_hints_filter) filter) + { + case java_awt_rendering_hints_VALUE_INTERPOLATION_NEAREST_NEIGHBOR: + cairo_surface_set_filter (gr->surface, CAIRO_FILTER_NEAREST); + break; + case java_awt_rendering_hints_VALUE_INTERPOLATION_BILINEAR: + cairo_surface_set_filter (gr->surface, CAIRO_FILTER_BILINEAR); + break; + case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_SPEED: + cairo_surface_set_filter (gr->surface, CAIRO_FILTER_FAST); + break; + case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_DEFAULT: + cairo_surface_set_filter (gr->surface, CAIRO_FILTER_NEAREST); + break; + case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_QUALITY: + cairo_surface_set_filter (gr->surface, CAIRO_FILTER_BEST); + break; + } +}