home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / print / PathGraphics.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  12.9 KB  |  769 lines

  1. package sun.print;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Font;
  5. import java.awt.Graphics2D;
  6. import java.awt.Image;
  7. import java.awt.Paint;
  8. import java.awt.Polygon;
  9. import java.awt.Shape;
  10. import java.awt.font.FontRenderContext;
  11. import java.awt.font.GlyphVector;
  12. import java.awt.font.TextAttribute;
  13. import java.awt.font.TextLayout;
  14. import java.awt.geom.AffineTransform;
  15. import java.awt.geom.Arc2D;
  16. import java.awt.geom.Ellipse2D;
  17. import java.awt.geom.Line2D;
  18. import java.awt.geom.PathIterator;
  19. import java.awt.geom.Point2D;
  20. import java.awt.geom.Rectangle2D;
  21. import java.awt.geom.RoundRectangle2D;
  22. import java.awt.image.BufferedImage;
  23. import java.awt.image.BufferedImageOp;
  24. import java.awt.image.ColorModel;
  25. import java.awt.image.DataBuffer;
  26. import java.awt.image.DataBufferInt;
  27. import java.awt.image.ImageObserver;
  28. import java.awt.image.IndexColorModel;
  29. import java.awt.image.Raster;
  30. import java.awt.image.RenderedImage;
  31. import java.awt.image.SampleModel;
  32. import java.awt.image.SinglePixelPackedSampleModel;
  33. import java.awt.image.VolatileImage;
  34. import java.awt.image.WritableRaster;
  35. import java.awt.print.PageFormat;
  36. import java.awt.print.Printable;
  37. import java.awt.print.PrinterException;
  38. import java.awt.print.PrinterJob;
  39. import java.lang.ref.SoftReference;
  40. import java.text.AttributedCharacterIterator;
  41. import java.util.Hashtable;
  42. import java.util.Map;
  43. import sun.awt.image.RemoteOffScreenImage;
  44. import sun.awt.image.ToolkitImage;
  45. import sun.font.CompositeFont;
  46. import sun.font.Font2D;
  47. import sun.font.Font2DHandle;
  48. import sun.font.FontManager;
  49. import sun.font.PhysicalFont;
  50.  
  51. public abstract class PathGraphics extends ProxyGraphics2D {
  52.    private Printable mPainter;
  53.    private PageFormat mPageFormat;
  54.    private int mPageIndex;
  55.    private boolean mCanRedraw;
  56.    protected boolean printingGlyphVector;
  57.    protected static SoftReference<Hashtable<Font2DHandle, Object>> fontMapRef = new SoftReference((Object)null);
  58.  
  59.    protected PathGraphics(Graphics2D var1, PrinterJob var2, Printable var3, PageFormat var4, int var5, boolean var6) {
  60.       super(var1, var2);
  61.       this.mPainter = var3;
  62.       this.mPageFormat = var4;
  63.       this.mPageIndex = var5;
  64.       this.mCanRedraw = var6;
  65.    }
  66.  
  67.    protected Printable getPrintable() {
  68.       return this.mPainter;
  69.    }
  70.  
  71.    protected PageFormat getPageFormat() {
  72.       return this.mPageFormat;
  73.    }
  74.  
  75.    protected int getPageIndex() {
  76.       return this.mPageIndex;
  77.    }
  78.  
  79.    public boolean canDoRedraws() {
  80.       return this.mCanRedraw;
  81.    }
  82.  
  83.    public abstract void redrawRegion(Rectangle2D var1, double var2, double var4, Shape var6, AffineTransform var7) throws PrinterException;
  84.  
  85.    public void drawLine(int var1, int var2, int var3, int var4) {
  86.       Paint var5 = this.getPaint();
  87.  
  88.       try {
  89.          AffineTransform var6 = this.getTransform();
  90.          if (this.getClip() != null) {
  91.             this.deviceClip(this.getClip().getPathIterator(var6));
  92.          }
  93.  
  94.          this.deviceDrawLine(var1, var2, var3, var4, (Color)var5);
  95.       } catch (ClassCastException var7) {
  96.          throw new IllegalArgumentException("Expected a Color instance");
  97.       }
  98.    }
  99.  
  100.    public void drawRect(int var1, int var2, int var3, int var4) {
  101.       Paint var5 = this.getPaint();
  102.  
  103.       try {
  104.          AffineTransform var6 = this.getTransform();
  105.          if (this.getClip() != null) {
  106.             this.deviceClip(this.getClip().getPathIterator(var6));
  107.          }
  108.  
  109.          this.deviceFrameRect(var1, var2, var3, var4, (Color)var5);
  110.       } catch (ClassCastException var7) {
  111.          throw new IllegalArgumentException("Expected a Color instance");
  112.       }
  113.    }
  114.  
  115.    public void fillRect(int var1, int var2, int var3, int var4) {
  116.       Paint var5 = this.getPaint();
  117.  
  118.       try {
  119.          AffineTransform var6 = this.getTransform();
  120.          if (this.getClip() != null) {
  121.             this.deviceClip(this.getClip().getPathIterator(var6));
  122.          }
  123.  
  124.          this.deviceFillRect(var1, var2, var3, var4, (Color)var5);
  125.       } catch (ClassCastException var7) {
  126.          throw new IllegalArgumentException("Expected a Color instance");
  127.       }
  128.    }
  129.  
  130.    public void clearRect(int var1, int var2, int var3, int var4) {
  131.       this.fill(new Rectangle2D.Float((float)var1, (float)var2, (float)var3, (float)var4), this.getBackground());
  132.    }
  133.  
  134.    public void drawRoundRect(int var1, int var2, int var3, int var4, int var5, int var6) {
  135.       this.draw(new RoundRectangle2D.Float((float)var1, (float)var2, (float)var3, (float)var4, (float)var5, (float)var6));
  136.    }
  137.  
  138.    public void fillRoundRect(int var1, int var2, int var3, int var4, int var5, int var6) {
  139.       this.fill(new RoundRectangle2D.Float((float)var1, (float)var2, (float)var3, (float)var4, (float)var5, (float)var6));
  140.    }
  141.  
  142.    public void drawOval(int var1, int var2, int var3, int var4) {
  143.       this.draw(new Ellipse2D.Float((float)var1, (float)var2, (float)var3, (float)var4));
  144.    }
  145.  
  146.    public void fillOval(int var1, int var2, int var3, int var4) {
  147.       this.fill(new Ellipse2D.Float((float)var1, (float)var2, (float)var3, (float)var4));
  148.    }
  149.  
  150.    public void drawArc(int var1, int var2, int var3, int var4, int var5, int var6) {
  151.       this.draw(new Arc2D.Float((float)var1, (float)var2, (float)var3, (float)var4, (float)var5, (float)var6, 0));
  152.    }
  153.  
  154.    public void fillArc(int var1, int var2, int var3, int var4, int var5, int var6) {
  155.       this.fill(new Arc2D.Float((float)var1, (float)var2, (float)var3, (float)var4, (float)var5, (float)var6, 2));
  156.    }
  157.  
  158.    public void drawPolyline(int[] var1, int[] var2, int var3) {
  159.       if (var3 > 0) {
  160.          float var4 = (float)var1[0];
  161.          float var5 = (float)var2[0];
  162.  
  163.          for(int var8 = 1; var8 < var3; ++var8) {
  164.             float var6 = (float)var1[var8];
  165.             float var7 = (float)var2[var8];
  166.             this.draw(new Line2D.Float(var4, var5, var6, var7));
  167.             var4 = var6;
  168.             var5 = var7;
  169.          }
  170.       }
  171.  
  172.    }
  173.  
  174.    public void drawPolygon(int[] var1, int[] var2, int var3) {
  175.       this.draw(new Polygon(var1, var2, var3));
  176.    }
  177.  
  178.    public void drawPolygon(Polygon var1) {
  179.       this.draw(var1);
  180.    }
  181.  
  182.    public void fillPolygon(int[] var1, int[] var2, int var3) {
  183.       this.fill(new Polygon(var1, var2, var3));
  184.    }
  185.  
  186.    public void fillPolygon(Polygon var1) {
  187.       this.fill(var1);
  188.    }
  189.  
  190.    public void drawString(String var1, int var2, int var3) {
  191.       this.drawString(var1, (float)var2, (float)var3);
  192.    }
  193.  
  194.    public void drawString(String var1, float var2, float var3) {
  195.       if (var1.length() != 0) {
  196.          TextLayout var4 = new TextLayout(var1, this.getFont(), this.getFontRenderContext());
  197.          var4.draw(this, var2, var3);
  198.       }
  199.    }
  200.  
  201.    protected void drawString(String var1, float var2, float var3, Font var4, FontRenderContext var5, float var6) {
  202.       TextLayout var7 = new TextLayout(var1, var4, var5);
  203.       Shape var8 = var7.getOutline(AffineTransform.getTranslateInstance((double)var2, (double)var3));
  204.       this.fill(var8);
  205.    }
  206.  
  207.    public void drawString(AttributedCharacterIterator var1, int var2, int var3) {
  208.       this.drawString(var1, (float)var2, (float)var3);
  209.    }
  210.  
  211.    public void drawString(AttributedCharacterIterator var1, float var2, float var3) {
  212.       if (var1 == null) {
  213.          throw new NullPointerException("attributedcharacteriterator is null");
  214.       } else {
  215.          TextLayout var4 = new TextLayout(var1, this.getFontRenderContext());
  216.          var4.draw(this, var2, var3);
  217.       }
  218.    }
  219.  
  220.    public void drawGlyphVector(GlyphVector var1, float var2, float var3) {
  221.       if (this.printingGlyphVector) {
  222.          assert !this.printingGlyphVector;
  223.  
  224.          this.fill(var1.getOutline(var2, var3));
  225.       } else {
  226.          try {
  227.             this.printingGlyphVector = true;
  228.             if (RasterPrinterJob.shapeTextProp || !this.printedSimpleGlyphVector(var1, var2, var3)) {
  229.                this.fill(var1.getOutline(var2, var3));
  230.             }
  231.          } finally {
  232.             this.printingGlyphVector = false;
  233.          }
  234.  
  235.       }
  236.    }
  237.  
  238.    protected int platformFontCount(Font var1, String var2) {
  239.       return 0;
  240.    }
  241.  
  242.    boolean printedSimpleGlyphVector(GlyphVector var1, float var2, float var3) {
  243.       int var4 = var1.getLayoutFlags();
  244.       if (var4 != 0 && var4 != 2) {
  245.          return false;
  246.       } else {
  247.          Font var5 = var1.getFont();
  248.          Font2D var6 = FontManager.getFont2D(var5);
  249.          if (var6.handle.font2D != var6) {
  250.             return false;
  251.          } else {
  252.             Hashtable var7;
  253.             synchronized(PathGraphics.class) {
  254.                var7 = (Hashtable)fontMapRef.get();
  255.                if (var7 == null) {
  256.                   var7 = new Hashtable();
  257.                   fontMapRef = new SoftReference(var7);
  258.                }
  259.             }
  260.  
  261.             int var33 = var1.getNumGlyphs();
  262.             int[] var9 = var1.getGlyphCodes(0, var33, (int[])null);
  263.             char[] var10 = null;
  264.             char[][] var11 = (char[][])null;
  265.             CompositeFont var12 = null;
  266.             synchronized(var7) {
  267.                if (var6 instanceof CompositeFont) {
  268.                   var12 = (CompositeFont)var6;
  269.                   int var14 = var12.getNumSlots();
  270.                   var11 = (char[][])var7.get(var6.handle);
  271.                   if (var11 == null) {
  272.                      var11 = new char[var14][];
  273.                      var7.put(var6.handle, var11);
  274.                   }
  275.  
  276.                   for(int var15 = 0; var15 < var33; ++var15) {
  277.                      int var16 = var9[var15] >>> 24;
  278.                      if (var16 >= var14) {
  279.                         return false;
  280.                      }
  281.  
  282.                      if (var11[var16] == null) {
  283.                         PhysicalFont var17 = var12.getSlotFont(var16);
  284.                         char[] var18 = (char[])var7.get(var17.handle);
  285.                         if (var18 == null) {
  286.                            var18 = getGlyphToCharMapForFont(var17);
  287.                         }
  288.  
  289.                         var11[var16] = var18;
  290.                      }
  291.                   }
  292.                } else {
  293.                   var10 = (char[])var7.get(var6.handle);
  294.                   if (var10 == null) {
  295.                      var10 = getGlyphToCharMapForFont(var6);
  296.                      var7.put(var6.handle, var10);
  297.                   }
  298.                }
  299.             }
  300.  
  301.             char[] var13 = new char[var33];
  302.             if (var12 != null) {
  303.                for(int var35 = 0; var35 < var33; ++var35) {
  304.                   int var38 = var9[var35];
  305.                   char[] var42 = var11[var38 >>> 24];
  306.                   var38 &= 16777215;
  307.                   if (var42 == null) {
  308.                      return false;
  309.                   }
  310.  
  311.                   char var44;
  312.                   if (var38 == 65535) {
  313.                      var44 = '\n';
  314.                   } else {
  315.                      if (var38 < 0 || var38 >= var42.length) {
  316.                         return false;
  317.                      }
  318.  
  319.                      var44 = var42[var38];
  320.                   }
  321.  
  322.                   if (var44 == '\uffff') {
  323.                      return false;
  324.                   }
  325.  
  326.                   var13[var35] = var44;
  327.                }
  328.             } else {
  329.                for(int var34 = 0; var34 < var33; ++var34) {
  330.                   int var37 = var9[var34];
  331.                   char var41;
  332.                   if (var37 == 65535) {
  333.                      var41 = '\n';
  334.                   } else {
  335.                      if (var37 < 0 || var37 >= var10.length) {
  336.                         return false;
  337.                      }
  338.  
  339.                      var41 = var10[var37];
  340.                   }
  341.  
  342.                   if (var41 == '\uffff') {
  343.                      return false;
  344.                   }
  345.  
  346.                   var13[var34] = var41;
  347.                }
  348.             }
  349.  
  350.             FontRenderContext var36 = var1.getFontRenderContext();
  351.             GlyphVector var40 = var5.createGlyphVector(var36, var13);
  352.             if (var40.getNumGlyphs() != var33) {
  353.                return false;
  354.             } else {
  355.                int[] var43 = var40.getGlyphCodes(0, var33, (int[])null);
  356.  
  357.                for(int var45 = 0; var45 < var33; ++var45) {
  358.                   if (var9[var45] != var43[var45]) {
  359.                      return false;
  360.                   }
  361.                }
  362.  
  363.                FontRenderContext var46 = this.getFontRenderContext();
  364.                boolean var47 = var36.equals(var46);
  365.                if (!var47 && var36.usesFractionalMetrics() == var46.usesFractionalMetrics()) {
  366.                   AffineTransform var19 = var36.getTransform();
  367.                   AffineTransform var20 = this.getTransform();
  368.                   double[] var21 = new double[4];
  369.                   double[] var22 = new double[4];
  370.                   var19.getMatrix(var21);
  371.                   var20.getMatrix(var22);
  372.                   var47 = true;
  373.  
  374.                   for(int var23 = 0; var23 < 4; ++var23) {
  375.                      if (var21[var23] != var22[var23]) {
  376.                         var47 = false;
  377.                         break;
  378.                      }
  379.                   }
  380.                }
  381.  
  382.                String var48 = new String(var13, 0, var33);
  383.                int var49 = this.platformFontCount(var5, var48);
  384.                if (var49 == 0) {
  385.                   return false;
  386.                } else {
  387.                   float[] var50 = var1.getGlyphPositions(0, var33, (float[])null);
  388.                   boolean var51 = (var4 & 2) == 0 || this.samePositions(var40, var43, var9, var50);
  389.                   Point2D var52 = var1.getGlyphPosition(var33);
  390.                   float var24 = (float)var52.getX();
  391.                   boolean var25 = false;
  392.                   if (var5.hasLayoutAttributes() && this.printingGlyphVector && var51) {
  393.                      Map var26 = var5.getAttributes();
  394.                      Object var27 = var26.get(TextAttribute.TRACKING);
  395.                      boolean var28 = var27 != null && var27 instanceof Number && ((Number)var27).floatValue() != 0.0F;
  396.                      if (var28) {
  397.                         var51 = false;
  398.                      } else {
  399.                         Rectangle2D var29 = var5.getStringBounds(var48, var36);
  400.                         float var30 = (float)var29.getWidth();
  401.                         if ((double)Math.abs(var30 - var24) > 1.0E-5) {
  402.                            var25 = true;
  403.                         }
  404.                      }
  405.                   }
  406.  
  407.                   if (var47 && var51 && !var25) {
  408.                      this.drawString(var48, var2, var3, var5, var36, 0.0F);
  409.                      return true;
  410.                   } else if (var49 == 1 && this.canDrawStringToWidth() && var51) {
  411.                      this.drawString(var48, var2, var3, var5, var36, var24);
  412.                      return true;
  413.                   } else {
  414.                      for(int var53 = 0; var53 < var13.length; ++var53) {
  415.                         char var55 = var13[var53];
  416.                         if (var55 >= 1424 && var55 <= 4255 || var55 >= 6016 && var55 <= 6143) {
  417.                            return false;
  418.                         }
  419.                      }
  420.  
  421.                      for(int var54 = 0; var54 < var33; ++var54) {
  422.                         String var56 = new String(var13, var54, 1);
  423.                         this.drawString(var56, var2 + var50[var54 * 2], var3 + var50[var54 * 2 + 1], var5, var36, 0.0F);
  424.                      }
  425.  
  426.                      return true;
  427.                   }
  428.                }
  429.             }
  430.          }
  431.       }
  432.    }
  433.  
  434.    private boolean samePositions(GlyphVector var1, int[] var2, int[] var3, float[] var4) {
  435.       int var5 = var1.getNumGlyphs();
  436.       float[] var6 = var1.getGlyphPositions(0, var5, (float[])null);
  437.       if (var5 == var2.length && var3.length == var2.length && var4.length == var6.length) {
  438.          for(int var7 = 0; var7 < var5; ++var7) {
  439.             if (var2[var7] != var3[var7] || var6[var7] != var4[var7]) {
  440.                return false;
  441.             }
  442.          }
  443.  
  444.          return true;
  445.       } else {
  446.          return false;
  447.       }
  448.    }
  449.  
  450.    protected boolean canDrawStringToWidth() {
  451.       return false;
  452.    }
  453.  
  454.    private static char[] getGlyphToCharMapForFont(Font2D var0) {
  455.       int var1 = var0.getNumGlyphs();
  456.       int var2 = var0.getMissingGlyphCode();
  457.       char[] var3 = new char[var1];
  458.  
  459.       for(int var5 = 0; var5 < var1; ++var5) {
  460.          var3[var5] = '\uffff';
  461.       }
  462.  
  463.       for(char var6 = 0; var6 < '\uffff'; ++var6) {
  464.          if (var6 < '\ud800' || var6 > '\udfff') {
  465.             int var4 = var0.charToGlyph(var6);
  466.             if (var4 != var2 && var4 < var1 && var3[var4] == '\uffff') {
  467.                var3[var4] = var6;
  468.             }
  469.          }
  470.       }
  471.  
  472.       return var3;
  473.    }
  474.  
  475.    public void draw(Shape var1) {
  476.       this.fill(this.getStroke().createStrokedShape(var1));
  477.    }
  478.  
  479.    public void fill(Shape var1) {
  480.       Paint var2 = this.getPaint();
  481.  
  482.       try {
  483.          this.fill(var1, (Color)var2);
  484.       } catch (ClassCastException var4) {
  485.          throw new IllegalArgumentException("Expected a Color instance");
  486.       }
  487.    }
  488.  
  489.    public void fill(Shape var1, Color var2) {
  490.       AffineTransform var3 = this.getTransform();
  491.       if (this.getClip() != null) {
  492.          this.deviceClip(this.getClip().getPathIterator(var3));
  493.       }
  494.  
  495.       this.deviceFill(var1.getPathIterator(var3), var2);
  496.    }
  497.  
  498.    protected abstract void deviceFill(PathIterator var1, Color var2);
  499.  
  500.    protected abstract void deviceClip(PathIterator var1);
  501.  
  502.    protected abstract void deviceFrameRect(int var1, int var2, int var3, int var4, Color var5);
  503.  
  504.    protected abstract void deviceDrawLine(int var1, int var2, int var3, int var4, Color var5);
  505.  
  506.    protected abstract void deviceFillRect(int var1, int var2, int var3, int var4, Color var5);
  507.  
  508.    protected BufferedImage getBufferedImage(Image var1) {
  509.       if (var1 instanceof RemoteOffScreenImage) {
  510.          return ((RemoteOffScreenImage)var1).getSnapshot();
  511.       } else if (var1 instanceof BufferedImage) {
  512.          return (BufferedImage)var1;
  513.       } else if (var1 instanceof ToolkitImage) {
  514.          return ((ToolkitImage)var1).getBufferedImage();
  515.       } else {
  516.          return var1 instanceof VolatileImage ? ((VolatileImage)var1).getSnapshot() : null;
  517.       }
  518.    }
  519.  
  520.    protected boolean hasTransparentPixels(BufferedImage var1) {
  521.       ColorModel var2 = var1.getColorModel();
  522.       boolean var3 = var2 == null ? true : var2.getTransparency() != 1;
  523.       if (var3 && var1 != null && (var1.getType() == 2 || var1.getType() == 3)) {
  524.          DataBuffer var4 = var1.getRaster().getDataBuffer();
  525.          SampleModel var5 = var1.getRaster().getSampleModel();
  526.          if (var4 instanceof DataBufferInt && var5 instanceof SinglePixelPackedSampleModel) {
  527.             SinglePixelPackedSampleModel var6 = (SinglePixelPackedSampleModel)var5;
  528.             int[] var7 = ((DataBufferInt)var4).getData();
  529.             int var8 = var1.getMinX();
  530.             int var9 = var1.getMinY();
  531.             int var10 = var1.getWidth();
  532.             int var11 = var1.getHeight();
  533.             int var12 = var6.getScanlineStride();
  534.             boolean var13 = false;
  535.  
  536.             for(int var14 = var9; var14 < var9 + var11; ++var14) {
  537.                int var15 = var9 * var12;
  538.  
  539.                for(int var16 = var8; var16 < var8 + var10; ++var16) {
  540.                   if ((var7[var15 + var16] & -16777216) != -16777216) {
  541.                      var13 = true;
  542.                      break;
  543.                   }
  544.                }
  545.  
  546.                if (var13) {
  547.                   break;
  548.                }
  549.             }
  550.  
  551.             if (!var13) {
  552.                var3 = false;
  553.             }
  554.          }
  555.       }
  556.  
  557.       return var3;
  558.    }
  559.  
  560.    protected boolean isBitmaskTransparency(BufferedImage var1) {
  561.       ColorModel var2 = var1.getColorModel();
  562.       return var2 != null && var2.getTransparency() == 2;
  563.    }
  564.  
  565.    protected boolean drawBitmaskImage(BufferedImage var1, AffineTransform var2, Color var3, int var4, int var5, int var6, int var7) {
  566.       ColorModel var8 = var1.getColorModel();
  567.       if (!(var8 instanceof IndexColorModel)) {
  568.          return false;
  569.       } else {
  570.          IndexColorModel var9 = (IndexColorModel)var8;
  571.          if (var8.getTransparency() != 2) {
  572.             return false;
  573.          } else if (var3 != null && var3.getAlpha() < 128) {
  574.             return false;
  575.          } else if ((var2.getType() & -12) != 0) {
  576.             return false;
  577.          } else if ((this.getTransform().getType() & -12) != 0) {
  578.             return false;
  579.          } else {
  580.             Object var11 = null;
  581.             WritableRaster var12 = var1.getRaster();
  582.             int var13 = var9.getTransparentPixel();
  583.             byte[] var14 = new byte[var9.getMapSize()];
  584.             var9.getAlphas(var14);
  585.             if (var13 >= 0) {
  586.                var14[var13] = 0;
  587.             }
  588.  
  589.             int var15 = ((Raster)var12).getWidth();
  590.             int var16 = ((Raster)var12).getHeight();
  591.             if (var4 <= var15 && var5 <= var16) {
  592.                int var17;
  593.                int var19;
  594.                if (var4 + var6 > var15) {
  595.                   var17 = var15;
  596.                   var19 = var15 - var4;
  597.                } else {
  598.                   var17 = var4 + var6;
  599.                   var19 = var6;
  600.                }
  601.  
  602.                int var18;
  603.                if (var5 + var7 > var16) {
  604.                   var18 = var16;
  605.                   int var10000 = var16 - var5;
  606.                } else {
  607.                   var18 = var5 + var7;
  608.                }
  609.  
  610.                int[] var10 = new int[var19];
  611.  
  612.                for(int var21 = var5; var21 < var18; ++var21) {
  613.                   int var22 = -1;
  614.                   ((Raster)var12).getPixels(var4, var21, var19, 1, var10);
  615.  
  616.                   for(int var23 = var4; var23 < var17; ++var23) {
  617.                      if (var14[var10[var23 - var4]] == 0) {
  618.                         if (var22 >= 0) {
  619.                            BufferedImage var24 = var1.getSubimage(var22, var21, var23 - var22, 1);
  620.                            var2.translate((double)var22, (double)var21);
  621.                            this.drawImageToPlatform(var24, var2, var3, 0, 0, var23 - var22, 1, true);
  622.                            var2.translate((double)(-var22), (double)(-var21));
  623.                            var22 = -1;
  624.                         }
  625.                      } else if (var22 < 0) {
  626.                         var22 = var23;
  627.                      }
  628.                   }
  629.  
  630.                   if (var22 >= 0) {
  631.                      BufferedImage var25 = var1.getSubimage(var22, var21, var17 - var22, 1);
  632.                      var2.translate((double)var22, (double)var21);
  633.                      this.drawImageToPlatform(var25, var2, var3, 0, 0, var17 - var22, 1, true);
  634.                      var2.translate((double)(-var22), (double)(-var21));
  635.                   }
  636.                }
  637.  
  638.                return true;
  639.             } else {
  640.                return false;
  641.             }
  642.          }
  643.       }
  644.    }
  645.  
  646.    protected abstract boolean drawImageToPlatform(Image var1, AffineTransform var2, Color var3, int var4, int var5, int var6, int var7, boolean var8);
  647.  
  648.    public boolean drawImage(Image var1, int var2, int var3, ImageObserver var4) {
  649.       return this.drawImage(var1, var2, var3, (Color)null, var4);
  650.    }
  651.  
  652.    public boolean drawImage(Image var1, int var2, int var3, int var4, int var5, ImageObserver var6) {
  653.       return this.drawImage(var1, var2, var3, var4, var5, (Color)null, var6);
  654.    }
  655.  
  656.    public boolean drawImage(Image var1, int var2, int var3, Color var4, ImageObserver var5) {
  657.       if (var1 == null) {
  658.          return true;
  659.       } else {
  660.          int var7 = var1.getWidth((ImageObserver)null);
  661.          int var8 = var1.getHeight((ImageObserver)null);
  662.          boolean var6;
  663.          if (var7 >= 0 && var8 >= 0) {
  664.             var6 = this.drawImage(var1, var2, var3, var7, var8, var4, var5);
  665.          } else {
  666.             var6 = false;
  667.          }
  668.  
  669.          return var6;
  670.       }
  671.    }
  672.  
  673.    public boolean drawImage(Image var1, int var2, int var3, int var4, int var5, Color var6, ImageObserver var7) {
  674.       if (var1 == null) {
  675.          return true;
  676.       } else {
  677.          int var9 = var1.getWidth((ImageObserver)null);
  678.          int var10 = var1.getHeight((ImageObserver)null);
  679.          boolean var8;
  680.          if (var9 >= 0 && var10 >= 0) {
  681.             var8 = this.drawImage(var1, var2, var3, var2 + var4, var3 + var5, 0, 0, var9, var10, var7);
  682.          } else {
  683.             var8 = false;
  684.          }
  685.  
  686.          return var8;
  687.       }
  688.    }
  689.  
  690.    public boolean drawImage(Image var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, ImageObserver var10) {
  691.       return this.drawImage(var1, var2, var3, var4, var5, var6, var7, var8, var9, (Color)null, var10);
  692.    }
  693.  
  694.    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) {
  695.       if (var1 == null) {
  696.          return true;
  697.       } else {
  698.          int var12 = var8 - var6;
  699.          int var13 = var9 - var7;
  700.          float var14 = (float)(var4 - var2) / (float)var12;
  701.          float var15 = (float)(var5 - var3) / (float)var13;
  702.          AffineTransform var16 = new AffineTransform(var14, 0.0F, 0.0F, var15, (float)var2 - (float)var6 * var14, (float)var3 - (float)var7 * var15);
  703.          if (var8 < var6) {
  704.             var6 = var8;
  705.             var12 = -var12;
  706.          }
  707.  
  708.          if (var9 < var7) {
  709.             var7 = var9;
  710.             var13 = -var13;
  711.          }
  712.  
  713.          return this.drawImageToPlatform(var1, var16, var10, var6, var7, var12, var13, false);
  714.       }
  715.    }
  716.  
  717.    public boolean drawImage(Image var1, AffineTransform var2, ImageObserver var3) {
  718.       if (var1 == null) {
  719.          return true;
  720.       } else {
  721.          int var5 = var1.getWidth((ImageObserver)null);
  722.          int var6 = var1.getHeight((ImageObserver)null);
  723.          boolean var4;
  724.          if (var5 >= 0 && var6 >= 0) {
  725.             var4 = this.drawImageToPlatform(var1, var2, (Color)null, 0, 0, var5, var6, false);
  726.          } else {
  727.             var4 = false;
  728.          }
  729.  
  730.          return var4;
  731.       }
  732.    }
  733.  
  734.    public void drawImage(BufferedImage var1, BufferedImageOp var2, int var3, int var4) {
  735.       if (var1 != null) {
  736.          int var5 = var1.getWidth((ImageObserver)null);
  737.          int var6 = var1.getHeight((ImageObserver)null);
  738.          if (var2 != null) {
  739.             var1 = var2.filter(var1, (BufferedImage)null);
  740.          }
  741.  
  742.          if (var5 > 0 && var6 > 0) {
  743.             AffineTransform var7 = new AffineTransform(1.0F, 0.0F, 0.0F, 1.0F, (float)var3, (float)var4);
  744.             this.drawImageToPlatform(var1, var7, (Color)null, 0, 0, var5, var6, false);
  745.          }
  746.       }
  747.    }
  748.  
  749.    public void drawRenderedImage(RenderedImage var1, AffineTransform var2) {
  750.       if (var1 != null) {
  751.          Object var3 = null;
  752.          int var4 = var1.getWidth();
  753.          int var5 = var1.getHeight();
  754.          if (var4 > 0 && var5 > 0) {
  755.             BufferedImage var7;
  756.             if (var1 instanceof BufferedImage) {
  757.                var7 = (BufferedImage)var1;
  758.             } else {
  759.                var7 = new BufferedImage(var4, var5, 2);
  760.                Graphics2D var6 = var7.createGraphics();
  761.                var6.drawRenderedImage(var1, var2);
  762.             }
  763.  
  764.             this.drawImageToPlatform(var7, var2, (Color)null, 0, 0, var4, var5, false);
  765.          }
  766.       }
  767.    }
  768. }
  769.