home *** CD-ROM | disk | FTP | other *** search
Wrap
package sun.awt.windows; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Shape; import java.awt.Stroke; import java.awt.geom.AffineTransform; import java.awt.geom.NoninvertibleTransformException; import java.awt.geom.PathIterator; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RectangularShape; import java.awt.image.BufferedImage; import java.awt.image.BufferedImageOp; import java.awt.image.ColorModel; import java.awt.image.ImageObserver; import java.awt.image.RenderedImage; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import sun.awt.image.IntegerComponentRaster; import sun.java2d.PathGraphics; import sun.java2d.ProxyGraphics2D; import sun.java2d.RasterPrinterJob; class WPathGraphics extends PathGraphics { private static final int DEFAULT_USER_RES = 72; private static final float MIN_DEVICE_LINEWIDTH = 1.2F; private Font lastFont; private Font lastDeviceSizeFont; private int lastAngle; private float lastScaledFontSize; WPathGraphics(Graphics2D var1, PrinterJob var2, Printable var3, PageFormat var4, int var5) { super(var1, var2, var3, var4, var5); } public Graphics create() { return new WPathGraphics((Graphics2D)((ProxyGraphics2D)this).getDelegate().create(), ((ProxyGraphics2D)this).getPrinterJob(), ((PathGraphics)this).getPrintable(), ((PathGraphics)this).getPageFormat(), ((PathGraphics)this).getPageIndex()); } public void draw(Shape var1) { Stroke var2 = ((ProxyGraphics2D)this).getStroke(); if (var2 instanceof BasicStroke) { BasicStroke var4 = null; BasicStroke var3 = (BasicStroke)var2; float var6 = var3.getLineWidth(); Point2D.Float var8 = new Point2D.Float(var6, var6); AffineTransform var7 = ((ProxyGraphics2D)this).getTransform(); var7.deltaTransform(var8, var8); float var5 = Math.min(Math.abs(var8.x), Math.abs(var8.y)); if (var5 < 1.2F) { Point2D.Float var9 = new Point2D.Float(1.2F, 1.2F); try { AffineTransform var10 = var7.createInverse(); var10.deltaTransform(var9, var9); float var11 = Math.max(Math.abs(var9.x), Math.abs(var9.y)); var4 = new BasicStroke(var11, var3.getEndCap(), var3.getLineJoin(), var3.getMiterLimit(), var3.getDashArray(), var3.getDashPhase()); ((ProxyGraphics2D)this).setStroke(var4); } catch (NoninvertibleTransformException var12) { } } super.draw(var1); if (var4 != null) { ((ProxyGraphics2D)this).setStroke(var3); } } else { super.draw(var1); } } public void drawString(String var1, int var2, int var3) { this.drawString(var1, (float)var2, (float)var3); } public void drawString(String var1, float var2, float var3) { boolean var4 = false; AffineTransform var5 = ((ProxyGraphics2D)this).getTransform(); int var6 = var5.getType(); boolean var7 = (var6 & -28) == 0 && ((ProxyGraphics2D)this).getFont().getTransform().isIdentity(); boolean var8 = this.stringNeedsShaping(var1); if (!WPrinterJob.shapeTextProp && var7 && !var8) { Point2D.Float var9 = new Point2D.Float(var2, var3); var5.transform(var9, var9); Font var10 = ((ProxyGraphics2D)this).getFont(); float var11 = var10.getSize2D(); Point2D.Double var12 = new Point2D.Double((double)1.0F, (double)0.0F); var5.deltaTransform(var12, var12); double var13 = Math.sqrt(var12.x * var12.x + var12.y * var12.y); float var15 = (float)((double)var11 * var13); double var16 = Math.toDegrees(Math.atan2(var12.y, var12.x)); if (var16 < (double)0.0F) { var16 += (double)360.0F; } if (var16 != (double)0.0F) { var16 = (double)360.0F - var16; } int var18 = (int)Math.round(var16 * (double)10.0F); Font var19; if (var10 != null && this.lastFont != null && this.lastDeviceSizeFont != null && var15 == this.lastScaledFontSize && var10.equals(this.lastFont) && var18 == this.lastAngle) { var19 = this.lastDeviceSizeFont; } else { var19 = var10.deriveFont(var15); this.lastAngle = var18; this.lastScaledFontSize = var15; this.lastDeviceSizeFont = var19; this.lastFont = var10; } WPrinterJob var20 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob(); boolean var21 = false; boolean var22 = var20.setFont(var19, var18); if (!var22) { var21 = var20.setLogicalFont(var19, var18); } if (var22 || var21) { try { var20.setTextColor((Color)((ProxyGraphics2D)this).getPaint()); } catch (ClassCastException var24) { throw new IllegalArgumentException("Expected a Color instance"); } this.deviceClip(((ProxyGraphics2D)this).getClip().getPathIterator(var5)); var20.textOut(var1, var9.x, var9.y, var21 ? var19 : null); var4 = true; } } if (!var4) { super.drawString(var1, var2, var3); } } private boolean stringNeedsShaping(String var1) { boolean var2 = false; char[] var3 = var1.toCharArray(); for(int var5 = 0; var5 < var3.length; ++var5) { char var4 = var3[var5]; if ((var4 & '︀') != 0) { if (var4 >= 1424 && var4 <= 1535) { var2 = true; break; } if (var4 >= 1536 && var4 <= 1791) { var2 = true; break; } if (var4 >= 8234 && var4 <= 8238) { var2 = true; break; } if (var4 >= 8298 && var4 <= 8303) { var2 = true; break; } } } return var2; } public boolean drawImage(Image var1, int var2, int var3, ImageObserver var4) { return this.drawImage(var1, var2, var3, (Color)null, var4); } public boolean drawImage(Image var1, int var2, int var3, int var4, int var5, ImageObserver var6) { return this.drawImage(var1, var2, var3, var4, var5, (Color)null, var6); } public boolean drawImage(Image var1, int var2, int var3, Color var4, ImageObserver var5) { int var7 = var1.getWidth((ImageObserver)null); int var8 = var1.getHeight((ImageObserver)null); boolean var6; if (var7 >= 0 && var8 >= 0) { var6 = this.drawImage(var1, var2, var3, var7, var8, var4, var5); } else { var6 = false; } return var6; } public boolean drawImage(Image var1, int var2, int var3, int var4, int var5, Color var6, ImageObserver var7) { int var9 = var1.getWidth((ImageObserver)null); int var10 = var1.getHeight((ImageObserver)null); boolean var8; if (var9 >= 0 && var10 >= 0) { var8 = this.drawImage(var1, var2, var3, var2 + var4, var3 + var5, 0, 0, var9, var10, var7); } else { var8 = false; } return var8; } public boolean drawImage(Image var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, ImageObserver var10) { return this.drawImage(var1, var2, var3, var4, var5, var6, var7, var8, var9, (Color)null, var10); } 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) { int var12 = var8 - var6; int var13 = var9 - var7; AffineTransform var14 = new AffineTransform((float)(var4 - var2) / (float)var12, 0.0F, 0.0F, (float)(var5 - var3) / (float)var13, (float)(var2 - var6), (float)(var3 - var7)); return this.drawImageToGDI(var1, var14, (BufferedImageOp)null, var10, var6, var7, var12, var13); } public boolean drawImage(Image var1, AffineTransform var2, ImageObserver var3) { int var5 = var1.getWidth((ImageObserver)null); int var6 = var1.getHeight((ImageObserver)null); boolean var4; if (var5 >= 0 && var6 >= 0) { var4 = this.drawImageToGDI(var1, var2, (BufferedImageOp)null, (Color)null, 0, 0, var5, var6); } else { var4 = false; } return var4; } public void drawImage(BufferedImage var1, BufferedImageOp var2, int var3, int var4) { int var6 = var1.getWidth((ImageObserver)null); int var7 = var1.getHeight((ImageObserver)null); if (var2 != null) { var1 = var2.filter(var1, (BufferedImage)null); } if (var6 >= 0 && var7 >= 0) { AffineTransform var8 = new AffineTransform(1.0F, 0.0F, 0.0F, 1.0F, (float)var3, (float)var4); this.drawImageToGDI(var1, var8, (BufferedImageOp)null, (Color)null, 0, 0, var6, var7); } else { boolean var5 = false; } } public void drawRenderedImage(RenderedImage var1, AffineTransform var2) { Object var3 = null; int var4 = var1.getWidth(); int var5 = var1.getHeight(); BufferedImage var7; if (var1 instanceof BufferedImage) { var7 = (BufferedImage)var1; } else { var7 = new BufferedImage(var4, var5, 2); Graphics2D var6 = var7.createGraphics(); var6.drawRenderedImage(var1, var2); } this.drawImageToGDI(var7, var2, (BufferedImageOp)null, (Color)null, 0, 0, var4, var5); } private boolean drawImageToGDI(Image var1, AffineTransform var2, BufferedImageOp var3, Color var4, int var5, int var6, int var7, int var8) { WPrinterJob var9 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob(); AffineTransform var10 = ((ProxyGraphics2D)this).getTransform(); if (var2 == null) { var2 = new AffineTransform(); } var10.concatenate(var2); double[] var11 = new double[6]; var10.getMatrix(var11); Point2D.Float var12 = new Point2D.Float(1.0F, 0.0F); Point2D.Float var13 = new Point2D.Float(0.0F, 1.0F); var10.deltaTransform(var12, var12); var10.deltaTransform(var13, var13); Point2D.Float var14 = new Point2D.Float(0.0F, 0.0F); double var15 = ((Point2D)var12).distance(var14); double var17 = ((Point2D)var13).distance(var14); if (var15 != (double)0.0F && var17 != (double)0.0F) { AffineTransform var19 = new AffineTransform(var11[0] / var15, var11[1] / var17, var11[2] / var15, var11[3] / var17, var11[4] / var15, var11[5] / var17); Rectangle2D.Float var20 = new Rectangle2D.Float((float)var5, (float)var6, (float)var7, (float)var8); Shape var21 = var19.createTransformedShape(var20); Rectangle2D var22 = var21.getBounds2D(); int var23 = (int)((RectangularShape)var22).getWidth(); int var24 = (int)((RectangularShape)var22).getHeight(); if (var23 > 0 && var24 > 0) { if (this.hasTransparentPixels(var1)) { ((RasterPrinterJob)var9).saveState(((ProxyGraphics2D)this).getTransform(), ((ProxyGraphics2D)this).getClip(), var22, var15, var17, var20, var2); return true; } BufferedImage var25 = new BufferedImage((int)((RectangularShape)var22).getWidth(), (int)((RectangularShape)var22).getHeight(), 2); Graphics2D var26 = var25.createGraphics(); ((Graphics)var26).clipRect(0, 0, var25.getWidth(), var25.getHeight()); var26.translate(-((RectangularShape)var22).getX(), -((RectangularShape)var22).getY()); var26.transform(var19); if (var4 == null) { var4 = Color.white; } ((Graphics)var26).drawImage(var1, var5, var6, var5 + var7, var6 + var8, var5, var6, var5 + var7, var6 + var8, var4, (ImageObserver)null); Shape var27 = ((ProxyGraphics2D)this).getClip(); ((ProxyGraphics2D)this).clip(var2.createTransformedShape(var20)); this.deviceClip(((ProxyGraphics2D)this).getClip().getPathIterator(((ProxyGraphics2D)this).getTransform())); 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)); IntegerComponentRaster var29 = (IntegerComponentRaster)var25.getRaster(); 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()); ((Graphics)var26).dispose(); ((ProxyGraphics2D)this).setClip(var27); } } return true; } private boolean hasTransparentPixels(Image var1) { boolean var2 = true; ColorModel var3; if (var1 instanceof BufferedImage) { BufferedImage var4 = (BufferedImage)var1; var3 = var4.getColorModel(); } else if (var1 instanceof WImage) { WImage var6 = (WImage)var1; var3 = var6.getColorModel(); } else { var3 = null; } var2 = var3 == null ? true : var3.getTransparency() != 1; return var2; } public void redrawRegion(Rectangle2D var1, double var2, double var4, Rectangle2D var6, AffineTransform var7) throws PrinterException { WPrinterJob var8 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob(); Printable var9 = ((PathGraphics)this).getPrintable(); PageFormat var10 = ((PathGraphics)this).getPageFormat(); int var11 = ((PathGraphics)this).getPageIndex(); BufferedImage var12 = new BufferedImage((int)((RectangularShape)var1).getWidth(), (int)((RectangularShape)var1).getHeight(), 2); Graphics2D var13 = var12.createGraphics(); ProxyGraphics2D var14 = new ProxyGraphics2D(var13, var8); var14.setColor(Color.white); var14.fillRect(0, 0, var12.getWidth(), var12.getHeight()); var14.clipRect(0, 0, var12.getWidth(), var12.getHeight()); var14.translate(-((RectangularShape)var1).getX(), -((RectangularShape)var1).getY()); float var15 = (float)(var8.getXRes() / var2); float var16 = (float)(var8.getYRes() / var4); var14.scale((double)(var15 / 72.0F), (double)(var16 / 72.0F)); var14.translate(-var8.getPhysicalPrintableX(var10.getPaper()) / var8.getXRes() * (double)72.0F, -var8.getPhysicalPrintableY(var10.getPaper()) / var8.getYRes() * (double)72.0F); var14.transform(new AffineTransform(((PathGraphics)this).getPageFormat().getMatrix())); var14.setPaint(Color.black); var9.print(var14, var10, var11); ((Graphics)var13).dispose(); ((ProxyGraphics2D)this).clip(var7.createTransformedShape(var6)); this.deviceClip(((ProxyGraphics2D)this).getClip().getPathIterator(((ProxyGraphics2D)this).getTransform())); 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)); IntegerComponentRaster var18 = (IntegerComponentRaster)var12.getRaster(); 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()); } protected void deviceFill(PathIterator var1, Color var2) { WPrinterJob var3 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob(); this.convertToWPath(var1); var3.selectSolidBrush(var2); var3.fillPath(); } protected void deviceClip(PathIterator var1) { WPrinterJob var2 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob(); this.convertToWPath(var1); var2.selectClipPath(); } private void convertToWPath(PathIterator var1) { float[] var2 = new float[6]; WPrinterJob var4 = (WPrinterJob)((ProxyGraphics2D)this).getPrinterJob(); byte var5; if (var1.getWindingRule() == 0) { var5 = 1; } else { var5 = 2; } var4.setPolyFillMode(var5); var4.beginPath(); for(; !var1.isDone(); var1.next()) { int var3 = var1.currentSegment(var2); switch (var3) { case 0: var4.moveTo(var2[0], var2[1]); break; case 1: var4.lineTo(var2[0], var2[1]); break; case 2: int var6 = var4.getPenX(); int var7 = var4.getPenY(); float var8 = (float)var6 + (var2[0] - (float)var6) * 2.0F / 3.0F; float var9 = (float)var7 + (var2[1] - (float)var7) * 2.0F / 3.0F; float var10 = var2[2] - (var2[2] - var2[0]) * 2.0F / 3.0F; float var11 = var2[3] - (var2[3] - var2[1]) * 2.0F / 3.0F; var4.polyBezierTo(var8, var9, var10, var11, var2[2], var2[3]); break; case 3: var4.polyBezierTo(var2[0], var2[1], var2[2], var2[3], var2[4], var2[5]); break; case 4: var4.closeFigure(); } } var4.endPath(); } }