This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: Get fillPolygon working in xlib: DirectRasterGraphics,IntegerGraphicsState,XGraphics,GC,natGC


This patch implements fillPolygon for xlib.

Index: libjava/ChangeLog
from  Scott Gilbertson  <scottg@mantatest.com>

 * gnu/awt/j2d/DirectRasterGraphics.java,
gnu/awt/j2d/IntegerGraphicsState.java, gnu/awt/xlib/XGraphics.java,
    gnu/gcj/xlib/GC.java, gnu/gcj/xlib/natGC.cc (fillPolygon function in
each): get fillPolygon working with xlib
 * gnu.awt.j2d.IntegerGraphicsState.drawPolyline,
gnu.awt.j2d.IntegerGraphicsState.drawPolygon: fix incorrect
    test for presence of translation offsets.

diff -r -up gcc.patched/libjava/gnu/awt/j2d/DirectRasterGraphics.java
gcc/libjava/gnu/awt/j2d/DirectRasterGraphics.java
--- gcc.patched/libjava/gnu/awt/j2d/DirectRasterGraphics.java 2002-12-02
11:45:17.000000000 -0500
+++ gcc/libjava/gnu/awt/j2d/DirectRasterGraphics.java 2002-12-02
11:15:06.000000000 -0500
@@ -61,7 +61,7 @@ public interface DirectRasterGraphics ex

   public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints);

-  public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints);
+  public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints, int
translateX, int translateY);

   public void drawString(String str, int x, int y);

diff -r -up gcc.patched/libjava/gnu/awt/j2d/IntegerGraphicsState.java
gcc/libjava/gnu/awt/j2d/IntegerGraphicsState.java
--- gcc.patched/libjava/gnu/awt/j2d/IntegerGraphicsState.java 2002-12-02
11:45:17.000000000 -0500
+++ gcc/libjava/gnu/awt/j2d/IntegerGraphicsState.java 2002-12-02
11:47:17.000000000 -0500
@@ -212,7 +212,7 @@ public class IntegerGraphicsState extend

   public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints)
   {
-    if ((tx == 0) || (ty == 0))
+    if ((tx == 0) && (ty == 0))
       {
  directGfx.drawPolyline(xPoints, yPoints, nPoints);
  return;
@@ -223,7 +223,7 @@ public class IntegerGraphicsState extend

   public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
   {
-    if ((tx == 0) || (ty == 0))
+    if ((tx == 0) && (ty == 0))
       {
  directGfx.drawPolygon(xPoints, yPoints, nPoints);
  return;
@@ -232,15 +232,11 @@ public class IntegerGraphicsState extend
     throw new UnsupportedOperationException("translate not implemented");
   }

-  public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)
+  public void fillPolygon (int[] xPoints, int[] yPoints, int nPoints)
   {
-    if ((tx == 0) || (ty == 0))
-      {
- directGfx.fillPolygon(xPoints, yPoints, nPoints);
- return;
-      }
-
-    throw new UnsupportedOperationException("translate not implemented");
+    // FIXME: remove tx & ty args once translation via AffineTransform is
implemented
+    directGfx.fillPolygon (xPoints, yPoints, nPoints, tx, ty);
+    return;
   }

   public boolean drawImage(Image image, int x, int y,
diff -r -up gcc.patched/libjava/gnu/awt/xlib/XGraphics.java
gcc/libjava/gnu/awt/xlib/XGraphics.java
--- gcc.patched/libjava/gnu/awt/xlib/XGraphics.java 2002-12-02
11:45:17.000000000 -0500
+++ gcc/libjava/gnu/awt/xlib/XGraphics.java 2002-12-02
11:14:33.000000000 -0500
@@ -177,9 +177,9 @@ public class XGraphics implements Clonea
   }

   public void fillPolygon(int[] xPoints, int[] yPoints, int
-     nPoints)
+     nPoints, int translateX, int translateY)
   {
-    throw new UnsupportedOperationException("not implemented");
+    context.fillPolygon(xPoints, yPoints, nPoints, translateX, translateY);
   }

   public void drawString(String str, int x, int y)
diff -r -up gcc.patched/libjava/gnu/gcj/xlib/GC.java
gcc/libjava/gnu/gcj/xlib/GC.java
--- gcc.patched/libjava/gnu/gcj/xlib/GC.java 2002-12-02
11:45:18.000000000 -0500
+++ gcc/libjava/gnu/gcj/xlib/GC.java 2002-12-02 11:13:58.000000000 -0500
@@ -84,6 +84,7 @@ public class GC implements Cloneable
   public native void drawRectangle(int x, int y, int w, int h);

   public native void fillRectangle(int x, int y, int w, int h);
+  public native void fillPolygon(int[] xPoints, int[] yPoints, int nPoints,
int translateX, int translateY);

   /**
    *
diff -r -up gcc.patched/libjava/gnu/gcj/xlib/natGC.cc
gcc/libjava/gnu/gcj/xlib/natGC.cc
--- gcc.patched/libjava/gnu/gcj/xlib/natGC.cc 2002-12-02
11:45:18.000000000 -0500
+++ gcc/libjava/gnu/gcj/xlib/natGC.cc 2002-12-02 11:13:16.000000000 -0500
@@ -10,7 +10,8 @@ details.  */

 #include <X11/Xlib.h>

-#include <gcj/cni.h>
+#include <gcj/cni.h>
+#include <gcj/array.h>
 #include <gnu/gcj/RawData.h>
 #include <java/lang/String.h>
 #include <java/awt/Rectangle.h>
@@ -154,6 +155,24 @@ void gnu::gcj::xlib::GC::fillRectangle(j
   // no fast fail
 }

+void gnu::gcj::xlib::GC::fillPolygon(jintArray xPoints, jintArray yPoints,
jint nPoints, jint translateX, jint translateY)
+{
+  Display* display = target->getDisplay();
+  ::Display* dpy = (::Display*) (display->display);
+  ::Drawable drawableXID = target->getXID();
+  ::GC gc = (::GC) structure;
+  typedef ::XPoint xpoint;
+  std::vector<xpoint> points(nPoints+1);
+  for( int i=0; i<nPoints; i++ )
+  {
+    points[i].x = elements(xPoints)[i] + translateX;
+    points[i].y = elements(yPoints)[i] + translateY;
+  }
+  points[nPoints] = points[0];
+  XFillPolygon(dpy, drawableXID, gc, &(points.front()), nPoints, Complex,
CoordModeOrigin );
+  // no fast fail
+}
+
 void gnu::gcj::xlib::GC::clearArea(jint x, jint y, jint w, jint h,
        jboolean exposures)
 {



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]