home *** CD-ROM | disk | FTP | other *** search
- package sun.java2d.loops;
-
- import java.awt.image.WritableRaster;
-
- public final class GeneralRenderer implements GraphicsPrimitives {
- static int[] ST_ANY_UNARY = new int[]{-1};
- static int OUTCODE_TOP = 1;
- static int OUTCODE_BOTTOM = 2;
- static int OUTCODE_LEFT = 4;
- static int OUTCODE_RIGHT = 8;
-
- public final GraphicsPrimitive[] getPrimitives() {
- GraphicsPrimitive[] var1 = new GraphicsPrimitive[]{new GraphicsPrimitiveProxy(this, "FillRectANY", ST_ANY_UNARY, FillRect.getMethodSignature()), new GraphicsPrimitiveProxy(this, "FillSpansANY", ST_ANY_UNARY, FillSpans.getMethodSignature()), new GraphicsPrimitiveProxy(this, "DrawLineANY", ST_ANY_UNARY, DrawLine.getMethodSignature()), new GraphicsPrimitiveProxy(this, "FillPolygonsANY", ST_ANY_UNARY, FillPolygons.getMethodSignature()), new GraphicsPrimitiveProxy(this, "DrawPolygonsANY", ST_ANY_UNARY, DrawPolygons.getMethodSignature()), new GraphicsPrimitiveProxy(this, "DrawRectANY", ST_ANY_UNARY, DrawRect.getMethodSignature())};
- return var1;
- }
-
- static void drawPoly(ImageData var0, Object var1, int[] var2, int[] var3, int var4, int var5, boolean var6) {
- int var9;
- int var7 = var9 = var2[var4];
- int var10;
- int var8 = var10 = var3[var4];
-
- while(true) {
- --var5;
- if (var5 <= 0) {
- if (var6 && (var9 != var7 || var10 != var8)) {
- doDrawLine(var0, var1, var9, var10, var7, var8);
- }
-
- return;
- }
-
- ++var4;
- int var11 = var2[var4];
- int var12 = var3[var4];
- doDrawLine(var0, var1, var9, var10, var11, var12);
- var9 = var11;
- var10 = var12;
- }
- }
-
- static void doDrawLine(ImageData var0, Object var1, int var2, int var3, int var4, int var5) {
- WritableRaster var10 = (WritableRaster)var0.getRaster();
- if (null != var10) {
- int[] var11 = new int[]{var2, var3, var4, var5};
- if (adjustLine(var0, var11)) {
- int var6 = var11[0];
- int var7 = var11[1];
- int var8 = var11[2];
- int var9 = var11[3];
- if (var6 == var8) {
- if (var7 > var9) {
- do {
- var10.setDataElements(var6, var7, var1);
- --var7;
- } while(var7 >= var9);
-
- } else {
- do {
- var10.setDataElements(var6, var7, var1);
- ++var7;
- } while(var7 <= var9);
-
- }
- } else {
- if (var7 == var9) {
- if (var6 > var8) {
- do {
- var10.setDataElements(var6, var7, var1);
- --var6;
- } while(var6 >= var8);
- } else {
- do {
- var10.setDataElements(var6, var7, var1);
- ++var6;
- } while(var6 <= var8);
- }
- } else {
- int var12 = var4 - var2;
- int var13 = var5 - var3;
- int var14 = var12 < 0 ? -var12 : var12;
- int var15 = var13 < 0 ? -var13 : var13;
- int var16;
- int var17;
- int var18;
- int var19;
- int var20;
- boolean var22;
- if (var14 >= var15) {
- var22 = true;
- var20 = var15 * 2;
- var19 = var14 * 2;
- var17 = var12 < 0 ? -1 : 1;
- var18 = var13 < 0 ? -1 : 1;
- int var21 = -(var19 / 2);
- var14 = -var14;
- var16 = var8 - var6;
- } else {
- var22 = false;
- var20 = var14 * 2;
- var19 = var15 * 2;
- var17 = var13 < 0 ? -1 : 1;
- var18 = var12 < 0 ? -1 : 1;
- var15 = -var15;
- var16 = var9 - var7;
- }
-
- int var24 = -(var19 / 2);
- if (var7 != var3) {
- int var23 = var7 - var3;
- if (var23 < 0) {
- var23 = -var23;
- }
-
- var24 += var23 * var14 * 2;
- }
-
- if (var6 != var2) {
- int var25 = var6 - var2;
- if (var25 < 0) {
- var25 = -var25;
- }
-
- var24 += var25 * var15 * 2;
- }
-
- if (var16 < 0) {
- var16 = -var16;
- }
-
- if (var22) {
- do {
- var10.setDataElements(var6, var7, var1);
- var6 += var17;
- var24 += var20;
- if (var24 >= 0) {
- var7 += var18;
- var24 -= var19;
- }
-
- --var16;
- } while(var16 >= 0);
- } else {
- do {
- var10.setDataElements(var6, var7, var1);
- var7 += var17;
- var24 += var20;
- if (var24 >= 0) {
- var6 += var18;
- var24 -= var19;
- }
-
- --var16;
- } while(var16 >= 0);
- }
- }
-
- }
- }
- }
- }
-
- static int outcode(int var0, int var1, int var2, int var3, int var4, int var5) {
- int var6;
- if (var1 < var3) {
- var6 = OUTCODE_TOP;
- } else if (var1 > var5) {
- var6 = OUTCODE_BOTTOM;
- } else {
- var6 = 0;
- }
-
- if (var0 < var2) {
- var6 |= OUTCODE_LEFT;
- } else if (var0 > var4) {
- var6 |= OUTCODE_RIGHT;
- }
-
- return var6;
- }
-
- static boolean adjustLine(ImageData var0, int[] var1) {
- int var2 = var1[0];
- int var3 = var1[1];
- int var4 = var1[2];
- int var5 = var1[3];
- int var6 = var0.getXOutputArea();
- int var7 = var0.getYOutputArea();
- int var8 = var6 + var0.getDXOutputArea() - 1;
- int var9 = var7 + var0.getDYOutputArea() - 1;
- if (var8 >= var6 && var9 >= var7) {
- if (var2 == var4) {
- if (var2 < var6 || var2 > var8) {
- return false;
- }
-
- if (var3 > var5) {
- int var10 = var3;
- var3 = var5;
- var5 = var10;
- }
-
- if (var3 < var7) {
- var3 = var7;
- }
-
- if (var5 > var9) {
- var5 = var9;
- }
-
- if (var3 > var5) {
- return false;
- }
-
- var1[1] = var3;
- var1[3] = var5;
- } else if (var3 == var5) {
- if (var3 < var7 || var3 > var9) {
- return false;
- }
-
- if (var2 > var4) {
- int var19 = var2;
- var2 = var4;
- var4 = var19;
- }
-
- if (var2 < var6) {
- var2 = var6;
- }
-
- if (var4 > var8) {
- var4 = var8;
- }
-
- if (var2 > var4) {
- return false;
- }
-
- var1[0] = var2;
- var1[2] = var4;
- } else {
- int var12 = var4 - var2;
- int var13 = var5 - var3;
- int var14 = var12 < 0 ? -var12 : var12;
- int var15 = var13 < 0 ? -var13 : var13;
- boolean var16 = var14 >= var15;
- int var20 = outcode(var2, var3, var6, var7, var8, var9);
- int var11 = outcode(var4, var5, var6, var7, var8, var9);
-
- while((var20 | var11) != 0) {
- if ((var20 & var11) != 0) {
- return false;
- }
-
- if (var20 != 0) {
- if (0 != (var20 & (OUTCODE_TOP | OUTCODE_BOTTOM))) {
- if (0 != (var20 & OUTCODE_TOP)) {
- var3 = var7;
- } else {
- var3 = var9;
- }
-
- int var18 = var3 - var1[1];
- if (var18 < 0) {
- var18 = -var18;
- }
-
- int var17 = 2 * var18 * var14 + var15;
- if (var16) {
- var17 += var15 - var14 - 1;
- }
-
- var17 /= 2 * var15;
- if (var12 < 0) {
- var17 = -var17;
- }
-
- var2 = var1[0] + var17;
- } else if (0 != (var20 & (OUTCODE_LEFT | OUTCODE_RIGHT))) {
- if (0 != (var20 & OUTCODE_LEFT)) {
- var2 = var6;
- } else {
- var2 = var8;
- }
-
- int var22 = var2 - var1[0];
- if (var22 < 0) {
- var22 = -var22;
- }
-
- int var27 = 2 * var22 * var15 + var14;
- if (!var16) {
- var27 += var14 - var15 - 1;
- }
-
- var27 /= 2 * var14;
- if (var13 < 0) {
- var27 = -var27;
- }
-
- var3 = var1[1] + var27;
- }
-
- var20 = outcode(var2, var3, var6, var7, var8, var9);
- } else {
- if (0 != (var11 & (OUTCODE_TOP | OUTCODE_BOTTOM))) {
- if (0 != (var11 & OUTCODE_TOP)) {
- var5 = var7;
- } else {
- var5 = var9;
- }
-
- int var29 = var5 - var1[3];
- if (var29 < 0) {
- var29 = -var29;
- }
-
- int var23 = 2 * var29 * var14 + var15;
- if (var16) {
- var23 += var15 - var14;
- } else {
- --var23;
- }
-
- var23 /= 2 * var15;
- if (var12 > 0) {
- var23 = -var23;
- }
-
- var4 = var1[2] + var23;
- } else if (0 != (var11 & (OUTCODE_LEFT | OUTCODE_RIGHT))) {
- if (0 != (var11 & OUTCODE_LEFT)) {
- var4 = var6;
- } else {
- var4 = var8;
- }
-
- int var26 = var4 - var1[2];
- if (var26 < 0) {
- var26 = -var26;
- }
-
- int var30 = 2 * var26 * var15 + var14;
- if (var16) {
- --var30;
- } else {
- var30 += var14 - var15;
- }
-
- var30 /= 2 * var14;
- if (var13 > 0) {
- var30 = -var30;
- }
-
- var5 = var1[3] + var30;
- }
-
- var11 = outcode(var4, var5, var6, var7, var8, var9);
- }
- }
-
- var1[0] = var2;
- var1[1] = var3;
- var1[2] = var4;
- var1[3] = var5;
- }
-
- return true;
- } else {
- return false;
- }
- }
- }
-