home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / java2d / pipe / DuctusRenderer.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  3.6 KB  |  225 lines

  1. package sun.java2d.pipe;
  2.  
  3. import java.awt.BasicStroke;
  4. import java.awt.geom.AffineTransform;
  5. import java.awt.geom.PathIterator;
  6. import sun.dc.path.PathConsumer;
  7. import sun.dc.path.PathException;
  8. import sun.dc.pr.PRException;
  9. import sun.dc.pr.PathDasher;
  10. import sun.dc.pr.PathStroker;
  11. import sun.dc.pr.Rasterizer;
  12.  
  13. public class DuctusRenderer {
  14.    static final int[] RasterizerCaps = new int[]{30, 10, 20};
  15.    static final int[] RasterizerCorners = new int[]{50, 10, 40};
  16.    private static Rasterizer theRasterizer;
  17.  
  18.    public static synchronized Rasterizer getRasterizer() {
  19.       Rasterizer var0 = theRasterizer;
  20.       if (var0 == null) {
  21.          var0 = new Rasterizer();
  22.       } else {
  23.          theRasterizer = null;
  24.       }
  25.  
  26.       return var0;
  27.    }
  28.  
  29.    public static synchronized void dropRasterizer(Rasterizer var0) {
  30.       var0.reset();
  31.       theRasterizer = var0;
  32.    }
  33.  
  34.    public static synchronized void getAlpha(Rasterizer var0, byte[] var1, int var2, int var3, int var4) throws PRException {
  35.       try {
  36.          var0.writeAlpha(var1, var2, var3, var4);
  37.       } catch (InterruptedException var6) {
  38.          Thread.currentThread().interrupt();
  39.       }
  40.  
  41.    }
  42.  
  43.    public static PathConsumer createStroker(PathConsumer var0, BasicStroke var1, AffineTransform var2) {
  44.       PathStroker var3 = new PathStroker(var0);
  45.       var0 = var3;
  46.       var3.setPenDiameter(Math.max(var1.getLineWidth(), 0.001F));
  47.       float[] var4;
  48.       if (var2 != null) {
  49.          var4 = new float[4];
  50.          double[] var5 = new double[6];
  51.          var2.getMatrix(var5);
  52.  
  53.          for(int var6 = 0; var6 < 4; ++var6) {
  54.             var4[var6] = (float)var5[var6];
  55.          }
  56.       } else {
  57.          var4 = null;
  58.       }
  59.  
  60.       var3.setPenT4(var4);
  61.       var3.setCaps(RasterizerCaps[var1.getEndCap()]);
  62.       var3.setCorners(RasterizerCorners[var1.getLineJoin()], var1.getMiterLimit());
  63.       float[] var8 = var1.getDashArray();
  64.       if (var8 != null) {
  65.          PathDasher var9 = new PathDasher(var3);
  66.          var9.setDash(var8, var1.getDashPhase());
  67.          var9.setDashT4(var4);
  68.          var0 = var9;
  69.       }
  70.  
  71.       var3.setPenFitting(0.01F, 100);
  72.       return var0;
  73.    }
  74.  
  75.    public static void feedConsumer(PathIterator var0, PathConsumer var1, boolean var2, float var3) throws PathException {
  76.       var1.beginPath();
  77.       boolean var4 = false;
  78.       float var5 = 0.0F;
  79.       float var6 = 0.0F;
  80.       float[] var7 = new float[6];
  81.  
  82.       for(float var8 = 0.5F - var3; !var0.isDone(); var0.next()) {
  83.          int var9 = var0.currentSegment(var7);
  84.          if (var4) {
  85.             var4 = false;
  86.             if (var9 != 0) {
  87.                var1.beginSubpath(var5, var6);
  88.             }
  89.          }
  90.  
  91.          if (var2) {
  92.             switch (var9) {
  93.                case 3:
  94.                   var7[4] = (float)Math.floor((double)(var7[4] + var8)) + var3;
  95.                   var7[5] = (float)Math.floor((double)(var7[5] + var8)) + var3;
  96.                case 2:
  97.                   var7[2] = (float)Math.floor((double)(var7[2] + var8)) + var3;
  98.                   var7[3] = (float)Math.floor((double)(var7[3] + var8)) + var3;
  99.                case 0:
  100.                case 1:
  101.                   var7[0] = (float)Math.floor((double)(var7[0] + var8)) + var3;
  102.                   var7[1] = (float)Math.floor((double)(var7[1] + var8)) + var3;
  103.                case 4:
  104.             }
  105.          }
  106.  
  107.          switch (var9) {
  108.             case 0:
  109.                var5 = var7[0];
  110.                var6 = var7[1];
  111.                var1.beginSubpath(var7[0], var7[1]);
  112.                break;
  113.             case 1:
  114.                var1.appendLine(var7[0], var7[1]);
  115.                break;
  116.             case 2:
  117.                var1.appendQuadratic(var7[0], var7[1], var7[2], var7[3]);
  118.                break;
  119.             case 3:
  120.                var1.appendCubic(var7[0], var7[1], var7[2], var7[3], var7[4], var7[5]);
  121.                break;
  122.             case 4:
  123.                var1.closedSubpath();
  124.                var4 = true;
  125.          }
  126.       }
  127.  
  128.       var1.endPath();
  129.    }
  130.  
  131.    public static Rasterizer createShapeRasterizer(PathIterator var0, AffineTransform var1, BasicStroke var2, boolean var3, float var4) {
  132.       Rasterizer var5 = getRasterizer();
  133.       if (var2 != null) {
  134.          var5.setUsage(3);
  135.          var5.setPenDiameter(Math.max(var2.getLineWidth(), 0.001F));
  136.          float[] var6;
  137.          if (var1 == null) {
  138.             var6 = null;
  139.          } else {
  140.             var6 = new float[4];
  141.             double[] var7 = new double[6];
  142.             var1.getMatrix(var7);
  143.  
  144.             for(int var8 = 0; var8 < 4; ++var8) {
  145.                var6[var8] = (float)var7[var8];
  146.             }
  147.  
  148.             var5.setPenT4(var6);
  149.          }
  150.  
  151.          var5.setCaps(RasterizerCaps[var2.getEndCap()]);
  152.          var5.setCorners(RasterizerCorners[var2.getLineJoin()], var2.getMiterLimit());
  153.          float[] var14 = var2.getDashArray();
  154.          if (var14 != null) {
  155.             var5.setDash(var14, var2.getDashPhase());
  156.             var5.setDashT4(var6);
  157.          }
  158.  
  159.          var5.setPenFitting(0.01F, 15);
  160.       } else {
  161.          var5.setUsage(var0.getWindingRule() == 0 ? 1 : 2);
  162.       }
  163.  
  164.       var5.beginPath();
  165.       boolean var13 = false;
  166.       float var15 = 0.0F;
  167.       float var16 = 0.0F;
  168.       float[] var9 = new float[6];
  169.  
  170.       for(float var10 = 0.5F - var4; !var0.isDone(); var0.next()) {
  171.          int var11 = var0.currentSegment(var9);
  172.          if (var13) {
  173.             var13 = false;
  174.             if (var11 != 0) {
  175.                var5.beginSubpath(var15, var16);
  176.             }
  177.          }
  178.  
  179.          if (var3) {
  180.             switch (var11) {
  181.                case 3:
  182.                   var9[4] = (float)Math.floor((double)(var9[4] + var10)) + var4;
  183.                   var9[5] = (float)Math.floor((double)(var9[5] + var10)) + var4;
  184.                case 2:
  185.                   var9[2] = (float)Math.floor((double)(var9[2] + var10)) + var4;
  186.                   var9[3] = (float)Math.floor((double)(var9[3] + var10)) + var4;
  187.                case 0:
  188.                case 1:
  189.                   var9[0] = (float)Math.floor((double)(var9[0] + var10)) + var4;
  190.                   var9[1] = (float)Math.floor((double)(var9[1] + var10)) + var4;
  191.                case 4:
  192.             }
  193.          }
  194.  
  195.          switch (var11) {
  196.             case 0:
  197.                var15 = var9[0];
  198.                var16 = var9[1];
  199.                var5.beginSubpath(var9[0], var9[1]);
  200.                break;
  201.             case 1:
  202.                var5.appendLine(var9[0], var9[1]);
  203.                break;
  204.             case 2:
  205.                var5.appendQuadratic(var9[0], var9[1], var9[2], var9[3]);
  206.                break;
  207.             case 3:
  208.                var5.appendCubic(var9[0], var9[1], var9[2], var9[3], var9[4], var9[5]);
  209.                break;
  210.             case 4:
  211.                var5.closedSubpath();
  212.                var13 = true;
  213.          }
  214.       }
  215.  
  216.       try {
  217.          var5.endPath();
  218.       } catch (PRException var12) {
  219.          ((Throwable)var12).printStackTrace();
  220.       }
  221.  
  222.       return var5;
  223.    }
  224. }
  225.