commit-classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[commit-cp] classpath native/jni/gtk-peergnu_java_awt_peer_...


From: Roman Kennke
Subject: [commit-cp] classpath native/jni/gtk-peergnu_java_awt_peer_...
Date: Mon, 12 Jun 2006 10:32:47 +0000

CVSROOT:        /cvsroot/classpath
Module name:    classpath
Changes by:     Roman Kennke <rabbit78> 06/06/12 10:32:45

Modified files:
        native/jni/gtk-peer: gnu_java_awt_peer_gtk_CairoSurface.c 
                             gnu_java_awt_peer_gtk_CairoGraphics2D.c 
        include        : gnu_java_awt_peer_gtk_CairoSurface.h 
                         gnu_java_awt_peer_gtk_CairoGraphics2D.h 
        gnu/java/awt/peer/gtk: CairoGraphics2D.java CairoSurface.java 
        .              : ChangeLog 

Log message:
        2006-06-12  Roman Kennke  <address@hidden>
        
                * gnu/java/awt/peer/gtk/CairoGraphics2D.java
                (drawPixels): Include alpha in parameter list.
                (cairoFill): Include alpha in parameter list.
                (setComposite): Don't modify the color.
                (draw(Shape))): Use fill when the current composite has an alpha
                of != 1.0, so that the stroked shaped will be composited.
                (fill(Shape)): Call cairoFill() with alpha.
                (drawImage): Call drawPixels or drawSurface with alpha.
                (drawGlyphVector): When composite alpha is != 1.0, render the
                outline using fill() to enable compositing for text.
                (drawRaster): Call drawPixels with alpha.
                * gnu/java/awt/peer/gtk/CairoGraphics2D.java
                (nativeDrawSurface): Include alpha in parameter list.
                (drawSurface): Include alpha in parameter list. Pass it to
                nativeDrawSurface().
                * include/gnu_java_awt_peer_gtk_CairoGraphics2D.h
                * include/gnu_java_awt_peer_gtk_CairoSurface.h:
                Regenerated.
                * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
                (drawPixels): Handle possible alpha for compositing.
                (cairoFill): Likewise.
                * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
                (nativeDrawSurface): Handle possible alpha for compositing.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c?cvsroot=classpath&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c?cvsroot=classpath&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/classpath/include/gnu_java_awt_peer_gtk_CairoSurface.h?cvsroot=classpath&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h?cvsroot=classpath&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java?cvsroot=classpath&r1=1.19&r2=1.20
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/java/awt/peer/gtk/CairoSurface.java?cvsroot=classpath&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/classpath/ChangeLog?cvsroot=classpath&r1=1.7778&r2=1.7779

Patches:
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c    10 Jun 2006 
14:16:09 -0000      1.18
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c    12 Jun 2006 
10:32:44 -0000      1.19
@@ -181,7 +181,7 @@
 JNIEXPORT void JNICALL
 Java_gnu_java_awt_peer_gtk_CairoSurface_nativeDrawSurface 
 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
- jlong surfacePointer, jlong context, jdoubleArray java_matrix)
+ jlong surfacePointer, jlong context, jdoubleArray java_matrix, double alpha)
 {
   struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, context);
   cairo_t *cr = gr->cr;
@@ -207,7 +207,11 @@
    cairo_pattern_set_matrix (p, &mat);
 
    cairo_set_source(cr, p);
+   if (alpha == 1.0)
    cairo_paint(cr);
+   else
+     cairo_paint_with_alpha(cr, alpha);
+
    cairo_pattern_destroy(p);
  }
   

Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c 10 Jun 2006 
14:16:09 -0000      1.9
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c 12 Jun 2006 
10:32:44 -0000      1.10
@@ -188,7 +188,7 @@
 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)
+ jint w, jint h, jint stride, jdoubleArray java_matrix, jdouble alpha)
 {
   jint *native_pixels = NULL;
   jdouble *native_matrix = NULL;
@@ -218,7 +218,11 @@
    if (gr->pattern)
      cairo_pattern_set_filter (p, cairo_pattern_get_filter (gr->pattern));
    cairo_set_source (gr->cr, p);
+   if (alpha == 1.)
    cairo_paint (gr->cr);
+   else
+     cairo_paint_with_alpha(gr->cr, alpha);
+
    cairo_pattern_destroy (p);
    cairo_surface_destroy (surf);
  }
@@ -581,12 +585,20 @@
 JNIEXPORT void JNICALL
 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFill 
 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
- jlong pointer)
+ jlong pointer, jdouble alpha)
 {
   struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
   g_assert (gr != NULL);
 
+  if (alpha == 1.0)
   cairo_fill (gr->cr);
+  else
+    {
+      cairo_save(gr->cr);
+      cairo_clip(gr->cr);
+      cairo_paint_with_alpha(gr->cr, alpha);
+      cairo_restore(gr->cr);
+    }
 }
 
 JNIEXPORT void JNICALL
@@ -653,6 +665,7 @@
     }
 }
 
+
 /************************** FONT STUFF ****************************/
 static void
 install_font_peer(cairo_t *cr,
@@ -703,4 +716,3 @@
   cairo_pattern_set_matrix (gr->pattern, &mat);
 }
 
-

Index: include/gnu_java_awt_peer_gtk_CairoSurface.h
===================================================================
RCS file: 
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_CairoSurface.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- include/gnu_java_awt_peer_gtk_CairoSurface.h        10 Jun 2006 14:16:10 
-0000      1.5
+++ include/gnu_java_awt_peer_gtk_CairoSurface.h        12 Jun 2006 10:32:44 
-0000      1.6
@@ -14,7 +14,7 @@
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_destroy (JNIEnv 
*env, jobject, jlong, jlong);
 JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_nativeGetElem 
(JNIEnv *env, jobject, jlong, jint);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_nativeSetElem 
(JNIEnv *env, jobject, jlong, jint, jint);
-JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoSurface_nativeDrawSurface (JNIEnv *env, 
jobject, jlong, jlong, jdoubleArray);
+JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoSurface_nativeDrawSurface (JNIEnv *env, 
jobject, jlong, jlong, jdoubleArray, jdouble);
 JNIEXPORT jintArray JNICALL 
Java_gnu_java_awt_peer_gtk_CairoSurface_nativeGetPixels (JNIEnv *env, jobject, 
jlong, jint);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_nativeSetPixels 
(JNIEnv *env, jobject, jlong, jintArray);
 JNIEXPORT jlong JNICALL 
Java_gnu_java_awt_peer_gtk_CairoSurface_getFlippedBuffer (JNIEnv *env, jobject, 
jlong, jint);

Index: include/gnu_java_awt_peer_gtk_CairoGraphics2D.h
===================================================================
RCS file: 
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- include/gnu_java_awt_peer_gtk_CairoGraphics2D.h     10 Jun 2006 14:16:10 
-0000      1.5
+++ include/gnu_java_awt_peer_gtk_CairoGraphics2D.h     12 Jun 2006 10:32:44 
-0000      1.6
@@ -12,7 +12,7 @@
 
 JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_init 
(JNIEnv *env, jobject, jlong);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_disposeNative (JNIEnv *env, jobject, 
jlong);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_drawPixels 
(JNIEnv *env, jobject, jlong, jintArray, jint, jint, jint, jdoubleArray);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_drawPixels 
(JNIEnv *env, jobject, jlong, jintArray, jint, jint, jint, jdoubleArray, 
jdouble);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_setGradient 
(JNIEnv *env, jobject, jlong, jdouble, jdouble, jdouble, jdouble, jint, jint, 
jint, jint, jint, jint, jint, jint, jboolean);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_setTexturePixels (JNIEnv *env, 
jobject, jlong, jintArray, jint, jint, jint);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetMatrix (JNIEnv *env, 
jobject, jlong, jdoubleArray);
@@ -32,7 +32,7 @@
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelLineTo (JNIEnv *env, 
jobject, jlong, jdouble, jdouble);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoCurveTo 
(JNIEnv *env, jobject, jlong, jdouble, jdouble, jdouble, jdouble, jdouble, 
jdouble);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoStroke 
(JNIEnv *env, jobject, jlong);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFill 
(JNIEnv *env, jobject, jlong);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFill 
(JNIEnv *env, jobject, jlong, jdouble);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClip 
(JNIEnv *env, jobject, jlong);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoPreserveClip (JNIEnv *env, 
jobject, jlong);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoResetClip (JNIEnv *env, 
jobject, jlong);

Index: gnu/java/awt/peer/gtk/CairoGraphics2D.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- gnu/java/awt/peer/gtk/CairoGraphics2D.java  11 Jun 2006 11:21:52 -0000      
1.19
+++ gnu/java/awt/peer/gtk/CairoGraphics2D.java  12 Jun 2006 10:32:44 -0000      
1.20
@@ -65,6 +65,7 @@
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Arc2D;
 import java.awt.geom.Area;
+import java.awt.geom.GeneralPath;
 import java.awt.geom.Line2D;
 import java.awt.geom.NoninvertibleTransformException;
 import java.awt.geom.PathIterator;
@@ -309,7 +310,7 @@
    * @param i2u - affine transform array
    */
   private native void drawPixels(long pointer, int[] pixels, int w, int h,
-                                 int stride, double[] i2u);
+                                 int stride, double[] i2u, double alpha);
 
   private native void setGradient(long pointer, double x1, double y1,
                                   double x2, double y2,
@@ -406,7 +407,7 @@
   /**
    * Fill current path
    */
-  private native void cairoFill(long pointer);
+  private native void cairoFill(long pointer, double alpha);
 
   /** 
    * Clip current path
@@ -802,9 +803,6 @@
       {
        AlphaComposite a = (AlphaComposite) comp;
        cairoSetOperator(nativePointer, a.getRule());
-       Color c = getColor();
-       setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(),
-                          (int) (a.getAlpha() * ((float) c.getAlpha()))));
       }
     else
       {
@@ -817,8 +815,21 @@
 
   public void draw(Shape s)
   {
-    if (stroke != null && ! (stroke instanceof BasicStroke))
+    if ((stroke != null && ! (stroke instanceof BasicStroke))
+        || (comp instanceof AlphaComposite
+            && ((AlphaComposite) comp).getAlpha() != 1.0))
+      {
+        // FIXME: This is a hack to work around BasicStrokes's current
+        // limitations wrt cubic curves.
+        // See CubicSegment.getDisplacedSegments().
+        if (stroke instanceof BasicStroke)
       {
+            PathIterator flatten = s.getPathIterator(new AffineTransform(),
+                                                       1.0);
+            GeneralPath p = new GeneralPath();
+            p.append(flatten, false);
+            s = p;
+          }
        fill(stroke.createStrokedShape(s));
        return;
       }
@@ -849,7 +860,10 @@
     else
       walkPath(s.getPathIterator(null), false);
 
-    cairoFill(nativePointer);
+    double alpha = 1.0;
+    if (comp instanceof AlphaComposite)
+      alpha = ((AlphaComposite) comp).getAlpha();
+    cairoFill(nativePointer, alpha);
   }
 
   /**
@@ -1125,9 +1139,13 @@
 
     invertedXform.getMatrix(i2u);
 
+    double alpha = 1.0;
+    if (comp instanceof AlphaComposite)
+      alpha = ((AlphaComposite) comp).getAlpha();
+
     if(db instanceof CairoSurface)
       {
-       ((CairoSurface)db).drawSurface(nativePointer, i2u);
+       ((CairoSurface)db).drawSurface(nativePointer, i2u, alpha);
        return true;
       }
            
@@ -1163,7 +1181,7 @@
                          null, 0, width);
       }
 
-    drawPixels(nativePointer, pixels, width, height, width, i2u);
+    drawPixels(nativePointer, pixels, width, height, width, i2u, alpha);
 
     // Cairo seems to lose the current color which must be restored.
     updateColor();
@@ -1295,7 +1313,10 @@
 
   public void drawGlyphVector(GlyphVector gv, float x, float y)
   {
-    if (gv instanceof FreetypeGlyphVector)
+    double alpha = 1.0;
+    if (comp instanceof AlphaComposite)
+      alpha = ((AlphaComposite) comp).getAlpha();
+    if (gv instanceof FreetypeGlyphVector && alpha == 1.0)
       {
         int n = gv.getNumGlyphs ();
         int[] codes = gv.getGlyphCodes (0, n, null);
@@ -1463,8 +1484,11 @@
       for (int i = 0; i < pixels.length; i++)
        pixels[i] |= 0xFF000000;
 
+    double alpha = 1.0;
+    if (comp instanceof AlphaComposite)
+      alpha = ((AlphaComposite) comp).getAlpha();
     drawPixels(nativePointer, pixels, r.getWidth(), r.getHeight(),
-               r.getWidth(), i2u);
+               r.getWidth(), i2u, alpha);
 
     // Cairo seems to lose the current color which must be restored.
     updateColor();

Index: gnu/java/awt/peer/gtk/CairoSurface.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/CairoSurface.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- gnu/java/awt/peer/gtk/CairoSurface.java     10 Jun 2006 10:33:18 -0000      
1.8
+++ gnu/java/awt/peer/gtk/CairoSurface.java     12 Jun 2006 10:32:44 -0000      
1.9
@@ -112,11 +112,11 @@
    * with an affine transform given by i2u.
    */
   public native void nativeDrawSurface(long surfacePointer, long 
contextPointer,
-                                       double[] i2u);
+                                       double[] i2u, double alpha);
 
-  public void drawSurface(long contextPointer, double[] i2u)
+  public void drawSurface(long contextPointer, double[] i2u, double alpha)
   {
-    nativeDrawSurface(surfacePointer, contextPointer, i2u);
+    nativeDrawSurface(surfacePointer, contextPointer, i2u, alpha);
   }
 
   /**

Index: ChangeLog
===================================================================
RCS file: /cvsroot/classpath/classpath/ChangeLog,v
retrieving revision 1.7778
retrieving revision 1.7779
diff -u -b -r1.7778 -r1.7779
--- ChangeLog   12 Jun 2006 08:51:15 -0000      1.7778
+++ ChangeLog   12 Jun 2006 10:32:44 -0000      1.7779
@@ -1,3 +1,29 @@
+2006-06-12  Roman Kennke  <address@hidden>
+
+       * gnu/java/awt/peer/gtk/CairoGraphics2D.java
+       (drawPixels): Include alpha in parameter list.
+       (cairoFill): Include alpha in parameter list.
+       (setComposite): Don't modify the color.
+       (draw(Shape))): Use fill when the current composite has an alpha
+       of != 1.0, so that the stroked shaped will be composited.
+       (fill(Shape)): Call cairoFill() with alpha.
+       (drawImage): Call drawPixels or drawSurface with alpha.
+       (drawGlyphVector): When composite alpha is != 1.0, render the
+       outline using fill() to enable compositing for text.
+       (drawRaster): Call drawPixels with alpha.
+       * gnu/java/awt/peer/gtk/CairoGraphics2D.java
+       (nativeDrawSurface): Include alpha in parameter list.
+       (drawSurface): Include alpha in parameter list. Pass it to
+       nativeDrawSurface().
+       * include/gnu_java_awt_peer_gtk_CairoGraphics2D.h
+       * include/gnu_java_awt_peer_gtk_CairoSurface.h:
+       Regenerated.
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
+       (drawPixels): Handle possible alpha for compositing.
+       (cairoFill): Likewise.
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
+       (nativeDrawSurface): Handle possible alpha for compositing.
+
 2006-06-12  Mark Wielaard  <address@hidden>
 
        * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java (streamImage):




reply via email to

[Prev in Thread] Current Thread [Next in Thread]