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

Reply via email to