home *** CD-ROM | disk | FTP | other *** search
- package sun.java2d.pipe;
-
- import java.awt.BasicStroke;
- import java.awt.geom.AffineTransform;
- import java.awt.geom.PathIterator;
- import sun.dc.path.PathConsumer;
- import sun.dc.path.PathException;
- import sun.dc.pr.PRException;
- import sun.dc.pr.PathDasher;
- import sun.dc.pr.PathStroker;
- import sun.dc.pr.Rasterizer;
-
- public class DuctusRenderer {
- static final int[] RasterizerCaps = new int[]{30, 10, 20};
- static final int[] RasterizerCorners = new int[]{50, 10, 40};
- private static Rasterizer theRasterizer;
-
- public static synchronized Rasterizer getRasterizer() {
- Rasterizer var0 = theRasterizer;
- if (var0 == null) {
- var0 = new Rasterizer();
- } else {
- theRasterizer = null;
- }
-
- return var0;
- }
-
- public static synchronized void dropRasterizer(Rasterizer var0) {
- var0.reset();
- theRasterizer = var0;
- }
-
- public static synchronized void getAlpha(Rasterizer var0, byte[] var1, int var2, int var3, int var4) throws PRException {
- try {
- var0.writeAlpha(var1, var2, var3, var4);
- } catch (InterruptedException var6) {
- Thread.currentThread().interrupt();
- }
-
- }
-
- public static PathConsumer createStroker(PathConsumer var0, BasicStroke var1, AffineTransform var2) {
- PathStroker var3 = new PathStroker(var0);
- var0 = var3;
- var3.setPenDiameter(Math.max(var1.getLineWidth(), 0.001F));
- float[] var4;
- if (var2 != null) {
- var4 = new float[4];
- double[] var5 = new double[6];
- var2.getMatrix(var5);
-
- for(int var6 = 0; var6 < 4; ++var6) {
- var4[var6] = (float)var5[var6];
- }
- } else {
- var4 = null;
- }
-
- var3.setPenT4(var4);
- var3.setCaps(RasterizerCaps[var1.getEndCap()]);
- var3.setCorners(RasterizerCorners[var1.getLineJoin()], var1.getMiterLimit());
- float[] var8 = var1.getDashArray();
- if (var8 != null) {
- PathDasher var9 = new PathDasher(var3);
- var9.setDash(var8, var1.getDashPhase());
- var9.setDashT4(var4);
- var0 = var9;
- }
-
- var3.setPenFitting(0.01F, 100);
- return var0;
- }
-
- public static void feedConsumer(PathIterator var0, PathConsumer var1, boolean var2, float var3) throws PathException {
- var1.beginPath();
- boolean var4 = false;
- float var5 = 0.0F;
- float var6 = 0.0F;
- float[] var7 = new float[6];
-
- for(float var8 = 0.5F - var3; !var0.isDone(); var0.next()) {
- int var9 = var0.currentSegment(var7);
- if (var4) {
- var4 = false;
- if (var9 != 0) {
- var1.beginSubpath(var5, var6);
- }
- }
-
- if (var2) {
- switch (var9) {
- case 3:
- var7[4] = (float)Math.floor((double)(var7[4] + var8)) + var3;
- var7[5] = (float)Math.floor((double)(var7[5] + var8)) + var3;
- case 2:
- var7[2] = (float)Math.floor((double)(var7[2] + var8)) + var3;
- var7[3] = (float)Math.floor((double)(var7[3] + var8)) + var3;
- case 0:
- case 1:
- var7[0] = (float)Math.floor((double)(var7[0] + var8)) + var3;
- var7[1] = (float)Math.floor((double)(var7[1] + var8)) + var3;
- case 4:
- }
- }
-
- switch (var9) {
- case 0:
- var5 = var7[0];
- var6 = var7[1];
- var1.beginSubpath(var7[0], var7[1]);
- break;
- case 1:
- var1.appendLine(var7[0], var7[1]);
- break;
- case 2:
- var1.appendQuadratic(var7[0], var7[1], var7[2], var7[3]);
- break;
- case 3:
- var1.appendCubic(var7[0], var7[1], var7[2], var7[3], var7[4], var7[5]);
- break;
- case 4:
- var1.closedSubpath();
- var4 = true;
- }
- }
-
- var1.endPath();
- }
-
- public static Rasterizer createShapeRasterizer(PathIterator var0, AffineTransform var1, BasicStroke var2, boolean var3, float var4) {
- Rasterizer var5 = getRasterizer();
- if (var2 != null) {
- var5.setUsage(3);
- var5.setPenDiameter(Math.max(var2.getLineWidth(), 0.001F));
- float[] var6;
- if (var1 == null) {
- var6 = null;
- } else {
- var6 = new float[4];
- double[] var7 = new double[6];
- var1.getMatrix(var7);
-
- for(int var8 = 0; var8 < 4; ++var8) {
- var6[var8] = (float)var7[var8];
- }
-
- var5.setPenT4(var6);
- }
-
- var5.setCaps(RasterizerCaps[var2.getEndCap()]);
- var5.setCorners(RasterizerCorners[var2.getLineJoin()], var2.getMiterLimit());
- float[] var14 = var2.getDashArray();
- if (var14 != null) {
- var5.setDash(var14, var2.getDashPhase());
- var5.setDashT4(var6);
- }
-
- var5.setPenFitting(0.01F, 15);
- } else {
- var5.setUsage(var0.getWindingRule() == 0 ? 1 : 2);
- }
-
- var5.beginPath();
- boolean var13 = false;
- float var15 = 0.0F;
- float var16 = 0.0F;
- float[] var9 = new float[6];
-
- for(float var10 = 0.5F - var4; !var0.isDone(); var0.next()) {
- int var11 = var0.currentSegment(var9);
- if (var13) {
- var13 = false;
- if (var11 != 0) {
- var5.beginSubpath(var15, var16);
- }
- }
-
- if (var3) {
- switch (var11) {
- case 3:
- var9[4] = (float)Math.floor((double)(var9[4] + var10)) + var4;
- var9[5] = (float)Math.floor((double)(var9[5] + var10)) + var4;
- case 2:
- var9[2] = (float)Math.floor((double)(var9[2] + var10)) + var4;
- var9[3] = (float)Math.floor((double)(var9[3] + var10)) + var4;
- case 0:
- case 1:
- var9[0] = (float)Math.floor((double)(var9[0] + var10)) + var4;
- var9[1] = (float)Math.floor((double)(var9[1] + var10)) + var4;
- case 4:
- }
- }
-
- switch (var11) {
- case 0:
- var15 = var9[0];
- var16 = var9[1];
- var5.beginSubpath(var9[0], var9[1]);
- break;
- case 1:
- var5.appendLine(var9[0], var9[1]);
- break;
- case 2:
- var5.appendQuadratic(var9[0], var9[1], var9[2], var9[3]);
- break;
- case 3:
- var5.appendCubic(var9[0], var9[1], var9[2], var9[3], var9[4], var9[5]);
- break;
- case 4:
- var5.closedSubpath();
- var13 = true;
- }
- }
-
- try {
- var5.endPath();
- } catch (PRException var12) {
- ((Throwable)var12).printStackTrace();
- }
-
- return var5;
- }
- }
-