From 9e508cc4703391622b221a3a7aed00938be9f2ba Mon Sep 17 00:00:00 2001
From: Graydon Hoare <graydon@redhat.com>
Date: Fri, 18 Jul 2003 19:20:33 +0000
Subject: [PATCH] [ ChangeLog ]

2003-07-18  Graydon Hoare  <graydon@redhat.com>

	* java/awt/geom/CubicCurve2D.java,
	java/awt/geom/Line2D.java,
	java/awt/geom/QuadCurve2D.java,
	java/awt/geom/Rectangle2D.java:
	Fix path some calculations, make path iterators follow
	a consistent style.

From-SVN: r69567
---
 libjava/ChangeLog                       |  9 +++++
 libjava/java/awt/geom/CubicCurve2D.java | 54 +++++++++++++------------
 libjava/java/awt/geom/Line2D.java       |  4 +-
 libjava/java/awt/geom/QuadCurve2D.java  | 52 +++++++++++++-----------
 libjava/java/awt/geom/Rectangle2D.java  |  2 +-
 5 files changed, 69 insertions(+), 52 deletions(-)

diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 3adf7a52200e..e65465028c89 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,12 @@
+2003-07-18  Graydon Hoare  <graydon@redhat.com>
+
+	* java/awt/geom/CubicCurve2D.java,
+	java/awt/geom/Line2D.java,
+	java/awt/geom/QuadCurve2D.java,
+	java/awt/geom/Rectangle2D.java: 
+	Fix path some calculations, make path iterators follow
+	a consistent style.
+
 2003-07-18  Mark Wielaard  <mark@klomp.org>
 
 	* java/util/logging/Handler.java (isLoggable): Check record level
diff --git a/libjava/java/awt/geom/CubicCurve2D.java b/libjava/java/awt/geom/CubicCurve2D.java
index 2d303c7f6a75..2bc0b358b190 100644
--- a/libjava/java/awt/geom/CubicCurve2D.java
+++ b/libjava/java/awt/geom/CubicCurve2D.java
@@ -204,7 +204,7 @@ public abstract class CubicCurve2D implements Shape, Cloneable
     return new PathIterator()
     {
       /** Current coordinate. */
-      private int current;
+      private int current = 0;
 
       public int getWindingRule()
       {
@@ -213,7 +213,7 @@ public abstract class CubicCurve2D implements Shape, Cloneable
 
       public boolean isDone()
       {
-        return current < 2;
+        return current >= 2;
       }
 
       public void next()
@@ -223,52 +223,56 @@ public abstract class CubicCurve2D implements Shape, Cloneable
 
       public int currentSegment(float[] coords)
       {
-        if (current == 0)
+        int result;
+        switch (current)
           {
+          case 0:
             coords[0] = (float) getX1();
             coords[1] = (float) getY1();
-            if (at != null)
-              at.transform(coords, 0, coords, 0, 1);
-            return SEG_MOVETO;
-          }
-        if (current == 1)
-          {
+            result = SEG_MOVETO;
+            break;            
+          case 1:
             coords[0] = (float) getCtrlX1();
             coords[1] = (float) getCtrlY1();
             coords[2] = (float) getCtrlX2();
             coords[3] = (float) getCtrlY2();
             coords[4] = (float) getX2();
             coords[5] = (float) getY2();
-            if (at != null)
-              at.transform(coords, 0, coords, 0, 3);
-            return SEG_CUBICTO;
+            result = SEG_CUBICTO;
+            break;
+          default:
+            throw new NoSuchElementException("cubic iterator out of bounds");            
           }
-        throw new NoSuchElementException("cubic iterator out of bounds");
+        if (at != null)
+          at.transform(coords, 0, coords, 0, 3);
+        return result;
       }
 
       public int currentSegment(double[] coords)
       {
-        if (current == 0)
+        int result;
+        switch (current)
           {
+          case 0:
             coords[0] = getX1();
             coords[1] = getY1();
-            if (at != null)
-              at.transform(coords, 0, coords, 0, 1);
-            return SEG_MOVETO;
-          }
-        if (current == 1)
-          {
+            result = SEG_MOVETO;
+            break;
+          case 1:
             coords[0] = getCtrlX1();
             coords[1] = getCtrlY1();
             coords[2] = getCtrlX2();
             coords[3] = getCtrlY2();
             coords[4] = getX2();
             coords[5] = getY2();
-            if (at != null)
-              at.transform(coords, 0, coords, 0, 3);
-            return SEG_CUBICTO;
-          }
-        throw new NoSuchElementException("cubic iterator out of bounds");
+            result = SEG_CUBICTO;
+            break;
+          default:
+            throw new NoSuchElementException("cubic iterator out of bounds");
+          }        
+        if (at != null)
+          at.transform(coords, 0, coords, 0, 3);
+        return result;
       }
     };
   }
diff --git a/libjava/java/awt/geom/Line2D.java b/libjava/java/awt/geom/Line2D.java
index d2dd65c43419..15b2ecae80cd 100644
--- a/libjava/java/awt/geom/Line2D.java
+++ b/libjava/java/awt/geom/Line2D.java
@@ -668,7 +668,7 @@ public abstract class Line2D implements Shape, Cloneable
     return new PathIterator()
     {
       /** Current coordinate. */
-      private int current;
+      private int current = 0;
 
       public int getWindingRule()
       {
@@ -677,7 +677,7 @@ public abstract class Line2D implements Shape, Cloneable
 
       public boolean isDone()
       {
-        return current < 2;
+        return current >= 2;
       }
 
       public void next()
diff --git a/libjava/java/awt/geom/QuadCurve2D.java b/libjava/java/awt/geom/QuadCurve2D.java
index 05748fc979de..6aed05907562 100644
--- a/libjava/java/awt/geom/QuadCurve2D.java
+++ b/libjava/java/awt/geom/QuadCurve2D.java
@@ -215,7 +215,7 @@ public abstract class QuadCurve2D implements Shape, Cloneable
     return new PathIterator()
     {
       /** Current coordinate. */
-      private int current;
+      private int current = 0;
 
       public int getWindingRule()
       {
@@ -224,7 +224,7 @@ public abstract class QuadCurve2D implements Shape, Cloneable
 
       public boolean isDone()
       {
-        return current < 2;
+        return current >= 2;
       }
 
       public void next()
@@ -234,48 +234,52 @@ public abstract class QuadCurve2D implements Shape, Cloneable
 
       public int currentSegment(float[] coords)
       {
-        if (current == 0)
+        int result;
+        switch (current)
           {
+          case 0:
             coords[0] = (float) getX1();
             coords[1] = (float) getY1();
-            if (at != null)
-              at.transform(coords, 0, coords, 0, 1);
-            return SEG_MOVETO;
-          }
-        if (current == 1)
-          {
+            result = SEG_MOVETO;
+            break;
+          case 1:
             coords[0] = (float) getCtrlX();
             coords[1] = (float) getCtrlY();
             coords[2] = (float) getX2();
             coords[3] = (float) getY2();
-            if (at != null)
-              at.transform(coords, 0, coords, 0, 2);
-            return SEG_QUADTO;
+            result = SEG_QUADTO;
+            break;
+          default:
+            throw new NoSuchElementException("quad iterator out of bounds");
           }
-        throw new NoSuchElementException("quad iterator out of bounds");
+        if (at != null)
+          at.transform(coords, 0, coords, 0, 2);
+        return result;
       }
 
       public int currentSegment(double[] coords)
       {
-        if (current == 0)
+        int result;
+        switch (current)
           {
+          case 0:
             coords[0] = getX1();
             coords[1] = getY1();
-            if (at != null)
-              at.transform(coords, 0, coords, 0, 1);
-            return SEG_MOVETO;
-          }
-        if (current == 1)
-          {
+            result = SEG_MOVETO;
+            break;
+          case 1:
             coords[0] = getCtrlX();
             coords[1] = getCtrlY();
             coords[2] = getX2();
             coords[3] = getY2();
-            if (at != null)
-              at.transform(coords, 0, coords, 0, 2);
-            return SEG_QUADTO;
+            result = SEG_QUADTO;
+            break;
+          default:
+            throw new NoSuchElementException("quad iterator out of bounds");
           }
-        throw new NoSuchElementException("quad iterator out of bounds");
+        if (at != null)
+          at.transform(coords, 0, coords, 0, 2);
+        return result;
       }
     };
   }
diff --git a/libjava/java/awt/geom/Rectangle2D.java b/libjava/java/awt/geom/Rectangle2D.java
index e0a278a575dc..e63e1bad1349 100644
--- a/libjava/java/awt/geom/Rectangle2D.java
+++ b/libjava/java/awt/geom/Rectangle2D.java
@@ -395,7 +395,7 @@ public abstract class Rectangle2D extends RectangularShape
     return new PathIterator()
     {
       /** Current coordinate. */
-      private int current = (maxx >= minx && maxy >= miny) ? 6 : 0;
+      private int current = (maxx <= minx && maxy <= miny) ? 6 : 0;
 
       public int getWindingRule()
       {
-- 
GitLab