home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / CFJava.cab / CFJavaRuntime.cab / netscape / application / Bitmap.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-10-01  |  13.6 KB  |  545 lines

  1. package netscape.application;
  2.  
  3. import java.awt.MediaTracker;
  4. import java.awt.image.ImageObserver;
  5. import java.awt.image.MemoryImageSource;
  6. import java.awt.image.PixelGrabber;
  7. import java.net.URL;
  8. import netscape.util.ClassInfo;
  9. import netscape.util.Codable;
  10. import netscape.util.CodingException;
  11. import netscape.util.Decoder;
  12. import netscape.util.Encoder;
  13.  
  14. public class Bitmap extends Image {
  15.    java.awt.Image awtImage;
  16.    BitmapObserver bitmapObserver;
  17.    Target updateTarget;
  18.    Rect updateRect;
  19.    String name;
  20.    String updateCommand;
  21.    int imageNumber;
  22.    boolean loaded;
  23.    boolean valid;
  24.    boolean transparent;
  25.    boolean loadIncrementally;
  26.    boolean added;
  27.    MediaTracker mediaTracker;
  28.    static final int WIDTH = 0;
  29.    static final int HEIGHT = 1;
  30.    private static Class bitmapClass;
  31.    static final String NAME_KEY = "name";
  32.    static final String UPDATE_TARGET_KEY = "updateTarget";
  33.    static final String UPDATE_COMMAND_KEY = "updateCommand";
  34.    static final String TRANSPARENT_KEY = "transparent";
  35.    static final String LOAD_INCREMENTALLY_KEY = "loadIncrementally";
  36.  
  37.    public static synchronized Bitmap bitmapNamed(String var0, boolean var1, boolean var2) {
  38.       if (var0 != null && !var0.equals("")) {
  39.          Application var3 = application();
  40.          Bitmap var4 = (Bitmap)var3.bitmapByName.get(var0);
  41.          if (var4 != null) {
  42.             return var4;
  43.          } else {
  44.             var4 = systemBitmapNamed(var0);
  45.             if (var4 != null) {
  46.                if (var2) {
  47.                   var3.bitmapByName.put(var0, var4);
  48.                   var4.mediaTracker = Application.application().mediaTracker();
  49.                }
  50.  
  51.                var4.name = var0;
  52.                return var4;
  53.             } else {
  54.                URL var5 = var3._appResources.urlForBitmapNamed(var0);
  55.                var4 = bitmapFromURL(var5);
  56.                if (var4 == null) {
  57.                   return null;
  58.                } else {
  59.                   if (var2) {
  60.                      var3.bitmapByName.put(var0, var4);
  61.                      var4.mediaTracker = Application.application().mediaTracker();
  62.                   }
  63.  
  64.                   var4.name = var0;
  65.                   if (var1) {
  66.                      var4.startLoadingData();
  67.                   }
  68.  
  69.                   return var4;
  70.                }
  71.             }
  72.          }
  73.       } else {
  74.          return null;
  75.       }
  76.    }
  77.  
  78.    public static Bitmap bitmapNamed(String var0, boolean var1) {
  79.       return bitmapNamed(var0, var1, true);
  80.    }
  81.  
  82.    public static Bitmap bitmapNamed(String var0) {
  83.       return bitmapNamed(var0, true, true);
  84.    }
  85.  
  86.    public static Bitmap bitmapFromURL(URL var0) {
  87.       java.awt.Image var1 = AWTCompatibility.awtApplet().getImage(var0);
  88.       if (var1 == null) {
  89.          return null;
  90.       } else {
  91.          Bitmap var2 = new Bitmap(var1);
  92.          return var2;
  93.       }
  94.    }
  95.  
  96.    public Graphics createGraphics() {
  97.       return Graphics.newGraphics(this);
  98.    }
  99.  
  100.    public Bitmap() {
  101.       this.loaded = false;
  102.       this.valid = true;
  103.       this.transparent = true;
  104.       this.imageNumber = application().nextBitmapNumber();
  105.    }
  106.  
  107.    public Bitmap(int var1, int var2) {
  108.       this();
  109.       if (var1 > 0 && var2 > 0) {
  110.          this.awtImage = AWTCompatibility.awtApplet().createImage(var1, var2);
  111.          this.setLoaded(true);
  112.       } else {
  113.          throw new IllegalArgumentException("Invalid bitmap size: " + var1 + "x" + var2);
  114.       }
  115.    }
  116.  
  117.    Bitmap(java.awt.Image var1) {
  118.       this();
  119.       this.awtImage = var1;
  120.    }
  121.  
  122.    public Bitmap(int[] var1, int var2, int var3) {
  123.       this(var1, var2, var3, 0, var2);
  124.    }
  125.  
  126.    public Bitmap(int[] var1, int var2, int var3, int var4, int var5) {
  127.       this();
  128.       MemoryImageSource var6 = new MemoryImageSource(var2, var3, var1, var4, var5);
  129.       this.awtImage = AWTCompatibility.awtApplet().createImage(var6);
  130.       this.setLoaded(true);
  131.    }
  132.  
  133.    public boolean grabPixels(int[] var1) {
  134.       return this.grabPixels(var1, 0, 0, this.width(), this.height(), 0, this.width());
  135.    }
  136.  
  137.    public boolean grabPixels(int[] var1, int var2, int var3, int var4, int var5, int var6, int var7) {
  138.       java.awt.Image var9 = AWTCompatibility.awtImageForBitmap(this);
  139.       PixelGrabber var8 = new PixelGrabber(var9, var2, var3, var4, var5, var1, var6, var7);
  140.  
  141.       boolean var10;
  142.       try {
  143.          var10 = var8.grabPixels();
  144.       } catch (InterruptedException var11) {
  145.          var10 = false;
  146.       }
  147.  
  148.       return var10;
  149.    }
  150.  
  151.    public String name() {
  152.       return this.name;
  153.    }
  154.  
  155.    BitmapObserver bitmapObserver() {
  156.       if (this.bitmapObserver == null) {
  157.          this.bitmapObserver = new BitmapObserver(application(), this);
  158.       }
  159.  
  160.       return this.bitmapObserver;
  161.    }
  162.  
  163.    int getWidthOrHeight(int var1) {
  164.       int var3 = -1;
  165.       boolean var4 = false;
  166.       if (var1 != 0 && var1 != 1) {
  167.          throw new IllegalArgumentException("Invalid dimension request: " + var1);
  168.       } else if (this.hasLoadedData()) {
  169.          return var1 == 0 ? this.awtImage.getWidth((ImageObserver)null) : this.awtImage.getHeight((ImageObserver)null);
  170.       } else {
  171.          BitmapObserver var2 = this.bitmapObserver();
  172.          synchronized(var2){}
  173.  
  174.          try {
  175.             while(!var4) {
  176.                if (var1 == 0) {
  177.                   this.awtImage.getWidth(var2);
  178.                   var3 = this.awtImage.getWidth(var2);
  179.                } else {
  180.                   this.awtImage.getHeight(var2);
  181.                   var3 = this.awtImage.getHeight(var2);
  182.                }
  183.  
  184.                if (var3 != -1 || !this.isValid()) {
  185.                   break;
  186.                }
  187.  
  188.                if ((var2.lastInfo & 64) == 0 && (var2.lastInfo & 128) == 0) {
  189.                   try {
  190.                      var2.wait();
  191.                   } catch (InterruptedException var8) {
  192.                   }
  193.  
  194.                   if ((var2.lastInfo & 64) != 0 || (var2.lastInfo & 128) != 0) {
  195.                      this.valid = false;
  196.                      this.reportWhyInvalid();
  197.                      this.setLoaded(true);
  198.                   }
  199.                } else {
  200.                   this.valid = false;
  201.                   this.reportWhyInvalid();
  202.                   this.setLoaded(true);
  203.                }
  204.             }
  205.          } catch (Throwable var9) {
  206.             throw var9;
  207.          }
  208.  
  209.          return var3;
  210.       }
  211.    }
  212.  
  213.    public int width() {
  214.       return this.getWidthOrHeight(0);
  215.    }
  216.  
  217.    public int height() {
  218.       return this.getWidthOrHeight(1);
  219.    }
  220.  
  221.    public void setTransparent(boolean var1) {
  222.       this.transparent = var1;
  223.    }
  224.  
  225.    public boolean isTransparent() {
  226.       return this.transparent;
  227.    }
  228.  
  229.    public void drawAt(Graphics var1, int var2, int var3) {
  230.       var1.drawBitmapAt(this, var2, var3);
  231.    }
  232.  
  233.    public void drawScaled(Graphics var1, int var2, int var3, int var4, int var5) {
  234.       var1.drawBitmapScaled(this, var2, var3, var4, var5);
  235.    }
  236.  
  237.    public void drawTiled(Graphics var1, int var2, int var3, int var4, int var5) {
  238.       if (!this.isValid()) {
  239.          System.err.println("Graphics.drawBitmapTiled() - Invalid bitmap: " + this.name());
  240.       } else {
  241.          super.drawTiled(var1, var2, var3, var4, var5);
  242.       }
  243.    }
  244.  
  245.    boolean createScaledVersion(int var1, int var2) {
  246.       if (!this.isValid()) {
  247.          return false;
  248.       } else {
  249.          Application var3 = application();
  250.          BitmapObserver var4 = this.bitmapObserver();
  251.  
  252.          while(!var3.applet.prepareImage(this.awtImage, var1, var2, var4)) {
  253.             if (this.loadsIncrementally()) {
  254.                return true;
  255.             }
  256.  
  257.             try {
  258.                Thread.sleep(40L);
  259.             } catch (InterruptedException var5) {
  260.             }
  261.          }
  262.  
  263.          return true;
  264.       }
  265.    }
  266.  
  267.    boolean createScaledVersion(float var1, float var2) {
  268.       return this.createScaledVersion((int)(var1 * (float)this.width()), (int)(var2 * (float)this.height()));
  269.    }
  270.  
  271.    void startLoadingData() {
  272.       MediaTracker var1 = this.tracker();
  273.       if (!this.added) {
  274.          var1.addImage(this.awtImage, this.imageNumber);
  275.          this.added = true;
  276.       }
  277.  
  278.       var1.checkID(this.imageNumber, true);
  279.    }
  280.  
  281.    public void loadData() {
  282.       if (!this.loaded) {
  283.          MediaTracker var1 = this.tracker();
  284.  
  285.          while(!this.loaded) {
  286.             try {
  287.                this.startLoadingData();
  288.                if (this.loadIncrementally) {
  289.                   break;
  290.                }
  291.  
  292.                var1.waitForID(this.imageNumber);
  293.                this.setLoaded(true);
  294.             } catch (InterruptedException var3) {
  295.                System.err.println("Bitmap.loadData() - " + var3);
  296.             }
  297.          }
  298.  
  299.          if (this.valid) {
  300.             this.valid = !var1.isErrorID(this.imageNumber);
  301.          }
  302.  
  303.          if (!this.valid) {
  304.             this.reportWhyInvalid();
  305.             this.setLoaded(true);
  306.          }
  307.  
  308.       }
  309.    }
  310.  
  311.    void setLoaded(boolean var1) {
  312.       this.loaded = var1;
  313.    }
  314.  
  315.    public boolean hasLoadedData() {
  316.       return this.loaded;
  317.    }
  318.  
  319.    public void setLoadsIncrementally(boolean var1) {
  320.       this.loadIncrementally = var1;
  321.    }
  322.  
  323.    public boolean loadsIncrementally() {
  324.       return this.loadIncrementally;
  325.    }
  326.  
  327.    public synchronized Rect updateRect() {
  328.       Rect var1;
  329.       if (this.updateRect == null) {
  330.          var1 = new Rect();
  331.       } else {
  332.          var1 = this.updateRect;
  333.          this.updateRect = null;
  334.       }
  335.  
  336.       return var1;
  337.    }
  338.  
  339.    public synchronized void setUpdateTarget(Target var1) {
  340.       this.updateTarget = var1;
  341.    }
  342.  
  343.    public synchronized Target updateTarget() {
  344.       return this.updateTarget;
  345.    }
  346.  
  347.    public synchronized void setUpdateCommand(String var1) {
  348.       this.updateCommand = var1;
  349.    }
  350.  
  351.    public synchronized String updateCommand() {
  352.       return this.updateCommand;
  353.    }
  354.  
  355.    void reportWhyInvalid() {
  356.       String var1 = "";
  357.       int var2 = this.tracker().statusID(this.imageNumber, false);
  358.       if ((var2 & 2) != 0) {
  359.          var1 = var1 + " ABORTED";
  360.       } else if ((var2 & 8) != 0) {
  361.          var1 = var1 + " COMPLETE";
  362.       } else if ((var2 & 4) != 0) {
  363.          var1 = var1 + " ERRORED";
  364.       } else if ((var2 & 1) != 0) {
  365.          var1 = var1 + " LOADING";
  366.       }
  367.  
  368.       System.err.println("Invalid bitmap: " + this.name() + var1);
  369.    }
  370.  
  371.    public boolean isValid() {
  372.       return this.valid;
  373.    }
  374.  
  375.    public void flush() {
  376.       this.awtImage.flush();
  377.    }
  378.  
  379.    public String toString() {
  380.       return this.name != null ? "Bitmap(" + this.name + ")" : super.toString();
  381.    }
  382.  
  383.    public void describeClassInfo(ClassInfo var1) {
  384.       super.describeClassInfo(var1);
  385.       var1.addClass("netscape.application.Bitmap", 1);
  386.       var1.addField("name", (byte)16);
  387.       var1.addField("updateTarget", (byte)18);
  388.       var1.addField("updateCommand", (byte)16);
  389.       var1.addField("transparent", (byte)0);
  390.       var1.addField("loadIncrementally", (byte)0);
  391.    }
  392.  
  393.    public void encode(Encoder var1) throws CodingException {
  394.       super.encode(var1);
  395.       if (this.name == null) {
  396.          throw new CodingException("encoded Bitmaps must have a name");
  397.       } else {
  398.          var1.encodeString("name", this.name);
  399.          var1.encodeObject("updateTarget", (Codable)this.updateTarget);
  400.          var1.encodeString("updateCommand", this.updateCommand);
  401.          var1.encodeBoolean("transparent", this.transparent);
  402.          var1.encodeBoolean("loadIncrementally", this.loadIncrementally);
  403.       }
  404.    }
  405.  
  406.    public void decode(Decoder var1) throws CodingException {
  407.       super.decode(var1);
  408.       this.name = var1.decodeString("name");
  409.       if (this.name == null) {
  410.          throw new CodingException("encoded Bitmaps must have a name");
  411.       } else {
  412.          this.updateTarget = (Target)var1.decodeObject("updateTarget");
  413.          this.updateCommand = var1.decodeString("updateCommand");
  414.          this.transparent = var1.decodeBoolean("transparent");
  415.          this.loadIncrementally = var1.decodeBoolean("loadIncrementally");
  416.          Bitmap var2 = bitmapNamed(this.name);
  417.          if (var2 == null) {
  418.             throw new CodingException("unable to find bitmap named: " + this.name);
  419.          } else if (this.getClass() == bitmapClass()) {
  420.             var1.replaceObject(var2);
  421.          } else {
  422.             this.awtImage = var2.awtImage;
  423.          }
  424.       }
  425.    }
  426.  
  427.    private static Class bitmapClass() {
  428.       if (bitmapClass == null) {
  429.          bitmapClass = (new Bitmap()).getClass();
  430.       }
  431.  
  432.       return bitmapClass;
  433.    }
  434.  
  435.    private static Application application() {
  436.       return Application.application();
  437.    }
  438.  
  439.    private static Bitmap systemBitmapNamed(String var0) {
  440.       Bitmap var1 = null;
  441.       if (var0 == null) {
  442.          return null;
  443.       } else if (!var0.startsWith("netscape/application/")) {
  444.          return null;
  445.       } else {
  446.          String var2 = var0.substring("netscape/application/".length());
  447.          if (var2.equals("RedGrad.gif")) {
  448.             var1 = SystemImages.redGrad();
  449.          } else if (var2.equals("GreenGrad.gif")) {
  450.             var1 = SystemImages.greenGrad();
  451.          } else if (var2.equals("BlueGrad.gif")) {
  452.             var1 = SystemImages.blueGrad();
  453.          } else if (var2.equals("CheckMark.gif")) {
  454.             var1 = SystemImages.checkMark();
  455.          } else if (var2.equals("CloseButton.gif")) {
  456.             var1 = SystemImages.closeButton();
  457.          } else if (var2.equals("CloseButtonActive.gif")) {
  458.             var1 = SystemImages.closeButtonActive();
  459.          } else if (var2.equals("ColorScrollKnob.gif")) {
  460.             var1 = SystemImages.colorScrollKnob();
  461.          } else if (var2.equals("PopupKnob.gif")) {
  462.             var1 = SystemImages.popupKnob();
  463.          } else if (var2.equals("PopupKnobH.gif")) {
  464.             var1 = SystemImages.popupKnobH();
  465.          } else if (var2.equals("RadioButtonOff.gif")) {
  466.             var1 = SystemImages.radioButtonOff();
  467.          } else if (var2.equals("RadioButtonOn.gif")) {
  468.             var1 = SystemImages.radioButtonOn();
  469.          } else if (var2.equals("ResizeLeft.gif")) {
  470.             var1 = SystemImages.resizeLeft();
  471.          } else if (var2.equals("ResizeRight.gif")) {
  472.             var1 = SystemImages.resizeRight();
  473.          } else if (var2.equals("ScrollDownArrow.gif")) {
  474.             var1 = SystemImages.scrollDownArrow();
  475.          } else if (var2.equals("ScrollDownArrowActive.gif")) {
  476.             var1 = SystemImages.scrollDownArrowActive();
  477.          } else if (var2.equals("ScrollKnobH.gif")) {
  478.             var1 = SystemImages.scrollKnobH();
  479.          } else if (var2.equals("ScrollKnobV.gif")) {
  480.             var1 = SystemImages.scrollKnobV();
  481.          } else if (var2.equals("ScrollLeftArrow.gif")) {
  482.             var1 = SystemImages.scrollLeftArrow();
  483.          } else if (var2.equals("ScrollLeftArrowActive.gif")) {
  484.             var1 = SystemImages.scrollLeftArrowActive();
  485.          } else if (var2.equals("ScrollRightArrow.gif")) {
  486.             var1 = SystemImages.scrollRightArrow();
  487.          } else if (var2.equals("ScrollRightArrowActive.gif")) {
  488.             var1 = SystemImages.scrollRightArrowActive();
  489.          } else if (var2.equals("ScrollTrayBottom.gif")) {
  490.             var1 = SystemImages.scrollTrayBottom();
  491.          } else if (var2.equals("ScrollTrayLeft.gif")) {
  492.             var1 = SystemImages.scrollTrayLeft();
  493.          } else if (var2.equals("ScrollTrayRight.gif")) {
  494.             var1 = SystemImages.scrollTrayRight();
  495.          } else if (var2.equals("ScrollTrayTop.gif")) {
  496.             var1 = SystemImages.scrollTrayTop();
  497.          } else if (var2.equals("ScrollUpArrow.gif")) {
  498.             var1 = SystemImages.scrollUpArrow();
  499.          } else if (var2.equals("ScrollUpArrowActive.gif")) {
  500.             var1 = SystemImages.scrollUpArrowActive();
  501.          } else if (var2.equals("TitleBarLeft.gif")) {
  502.             var1 = SystemImages.titleBarLeft();
  503.          } else if (var2.equals("TitleBarRight.gif")) {
  504.             var1 = SystemImages.titleBarRight();
  505.          } else if (var2.equals("alertNotification.gif")) {
  506.             var1 = SystemImages.alertNotification();
  507.          } else if (var2.equals("alertQuestion.gif")) {
  508.             var1 = SystemImages.alertQuestion();
  509.          } else if (var2.equals("alertWarning.gif")) {
  510.             var1 = SystemImages.alertWarning();
  511.          } else if (var2.equals("topLeftArrow.gif")) {
  512.             var1 = SystemImages.topLeftArrow();
  513.          } else if (var2.equals("topRightArrow.gif")) {
  514.             var1 = SystemImages.topRightArrow();
  515.          } else if (var2.equals("bottomRightArrow.gif")) {
  516.             var1 = SystemImages.bottomRightArrow();
  517.          } else if (var2.equals("bottomLeftArrow.gif")) {
  518.             var1 = SystemImages.bottomLeftArrow();
  519.          }
  520.  
  521.          return var1;
  522.       }
  523.    }
  524.  
  525.    public Image imageWithName(String var1) {
  526.       return bitmapNamed(var1);
  527.    }
  528.  
  529.    synchronized void unionWithUpdateRect(int var1, int var2, int var3, int var4) {
  530.       if (this.updateRect == null) {
  531.          this.updateRect = new Rect(var1, var2, var3, var4);
  532.       } else {
  533.          this.updateRect.unionWith(var1, var2, var3, var4);
  534.       }
  535.    }
  536.  
  537.    MediaTracker tracker() {
  538.       if (this.mediaTracker == null) {
  539.          this.mediaTracker = new MediaTracker(AWTCompatibility.awtApplet());
  540.       }
  541.  
  542.       return this.mediaTracker;
  543.    }
  544. }
  545.