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 / awt / windows / WPathGraphics.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  9.8 KB  |  421 lines

  1. package sun.awt.windows;
  2.  
  3. import java.awt.BasicStroke;
  4. import java.awt.Color;
  5. import java.awt.Font;
  6. import java.awt.Graphics;
  7. import java.awt.Graphics2D;
  8. import java.awt.Image;
  9. import java.awt.Shape;
  10. import java.awt.Stroke;
  11. import java.awt.geom.AffineTransform;
  12. import java.awt.geom.NoninvertibleTransformException;
  13. import java.awt.geom.PathIterator;
  14. import java.awt.geom.Point2D;
  15. import java.awt.geom.Rectangle2D;
  16. import java.awt.geom.RectangularShape;
  17. import java.awt.image.BufferedImage;
  18. import java.awt.image.BufferedImageOp;
  19. import java.awt.image.ColorModel;
  20. import java.awt.image.ImageObserver;
  21. import java.awt.image.RenderedImage;
  22. import java.awt.print.PageFormat;
  23. import java.awt.print.Printable;
  24. import java.awt.print.PrinterException;
  25. import java.awt.print.PrinterJob;
  26. import sun.awt.image.IntegerComponentRaster;
  27. import sun.java2d.PathGraphics;
  28. import sun.java2d.ProxyGraphics2D;
  29. import sun.java2d.RasterPrinterJob;
  30.  
  31. class WPathGraphics extends PathGraphics {
  32.    private static final int DEFAULT_USER_RES = 72;
  33.    private static final float MIN_DEVICE_LINEWIDTH = 1.2F;
  34.    private Font lastFont;
  35.    private Font lastDeviceSizeFont;
  36.    private int lastAngle;
  37.    private float lastScaledFontSize;
  38.  
  39.    WPathGraphics(Graphics2D var1, PrinterJob var2, Printable var3, PageFormat var4, int var5) {
  40.       super(var1, var2, var3, var4, var5);
  41.    }
  42.  
  43.    public Graphics create() {
  44.       return new WPathGraphics((Graphics2D)((ProxyGraphics2D)this).getDelegate().create(), ((ProxyGraphics2D)this).getPrinterJob(), ((PathGraphics)this).getPrintable(), ((PathGraphics)this).getPageFormat(), ((PathGraphics)this).getPageIndex());
  45.    }
  46.  
  47.    public void draw(Shape var1) {
  48.       Stroke var2 = ((ProxyGraphics2D)this).getStroke();
  49.       if (var2 instanceof BasicStroke) {
  50.          BasicStroke var4 = null;
  51.          BasicStroke var3 = (BasicStroke)var2;
  52.          float var6 = var3.getLineWidth();
  53.          Point2D.Float var8 = new Point2D.Float(var6, var6);
  54.          AffineTransform var7 = ((ProxyGraphics2D)this).getTransform();
  55.          var7.deltaTransform(var8, var8);
  56.          float var5 = Math.min(Math.abs(var8.x), Math.abs(var8.y));
  57.          if (var5 < 1.2F) {
  58.             Point2D.Float var9 = new Point2D.Float(1.2F, 1.2F);
  59.  
  60.             try {
  61.                AffineTransform var10 = var7.createInverse();
  62.                var10.deltaTransform(var9, var9);
  63.                float var11 = Math.max(Math.abs(var9.x), Math.abs(var9.y));
  64.                var4 = new BasicStroke(var11, var3.getEndCap(), var3.getLineJoin(), var3.getMiterLimit(), var3.getDashArray(), var3.getDashPhase());
  65.                ((ProxyGraphics2D)this).setStroke(var4);
  66.             } catch (NoninvertibleTransformException var12) {
  67.             }
  68.          }
  69.  
  70.          super.draw(var1);
  71.          if (var4 != null) {
  72.             ((ProxyGraphics2D)this).setStroke(var3);
  73.          }
  74.       } else {
  75.          super.draw(var1);
  76.       }
  77.  
  78.    }
  79.  
  80.    public void drawString(String var1, int var2, int var3) {
  81.       this.drawString(var1, (float)var2, (float)var3);
  82.    }
  83.  
  84.    public void drawString(String var1, float var2, float var3) {
  85.       boolean var4 = false;
  86.       AffineTransform var5 = ((ProxyGraphics2D)this).getTransform();
  87.       int var6 = var5.getType();
  88.       boolean var7 = (var6 & -28) == 0 && ((ProxyGraphics2D)this).getFont().getTransform().isIdentity();
  89.       boolean var8 = this.stringNeedsShaping(var1);
  90.       if (!WPrinterJob.shapeTextProp && var7 && !var8) {
  91.          Point2D.Float var9 = new Point2D.Float(var2, var3);
  92.          var5.transform(var9, var9);
  93.          Font var10 = ((ProxyGraphics2D)this).getFont();
  94.          float var11 = var10.getSize2D();
  95.          Point2D.Double var12 = new Point2D.Double((double)1.0F, (double)0.0F);
  96.          var5.deltaTransform(var12, var12);
  97.          double var13 = Math.sqrt(var12.x * var12.x + var12.y * var12.y);
  98.          float var15 = (float)((double)var11 * var13);
  99.          double var16 = Math.toDegrees(Math.atan2(var12.y, var12.x));
  100.          if (var16 < (double)0.0F) {
  101.             var16 += (double)360.0F;
  102.          }
  103.  
  104.          if (var16 != (double)0.0F) {
  105.             var16 = (double)360.0F - var16;
  106.          }
  107.  
  108.          int var18 = (int)Math.round(var16 * (double)10.0F);
  109.          Font var19;
  110.          if (var10 != null && this.lastFont != null && this.lastDeviceSizeFont != null && var15 == this.lastScaledFontSize && var10.equals(this.lastFont) && var18 == this.lastAngle) {
  111.             var19 = this.lastDeviceSizeFont;
  112.          } else {
  113.             var19 = var10.deriveFont(var15);
  114.             this.lastAngle = var18;
  115.             this.lastScaledFontSize = var15;
  116.             this.lastDeviceSizeFont = var19;
  117.             this.lastFont = var10;
  118.          }
  119.  
  120.          WPrinterJob var20 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob();
  121.          boolean var21 = false;
  122.          boolean var22 = var20.setFont(var19, var18);
  123.          if (!var22) {
  124.             var21 = var20.setLogicalFont(var19, var18);
  125.          }
  126.  
  127.          if (var22 || var21) {
  128.             try {
  129.                var20.setTextColor((Color)((ProxyGraphics2D)this).getPaint());
  130.             } catch (ClassCastException var24) {
  131.                throw new IllegalArgumentException("Expected a Color instance");
  132.             }
  133.  
  134.             this.deviceClip(((ProxyGraphics2D)this).getClip().getPathIterator(var5));
  135.             var20.textOut(var1, var9.x, var9.y, var21 ? var19 : null);
  136.             var4 = true;
  137.          }
  138.       }
  139.  
  140.       if (!var4) {
  141.          super.drawString(var1, var2, var3);
  142.       }
  143.  
  144.    }
  145.  
  146.    private boolean stringNeedsShaping(String var1) {
  147.       boolean var2 = false;
  148.       char[] var3 = var1.toCharArray();
  149.  
  150.       for(int var5 = 0; var5 < var3.length; ++var5) {
  151.          char var4 = var3[var5];
  152.          if ((var4 & '∩╕Ç') != 0) {
  153.             if (var4 >= 1424 && var4 <= 1535) {
  154.                var2 = true;
  155.                break;
  156.             }
  157.  
  158.             if (var4 >= 1536 && var4 <= 1791) {
  159.                var2 = true;
  160.                break;
  161.             }
  162.  
  163.             if (var4 >= 8234 && var4 <= 8238) {
  164.                var2 = true;
  165.                break;
  166.             }
  167.  
  168.             if (var4 >= 8298 && var4 <= 8303) {
  169.                var2 = true;
  170.                break;
  171.             }
  172.          }
  173.       }
  174.  
  175.       return var2;
  176.    }
  177.  
  178.    public boolean drawImage(Image var1, int var2, int var3, ImageObserver var4) {
  179.       return this.drawImage(var1, var2, var3, (Color)null, var4);
  180.    }
  181.  
  182.    public boolean drawImage(Image var1, int var2, int var3, int var4, int var5, ImageObserver var6) {
  183.       return this.drawImage(var1, var2, var3, var4, var5, (Color)null, var6);
  184.    }
  185.  
  186.    public boolean drawImage(Image var1, int var2, int var3, Color var4, ImageObserver var5) {
  187.       int var7 = var1.getWidth((ImageObserver)null);
  188.       int var8 = var1.getHeight((ImageObserver)null);
  189.       boolean var6;
  190.       if (var7 >= 0 && var8 >= 0) {
  191.          var6 = this.drawImage(var1, var2, var3, var7, var8, var4, var5);
  192.       } else {
  193.          var6 = false;
  194.       }
  195.  
  196.       return var6;
  197.    }
  198.  
  199.    public boolean drawImage(Image var1, int var2, int var3, int var4, int var5, Color var6, ImageObserver var7) {
  200.       int var9 = var1.getWidth((ImageObserver)null);
  201.       int var10 = var1.getHeight((ImageObserver)null);
  202.       boolean var8;
  203.       if (var9 >= 0 && var10 >= 0) {
  204.          var8 = this.drawImage(var1, var2, var3, var2 + var4, var3 + var5, 0, 0, var9, var10, var7);
  205.       } else {
  206.          var8 = false;
  207.       }
  208.  
  209.       return var8;
  210.    }
  211.  
  212.    public boolean drawImage(Image var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, ImageObserver var10) {
  213.       return this.drawImage(var1, var2, var3, var4, var5, var6, var7, var8, var9, (Color)null, var10);
  214.    }
  215.  
  216.    public boolean drawImage(Image var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, Color var10, ImageObserver var11) {
  217.       int var12 = var8 - var6;
  218.       int var13 = var9 - var7;
  219.       AffineTransform var14 = new AffineTransform((float)(var4 - var2) / (float)var12, 0.0F, 0.0F, (float)(var5 - var3) / (float)var13, (float)(var2 - var6), (float)(var3 - var7));
  220.       return this.drawImageToGDI(var1, var14, (BufferedImageOp)null, var10, var6, var7, var12, var13);
  221.    }
  222.  
  223.    public boolean drawImage(Image var1, AffineTransform var2, ImageObserver var3) {
  224.       int var5 = var1.getWidth((ImageObserver)null);
  225.       int var6 = var1.getHeight((ImageObserver)null);
  226.       boolean var4;
  227.       if (var5 >= 0 && var6 >= 0) {
  228.          var4 = this.drawImageToGDI(var1, var2, (BufferedImageOp)null, (Color)null, 0, 0, var5, var6);
  229.       } else {
  230.          var4 = false;
  231.       }
  232.  
  233.       return var4;
  234.    }
  235.  
  236.    public void drawImage(BufferedImage var1, BufferedImageOp var2, int var3, int var4) {
  237.       int var6 = var1.getWidth((ImageObserver)null);
  238.       int var7 = var1.getHeight((ImageObserver)null);
  239.       if (var2 != null) {
  240.          var1 = var2.filter(var1, (BufferedImage)null);
  241.       }
  242.  
  243.       if (var6 >= 0 && var7 >= 0) {
  244.          AffineTransform var8 = new AffineTransform(1.0F, 0.0F, 0.0F, 1.0F, (float)var3, (float)var4);
  245.          this.drawImageToGDI(var1, var8, (BufferedImageOp)null, (Color)null, 0, 0, var6, var7);
  246.       } else {
  247.          boolean var5 = false;
  248.       }
  249.  
  250.    }
  251.  
  252.    public void drawRenderedImage(RenderedImage var1, AffineTransform var2) {
  253.       Object var3 = null;
  254.       int var4 = var1.getWidth();
  255.       int var5 = var1.getHeight();
  256.       BufferedImage var7;
  257.       if (var1 instanceof BufferedImage) {
  258.          var7 = (BufferedImage)var1;
  259.       } else {
  260.          var7 = new BufferedImage(var4, var5, 2);
  261.          Graphics2D var6 = var7.createGraphics();
  262.          var6.drawRenderedImage(var1, var2);
  263.       }
  264.  
  265.       this.drawImageToGDI(var7, var2, (BufferedImageOp)null, (Color)null, 0, 0, var4, var5);
  266.    }
  267.  
  268.    private boolean drawImageToGDI(Image var1, AffineTransform var2, BufferedImageOp var3, Color var4, int var5, int var6, int var7, int var8) {
  269.       WPrinterJob var9 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob();
  270.       AffineTransform var10 = ((ProxyGraphics2D)this).getTransform();
  271.       if (var2 == null) {
  272.          var2 = new AffineTransform();
  273.       }
  274.  
  275.       var10.concatenate(var2);
  276.       double[] var11 = new double[6];
  277.       var10.getMatrix(var11);
  278.       Point2D.Float var12 = new Point2D.Float(1.0F, 0.0F);
  279.       Point2D.Float var13 = new Point2D.Float(0.0F, 1.0F);
  280.       var10.deltaTransform(var12, var12);
  281.       var10.deltaTransform(var13, var13);
  282.       Point2D.Float var14 = new Point2D.Float(0.0F, 0.0F);
  283.       double var15 = ((Point2D)var12).distance(var14);
  284.       double var17 = ((Point2D)var13).distance(var14);
  285.       if (var15 != (double)0.0F && var17 != (double)0.0F) {
  286.          AffineTransform var19 = new AffineTransform(var11[0] / var15, var11[1] / var17, var11[2] / var15, var11[3] / var17, var11[4] / var15, var11[5] / var17);
  287.          Rectangle2D.Float var20 = new Rectangle2D.Float((float)var5, (float)var6, (float)var7, (float)var8);
  288.          Shape var21 = var19.createTransformedShape(var20);
  289.          Rectangle2D var22 = var21.getBounds2D();
  290.          int var23 = (int)((RectangularShape)var22).getWidth();
  291.          int var24 = (int)((RectangularShape)var22).getHeight();
  292.          if (var23 > 0 && var24 > 0) {
  293.             if (this.hasTransparentPixels(var1)) {
  294.                ((RasterPrinterJob)var9).saveState(((ProxyGraphics2D)this).getTransform(), ((ProxyGraphics2D)this).getClip(), var22, var15, var17, var20, var2);
  295.                return true;
  296.             }
  297.  
  298.             BufferedImage var25 = new BufferedImage((int)((RectangularShape)var22).getWidth(), (int)((RectangularShape)var22).getHeight(), 2);
  299.             Graphics2D var26 = var25.createGraphics();
  300.             ((Graphics)var26).clipRect(0, 0, var25.getWidth(), var25.getHeight());
  301.             var26.translate(-((RectangularShape)var22).getX(), -((RectangularShape)var22).getY());
  302.             var26.transform(var19);
  303.             if (var4 == null) {
  304.                var4 = Color.white;
  305.             }
  306.  
  307.             ((Graphics)var26).drawImage(var1, var5, var6, var5 + var7, var6 + var8, var5, var6, var5 + var7, var6 + var8, var4, (ImageObserver)null);
  308.             Shape var27 = ((ProxyGraphics2D)this).getClip();
  309.             ((ProxyGraphics2D)this).clip(var2.createTransformedShape(var20));
  310.             this.deviceClip(((ProxyGraphics2D)this).getClip().getPathIterator(((ProxyGraphics2D)this).getTransform()));
  311.             Rectangle2D.Float var28 = new Rectangle2D.Float((float)(((RectangularShape)var22).getX() * var15), (float)(((RectangularShape)var22).getY() * var17), (float)(((RectangularShape)var22).getWidth() * var15), (float)(((RectangularShape)var22).getHeight() * var17));
  312.             IntegerComponentRaster var29 = (IntegerComponentRaster)var25.getRaster();
  313.             var9.drawImageIntRGB(var29.getDataStorage(), var28.x, var28.y, var28.width, var28.height, 0.0F, 0.0F, (float)var25.getWidth(), (float)var25.getHeight(), var25.getWidth(), var25.getHeight());
  314.             ((Graphics)var26).dispose();
  315.             ((ProxyGraphics2D)this).setClip(var27);
  316.          }
  317.       }
  318.  
  319.       return true;
  320.    }
  321.  
  322.    private boolean hasTransparentPixels(Image var1) {
  323.       boolean var2 = true;
  324.       ColorModel var3;
  325.       if (var1 instanceof BufferedImage) {
  326.          BufferedImage var4 = (BufferedImage)var1;
  327.          var3 = var4.getColorModel();
  328.       } else if (var1 instanceof WImage) {
  329.          WImage var6 = (WImage)var1;
  330.          var3 = var6.getColorModel();
  331.       } else {
  332.          var3 = null;
  333.       }
  334.  
  335.       var2 = var3 == null ? true : var3.getTransparency() != 1;
  336.       return var2;
  337.    }
  338.  
  339.    public void redrawRegion(Rectangle2D var1, double var2, double var4, Rectangle2D var6, AffineTransform var7) throws PrinterException {
  340.       WPrinterJob var8 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob();
  341.       Printable var9 = ((PathGraphics)this).getPrintable();
  342.       PageFormat var10 = ((PathGraphics)this).getPageFormat();
  343.       int var11 = ((PathGraphics)this).getPageIndex();
  344.       BufferedImage var12 = new BufferedImage((int)((RectangularShape)var1).getWidth(), (int)((RectangularShape)var1).getHeight(), 2);
  345.       Graphics2D var13 = var12.createGraphics();
  346.       ProxyGraphics2D var14 = new ProxyGraphics2D(var13, var8);
  347.       var14.setColor(Color.white);
  348.       var14.fillRect(0, 0, var12.getWidth(), var12.getHeight());
  349.       var14.clipRect(0, 0, var12.getWidth(), var12.getHeight());
  350.       var14.translate(-((RectangularShape)var1).getX(), -((RectangularShape)var1).getY());
  351.       float var15 = (float)(var8.getXRes() / var2);
  352.       float var16 = (float)(var8.getYRes() / var4);
  353.       var14.scale((double)(var15 / 72.0F), (double)(var16 / 72.0F));
  354.       var14.translate(-var8.getPhysicalPrintableX(var10.getPaper()) / var8.getXRes() * (double)72.0F, -var8.getPhysicalPrintableY(var10.getPaper()) / var8.getYRes() * (double)72.0F);
  355.       var14.transform(new AffineTransform(((PathGraphics)this).getPageFormat().getMatrix()));
  356.       var14.setPaint(Color.black);
  357.       var9.print(var14, var10, var11);
  358.       ((Graphics)var13).dispose();
  359.       ((ProxyGraphics2D)this).clip(var7.createTransformedShape(var6));
  360.       this.deviceClip(((ProxyGraphics2D)this).getClip().getPathIterator(((ProxyGraphics2D)this).getTransform()));
  361.       Rectangle2D.Float var17 = new Rectangle2D.Float((float)(((RectangularShape)var1).getX() * var2), (float)(((RectangularShape)var1).getY() * var4), (float)(((RectangularShape)var1).getWidth() * var2), (float)(((RectangularShape)var1).getHeight() * var4));
  362.       IntegerComponentRaster var18 = (IntegerComponentRaster)var12.getRaster();
  363.       var8.drawImageIntRGB(var18.getDataStorage(), var17.x, var17.y, var17.width, var17.height, 0.0F, 0.0F, (float)var12.getWidth(), (float)var12.getHeight(), var12.getWidth(), var12.getHeight());
  364.    }
  365.  
  366.    protected void deviceFill(PathIterator var1, Color var2) {
  367.       WPrinterJob var3 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob();
  368.       this.convertToWPath(var1);
  369.       var3.selectSolidBrush(var2);
  370.       var3.fillPath();
  371.    }
  372.  
  373.    protected void deviceClip(PathIterator var1) {
  374.       WPrinterJob var2 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob();
  375.       this.convertToWPath(var1);
  376.       var2.selectClipPath();
  377.    }
  378.  
  379.    private void convertToWPath(PathIterator var1) {
  380.       float[] var2 = new float[6];
  381.       WPrinterJob var4 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob();
  382.       byte var5;
  383.       if (var1.getWindingRule() == 0) {
  384.          var5 = 1;
  385.       } else {
  386.          var5 = 2;
  387.       }
  388.  
  389.       var4.setPolyFillMode(var5);
  390.       var4.beginPath();
  391.  
  392.       for(; !var1.isDone(); var1.next()) {
  393.          int var3 = var1.currentSegment(var2);
  394.          switch (var3) {
  395.             case 0:
  396.                var4.moveTo(var2[0], var2[1]);
  397.                break;
  398.             case 1:
  399.                var4.lineTo(var2[0], var2[1]);
  400.                break;
  401.             case 2:
  402.                int var6 = var4.getPenX();
  403.                int var7 = var4.getPenY();
  404.                float var8 = (float)var6 + (var2[0] - (float)var6) * 2.0F / 3.0F;
  405.                float var9 = (float)var7 + (var2[1] - (float)var7) * 2.0F / 3.0F;
  406.                float var10 = var2[2] - (var2[2] - var2[0]) * 2.0F / 3.0F;
  407.                float var11 = var2[3] - (var2[3] - var2[1]) * 2.0F / 3.0F;
  408.                var4.polyBezierTo(var8, var9, var10, var11, var2[2], var2[3]);
  409.                break;
  410.             case 3:
  411.                var4.polyBezierTo(var2[0], var2[1], var2[2], var2[3], var2[4], var2[5]);
  412.                break;
  413.             case 4:
  414.                var4.closeFigure();
  415.          }
  416.       }
  417.  
  418.       var4.endPath();
  419.    }
  420. }
  421.