home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / java2d / RasterPrinterJob.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  8.8 KB  |  412 lines

  1. package sun.java2d;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.Rectangle;
  7. import java.awt.Shape;
  8. import java.awt.geom.AffineTransform;
  9. import java.awt.geom.Rectangle2D;
  10. import java.awt.geom.RectangularShape;
  11. import java.awt.image.BufferedImage;
  12. import java.awt.print.Book;
  13. import java.awt.print.PageFormat;
  14. import java.awt.print.Pageable;
  15. import java.awt.print.Paper;
  16. import java.awt.print.Printable;
  17. import java.awt.print.PrinterAbortException;
  18. import java.awt.print.PrinterException;
  19. import java.awt.print.PrinterJob;
  20. import java.io.FilePermission;
  21. import java.util.ArrayList;
  22. import sun.awt.image.ByteInterleavedRaster;
  23.  
  24. public abstract class RasterPrinterJob extends PrinterJob {
  25.    private static final int MAX_BAND_SIZE = 524288;
  26.    private int mNumCopies = 1;
  27.    private boolean mCollate = false;
  28.    private int mFirstPage = -1;
  29.    private int mLastPage = -1;
  30.    private Pageable mDocument = new Book();
  31.    private String mDocName = new String("Java Printing");
  32.    private boolean performingPrinting = false;
  33.    private boolean userCancelled = false;
  34.    private FilePermission printToFilePermission;
  35.    private ArrayList redrawList = new ArrayList();
  36.  
  37.    protected abstract double getXRes();
  38.  
  39.    protected abstract double getYRes();
  40.  
  41.    protected abstract double getPhysicalPrintableX(Paper var1);
  42.  
  43.    protected abstract double getPhysicalPrintableY(Paper var1);
  44.  
  45.    protected abstract double getPhysicalPrintableWidth(Paper var1);
  46.  
  47.    protected abstract double getPhysicalPrintableHeight(Paper var1);
  48.  
  49.    protected abstract double getPhysicalPageWidth(Paper var1);
  50.  
  51.    protected abstract double getPhysicalPageHeight(Paper var1);
  52.  
  53.    protected abstract void startPage(PageFormat var1, Printable var2, int var3) throws PrinterException;
  54.  
  55.    protected abstract void endPage(PageFormat var1, Printable var2, int var3) throws PrinterException;
  56.  
  57.    protected abstract void printBand(byte[] var1, int var2, int var3, int var4, int var5) throws PrinterException;
  58.  
  59.    public void saveState(AffineTransform var1, Shape var2, Rectangle2D var3, double var4, double var6, Rectangle2D var8, AffineTransform var9) {
  60.       GraphicsState var10 = new GraphicsState(this, (1)null);
  61.       var10.theTransform = var1;
  62.       var10.theClip = var2;
  63.       var10.region = var3;
  64.       var10.sx = var4;
  65.       var10.sy = var6;
  66.       var10.imageTransform = var9;
  67.       var10.imageSrcRect = var8;
  68.       this.redrawList.add(var10);
  69.    }
  70.  
  71.    public void setPrintable(Printable var1) {
  72.       this.setPageable(new OpenBook(this.defaultPage(new PageFormat()), var1));
  73.    }
  74.  
  75.    public void setPrintable(Printable var1, PageFormat var2) {
  76.       this.setPageable(new OpenBook(var2, var1));
  77.    }
  78.  
  79.    public void setPageable(Pageable var1) throws NullPointerException {
  80.       if (var1 != null) {
  81.          this.mDocument = var1;
  82.       } else {
  83.          throw new NullPointerException();
  84.       }
  85.    }
  86.  
  87.    protected void initPrinter() {
  88.    }
  89.  
  90.    public void print() throws PrinterException {
  91.       this.initPrinter();
  92.       int var1 = this.getCollatedCopies();
  93.       int var2 = this.getNoncollatedCopies();
  94.       int var3 = this.mDocument.getNumberOfPages();
  95.       int var4 = this.getFirstPage();
  96.       int var5 = this.getLastPage();
  97.       if (var5 == -1) {
  98.          int var6 = this.mDocument.getNumberOfPages();
  99.          if (var6 != -1) {
  100.             var5 = this.mDocument.getNumberOfPages() - 1;
  101.          }
  102.       }
  103.  
  104.       try {
  105.          synchronized(this) {
  106.             this.performingPrinting = true;
  107.             this.userCancelled = false;
  108.          }
  109.  
  110.          this.startDoc();
  111.          if (this.isCancelled()) {
  112.             this.cancelDoc();
  113.          }
  114.  
  115.          for(int var7 = 0; var7 < var1; ++var7) {
  116.             int var8 = var4;
  117.  
  118.             for(int var9 = 0; (var8 <= var5 || var5 == -1) && var9 == 0; ++var8) {
  119.                for(int var10 = 0; var10 < var2 && var9 == 0; ++var10) {
  120.                   if (this.isCancelled()) {
  121.                      this.cancelDoc();
  122.                   }
  123.  
  124.                   var9 = this.printPage(this.mDocument, var8);
  125.                }
  126.             }
  127.          }
  128.  
  129.          if (this.isCancelled()) {
  130.             this.cancelDoc();
  131.          }
  132.       } finally {
  133.          synchronized(this) {
  134.             if (this.performingPrinting) {
  135.                this.endDoc();
  136.             }
  137.  
  138.             this.performingPrinting = false;
  139.             this.notify();
  140.          }
  141.       }
  142.  
  143.    }
  144.  
  145.    protected void validatePaper(Paper var1, Paper var2) {
  146.       if (var1 != null && var2 != null) {
  147.          double var3 = var1.getWidth();
  148.          double var5 = var1.getHeight();
  149.          double var7 = var1.getImageableX();
  150.          double var9 = var1.getImageableY();
  151.          double var11 = var1.getImageableWidth();
  152.          double var13 = var1.getImageableHeight();
  153.          Paper var15 = new Paper();
  154.          var3 = var3 > (double)0.0F ? var3 : var15.getWidth();
  155.          var5 = var5 > (double)0.0F ? var5 : var15.getHeight();
  156.          var7 = var7 > (double)0.0F ? var7 : var15.getImageableX();
  157.          var9 = var9 > (double)0.0F ? var9 : var15.getImageableY();
  158.          var11 = var11 > (double)0.0F ? var11 : var15.getImageableWidth();
  159.          var13 = var13 > (double)0.0F ? var13 : var15.getImageableHeight();
  160.          if (var11 > var3) {
  161.             var11 = var3;
  162.          }
  163.  
  164.          if (var13 > var5) {
  165.             var13 = var5;
  166.          }
  167.  
  168.          if (var7 + var11 > var3) {
  169.             var7 = var3 - var11;
  170.          }
  171.  
  172.          if (var9 + var13 > var5) {
  173.             var9 = var5 - var13;
  174.          }
  175.  
  176.          var2.setSize(var3, var5);
  177.          var2.setImageableArea(var7, var9, var11, var13);
  178.       }
  179.    }
  180.  
  181.    public PageFormat defaultPage(PageFormat var1) {
  182.       PageFormat var2 = (PageFormat)var1.clone();
  183.       var2.setOrientation(1);
  184.       Paper var3 = new Paper();
  185.       var2.setPaper(var3);
  186.       return var2;
  187.    }
  188.  
  189.    public PageFormat validatePage(PageFormat var1) {
  190.       PageFormat var2 = (PageFormat)var1.clone();
  191.       Paper var3 = new Paper();
  192.       this.validatePaper(var2.getPaper(), var3);
  193.       var2.setPaper(var3);
  194.       return var2;
  195.    }
  196.  
  197.    public void setCopies(int var1) {
  198.       this.mNumCopies = var1;
  199.    }
  200.  
  201.    public int getCopies() {
  202.       return this.mNumCopies;
  203.    }
  204.  
  205.    public String getUserName() {
  206.       return System.getProperty("user.name");
  207.    }
  208.  
  209.    public void setJobName(String var1) {
  210.       if (var1 != null) {
  211.          this.mDocName = var1;
  212.       } else {
  213.          throw new NullPointerException();
  214.       }
  215.    }
  216.  
  217.    public String getJobName() {
  218.       return this.mDocName;
  219.    }
  220.  
  221.    protected void setPageRange(int var1, int var2) {
  222.       if (var1 >= 0 && var2 >= 0) {
  223.          this.mFirstPage = var1;
  224.          this.mLastPage = var2;
  225.          if (this.mLastPage < this.mFirstPage) {
  226.             this.mLastPage = this.mFirstPage;
  227.          }
  228.       } else {
  229.          this.mFirstPage = -1;
  230.          this.mLastPage = -1;
  231.       }
  232.  
  233.    }
  234.  
  235.    protected int getFirstPage() {
  236.       return this.mFirstPage == -1 ? 0 : this.mFirstPage;
  237.    }
  238.  
  239.    protected int getLastPage() {
  240.       return this.mLastPage;
  241.    }
  242.  
  243.    protected void setCollated(boolean var1) {
  244.       this.mCollate = var1;
  245.    }
  246.  
  247.    protected boolean isCollated() {
  248.       return this.mCollate;
  249.    }
  250.  
  251.    protected abstract void startDoc() throws PrinterException;
  252.  
  253.    protected abstract void endDoc() throws PrinterException;
  254.  
  255.    protected abstract void abortDoc();
  256.  
  257.    private void cancelDoc() throws PrinterAbortException {
  258.       this.abortDoc();
  259.       synchronized(this) {
  260.          this.userCancelled = false;
  261.          this.performingPrinting = false;
  262.          this.notify();
  263.       }
  264.  
  265.       throw new PrinterAbortException();
  266.    }
  267.  
  268.    protected int getCollatedCopies() {
  269.       return this.isCollated() ? this.getCopies() : 1;
  270.    }
  271.  
  272.    protected int getNoncollatedCopies() {
  273.       return this.isCollated() ? 1 : this.getCopies();
  274.    }
  275.  
  276.    protected int printPage(Pageable var1, int var2) throws PrinterException {
  277.       PageFormat var3 = var1.getPageFormat(var2);
  278.       Printable var4 = var1.getPrintable(var2);
  279.       Paper var5 = var3.getPaper();
  280.       double var6 = this.getXRes() / (double)72.0F;
  281.       double var8 = this.getYRes() / (double)72.0F;
  282.       Rectangle2D.Double var10 = new Rectangle2D.Double(var5.getImageableX() * var6, var5.getImageableY() * var8, var5.getImageableWidth() * var6, var5.getImageableHeight() * var8);
  283.       AffineTransform var11 = new AffineTransform();
  284.       AffineTransform var12 = new AffineTransform();
  285.       var12.scale(var6, var8);
  286.       int var13 = (int)((RectangularShape)var10).getWidth();
  287.       var13 += var13 % 4;
  288.       int var14 = (int)((RectangularShape)var10).getHeight();
  289.       int var15 = 524288 / var14 / 3;
  290.       int var16 = (int)(var5.getImageableX() * var6);
  291.       int var17 = (int)(var5.getImageableY() * var8);
  292.       AffineTransform var18 = new AffineTransform();
  293.       var18.translate((double)(-var16), (double)var17);
  294.       var18.translate((double)0.0F, (double)var15);
  295.       var18.scale((double)1.0F, (double)-1.0F);
  296.       BufferedImage var19 = new BufferedImage(var13, var15, 5);
  297.       PeekGraphics var20 = this.createPeekGraphics(var19.createGraphics(), this);
  298.       Rectangle2D.Double var21 = new Rectangle2D.Double(var3.getImageableX(), var3.getImageableY(), var3.getImageableWidth(), var3.getImageableHeight());
  299.       this.initPrinterGraphics(var20, var21);
  300.       int var22 = var4.print(var20, var3, var2);
  301.       if (var22 == 0) {
  302.          this.startPage(var3, var4, var2);
  303.          Graphics2D var23 = this.createPathGraphics(var20, this, var4, var3, var2);
  304.          if (var23 != null) {
  305.             var23.transform(var12);
  306.             var23.translate(-this.getPhysicalPrintableX(var5) / var6, -this.getPhysicalPrintableY(var5) / var8);
  307.             var23.transform(new AffineTransform(var3.getMatrix()));
  308.             this.initPrinterGraphics(var23, var21);
  309.             this.redrawList.clear();
  310.             var4.print(var23, var3, var2);
  311.  
  312.             for(int var34 = 0; var34 < this.redrawList.size(); ++var34) {
  313.                GraphicsState var35 = (GraphicsState)this.redrawList.get(var34);
  314.                var23.setTransform(var35.theTransform);
  315.                ((Graphics)var23).setClip(var35.theClip);
  316.                ((PathGraphics)var23).redrawRegion(var35.region, var35.sx, var35.sy, var35.imageSrcRect, var35.imageTransform);
  317.             }
  318.          } else {
  319.             Graphics2D var24 = var19.createGraphics();
  320.             Rectangle2D.Double var25 = new Rectangle2D.Double((double)0.0F, (double)0.0F, (double)var13, (double)var15);
  321.             this.initPrinterGraphics(var24, var25);
  322.             ProxyGraphics2D var26 = new ProxyGraphics2D(var24, this);
  323.             Graphics2D var27 = var19.createGraphics();
  324.             ((Graphics)var27).setColor(Color.white);
  325.             ByteInterleavedRaster var28 = (ByteInterleavedRaster)var19.getRaster();
  326.             byte[] var29 = var28.getDataStorage();
  327.             int var10000 = var17 + var14;
  328.  
  329.             for(int var31 = 0; var31 <= var14; var31 += var15) {
  330.                ((Graphics)var27).fillRect(0, 0, var13, var15);
  331.                var24.setTransform(var11);
  332.                var24.transform(var18);
  333.                var18.translate((double)0.0F, (double)(-var15));
  334.                var24.transform(var12);
  335.                var24.transform(new AffineTransform(var3.getMatrix()));
  336.                Rectangle var32 = ((Graphics)var24).getClipBounds();
  337.                if (var20.hitsDrawingArea(var32)) {
  338.                   var26.setDelegate((Graphics2D)((Graphics)var24).create());
  339.                   var4.print(var26, var3, var2);
  340.                   var26.dispose();
  341.                   this.printBand(var29, var16, var17 + var31, var13, var15);
  342.                }
  343.             }
  344.  
  345.             ((Graphics)var27).dispose();
  346.             ((Graphics)var24).dispose();
  347.          }
  348.  
  349.          this.endPage(var3, var4, var2);
  350.       }
  351.  
  352.       return var22;
  353.    }
  354.  
  355.    public void cancel() {
  356.       synchronized(this) {
  357.          if (this.performingPrinting) {
  358.             this.userCancelled = true;
  359.          }
  360.  
  361.          this.notify();
  362.       }
  363.    }
  364.  
  365.    public boolean isCancelled() {
  366.       boolean var1 = false;
  367.       synchronized(this) {
  368.          var1 = this.performingPrinting && this.userCancelled;
  369.          this.notify();
  370.          return var1;
  371.       }
  372.    }
  373.  
  374.    protected Pageable getPageable() {
  375.       return this.mDocument;
  376.    }
  377.  
  378.    protected Graphics2D createPathGraphics(PeekGraphics var1, PrinterJob var2, Printable var3, PageFormat var4, int var5) {
  379.       return null;
  380.    }
  381.  
  382.    protected PeekGraphics createPeekGraphics(Graphics2D var1, PrinterJob var2) {
  383.       return new PeekGraphics(var1, var2);
  384.    }
  385.  
  386.    void initPrinterGraphics(Graphics2D var1, Rectangle2D var2) {
  387.       ((Graphics)var1).setClip(var2);
  388.       var1.setPaint(Color.black);
  389.    }
  390.  
  391.    public boolean checkAllowedToPrintToFile() {
  392.       try {
  393.          this.throwPrintToFile();
  394.          return true;
  395.       } catch (SecurityException var2) {
  396.          return false;
  397.       }
  398.    }
  399.  
  400.    private void throwPrintToFile() {
  401.       SecurityManager var1 = System.getSecurityManager();
  402.       if (var1 != null) {
  403.          if (this.printToFilePermission == null) {
  404.             this.printToFilePermission = new FilePermission("<<ALL FILES>>", "read,write");
  405.          }
  406.  
  407.          var1.checkPermission(this.printToFilePermission);
  408.       }
  409.  
  410.    }
  411. }
  412.