--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.desktop/share/classes/sun/awt/geom/Edge.java Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.awt.geom;
+
+final class Edge {
+ static final int INIT_PARTS = 4;
+ static final int GROW_PARTS = 10;
+
+ Curve curve;
+ int ctag;
+ int etag;
+ double activey;
+ int equivalence;
+
+ public Edge(Curve c, int ctag) {
+ this(c, ctag, AreaOp.ETAG_IGNORE);
+ }
+
+ public Edge(Curve c, int ctag, int etag) {
+ this.curve = c;
+ this.ctag = ctag;
+ this.etag = etag;
+ }
+
+ public Curve getCurve() {
+ return curve;
+ }
+
+ public int getCurveTag() {
+ return ctag;
+ }
+
+ public int getEdgeTag() {
+ return etag;
+ }
+
+ public void setEdgeTag(int etag) {
+ this.etag = etag;
+ }
+
+ public int getEquivalence() {
+ return equivalence;
+ }
+
+ public void setEquivalence(int eq) {
+ equivalence = eq;
+ }
+
+ private Edge lastEdge;
+ private int lastResult;
+ private double lastLimit;
+
+ public int compareTo(Edge other, double yrange[]) {
+ if (other == lastEdge && yrange[0] < lastLimit) {
+ if (yrange[1] > lastLimit) {
+ yrange[1] = lastLimit;
+ }
+ return lastResult;
+ }
+ if (this == other.lastEdge && yrange[0] < other.lastLimit) {
+ if (yrange[1] > other.lastLimit) {
+ yrange[1] = other.lastLimit;
+ }
+ return 0-other.lastResult;
+ }
+ //long start = System.currentTimeMillis();
+ int ret = curve.compareTo(other.curve, yrange);
+ //long end = System.currentTimeMillis();
+ /*
+ System.out.println("compare: "+
+ ((System.identityHashCode(this) <
+ System.identityHashCode(other))
+ ? this+" to "+other
+ : other+" to "+this)+
+ " == "+ret+" at "+yrange[1]+
+ " in "+(end-start)+"ms");
+ */
+ lastEdge = other;
+ lastLimit = yrange[1];
+ lastResult = ret;
+ return ret;
+ }
+
+ public void record(double yend, int etag) {
+ this.activey = yend;
+ this.etag = etag;
+ }
+
+ public boolean isActiveFor(double y, int etag) {
+ return (this.etag == etag && this.activey >= y);
+ }
+
+ public String toString() {
+ return ("Edge["+curve+
+ ", "+
+ (ctag == AreaOp.CTAG_LEFT ? "L" : "R")+
+ ", "+
+ (etag == AreaOp.ETAG_ENTER ? "I" :
+ (etag == AreaOp.ETAG_EXIT ? "O" : "N"))+
+ "]");
+ }
+}