Hi,
Attached is the patch that implements KEY_INTERPOLATION and
KEY_ALPHA_INTERPOLATION rendering hints in Graphics2D.
Ok to commit?
Olga.
? .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 <[EMAIL PROTECTED]>
+
+ * 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 <[EMAIL PROTECTED]>
* 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;
+ }
+}
_______________________________________________
Classpath mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/classpath