home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / netscape / application / Rect.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-12  |  8.7 KB  |  491 lines

  1. package netscape.application;
  2.  
  3. import netscape.util.ClassInfo;
  4. import netscape.util.Codable;
  5. import netscape.util.CodingException;
  6. import netscape.util.Decoder;
  7. import netscape.util.Encoder;
  8. import netscape.util.Vector;
  9.  
  10. public class Rect implements Codable {
  11.    // $FF: renamed from: x int
  12.    public int field_0;
  13.    // $FF: renamed from: y int
  14.    public int field_1;
  15.    public int width;
  16.    public int height;
  17.    private static Vector _rectCache = new Vector();
  18.    private static boolean _cacheRects = true;
  19.    static final String X_KEY = "x";
  20.    static final String Y_KEY = "y";
  21.    static final String WIDTH_KEY = "width";
  22.    static final String HEIGHT_KEY = "height";
  23.  
  24.    public static boolean contains(int var0, int var1, int var2, int var3, int var4, int var5) {
  25.       return var4 >= var0 && var4 < var0 + var2 && var5 >= var1 && var5 < var1 + var3;
  26.    }
  27.  
  28.    public static Rect rectFromIntersection(Rect var0, Rect var1) {
  29.       Rect var2 = new Rect(var0);
  30.       var2.intersectWith(var1);
  31.       return var2;
  32.    }
  33.  
  34.    public static Rect rectFromUnion(Rect var0, Rect var1) {
  35.       Rect var2 = new Rect(var0);
  36.       var2.unionWith(var1);
  37.       return var2;
  38.    }
  39.  
  40.    public Rect() {
  41.    }
  42.  
  43.    public Rect(int var1, int var2, int var3, int var4) {
  44.       this.field_0 = var1;
  45.       this.field_1 = var2;
  46.       this.width = var3;
  47.       this.height = var4;
  48.    }
  49.  
  50.    public Rect(Rect var1) {
  51.       this.field_0 = var1.field_0;
  52.       this.field_1 = var1.field_1;
  53.       this.width = var1.width;
  54.       this.height = var1.height;
  55.    }
  56.  
  57.    public String toString() {
  58.       return "(" + this.field_0 + ", " + this.field_1 + ", " + this.width + ", " + this.height + ")";
  59.    }
  60.  
  61.    public void setBounds(int var1, int var2, int var3, int var4) {
  62.       this.field_0 = var1;
  63.       this.field_1 = var2;
  64.       this.width = var3 < 0 ? 0 : var3;
  65.       this.height = var4 < 0 ? 0 : var4;
  66.    }
  67.  
  68.    public void setBounds(Rect var1) {
  69.       if (var1 == null) {
  70.          this.setBounds(0, 0, 0, 0);
  71.       } else {
  72.          this.setBounds(var1.field_0, var1.field_1, var1.width, var1.height);
  73.       }
  74.    }
  75.  
  76.    public void setCoordinates(int var1, int var2, int var3, int var4) {
  77.       this.setBounds(var1, var2, var3 - var1, var4 - var2);
  78.    }
  79.  
  80.    public void moveTo(int var1, int var2) {
  81.       this.field_0 = var1;
  82.       this.field_1 = var2;
  83.    }
  84.  
  85.    public void moveBy(int var1, int var2) {
  86.       this.field_0 += var1;
  87.       this.field_1 += var2;
  88.    }
  89.  
  90.    public void sizeTo(int var1, int var2) {
  91.       this.width = var1 < 0 ? 0 : var1;
  92.       this.height = var2 < 0 ? 0 : var2;
  93.    }
  94.  
  95.    public void sizeBy(int var1, int var2) {
  96.       this.width += var1;
  97.       if (this.width < 0) {
  98.          this.width = 0;
  99.       }
  100.  
  101.       this.height += var2;
  102.       if (this.height < 0) {
  103.          this.height = 0;
  104.       }
  105.  
  106.    }
  107.  
  108.    public void growBy(int var1, int var2) {
  109.       this.field_0 -= var1;
  110.       this.field_1 -= var2;
  111.       this.width += 2 * var1;
  112.       this.height += 2 * var2;
  113.       if (this.width < 0) {
  114.          this.width = 0;
  115.       }
  116.  
  117.       if (this.height < 0) {
  118.          this.height = 0;
  119.       }
  120.  
  121.    }
  122.  
  123.    public int maxX() {
  124.       return this.field_0 + this.width;
  125.    }
  126.  
  127.    public int maxY() {
  128.       return this.field_1 + this.height;
  129.    }
  130.  
  131.    public int midX() {
  132.       return this.field_0 + this.width / 2;
  133.    }
  134.  
  135.    public int midY() {
  136.       return this.field_1 + this.height / 2;
  137.    }
  138.  
  139.    public boolean equals(Object var1) {
  140.       if (!(var1 instanceof Rect)) {
  141.          return false;
  142.       } else {
  143.          Rect var2 = (Rect)var1;
  144.          return var2.field_0 == this.field_0 && var2.field_1 == this.field_1 && var2.width == this.width && var2.height == this.height;
  145.       }
  146.    }
  147.  
  148.    public int hashCode() {
  149.       return this.field_0 ^ this.field_1 ^ this.width ^ this.height;
  150.    }
  151.  
  152.    public boolean isEmpty() {
  153.       return this.width == 0 || this.height == 0;
  154.    }
  155.  
  156.    public boolean contains(int var1, int var2) {
  157.       return var1 >= this.field_0 && var1 < this.field_0 + this.width && var2 >= this.field_1 && var2 < this.field_1 + this.height;
  158.    }
  159.  
  160.    public boolean contains(Point var1) {
  161.       return this.contains(var1.x, var1.y);
  162.    }
  163.  
  164.    public boolean contains(Rect var1) {
  165.       if (var1 == null) {
  166.          return false;
  167.       } else {
  168.          return var1.field_0 >= this.field_0 && var1.field_0 + var1.width <= this.field_0 + this.width && var1.field_1 >= this.field_1 && var1.field_1 + var1.height <= this.field_1 + this.height;
  169.       }
  170.    }
  171.  
  172.    public boolean intersects(int var1, int var2, int var3, int var4) {
  173.       if (this.field_0 < var1 + var3 && this.field_0 + this.width > var1 && this.field_1 < var2 + var4 && this.field_1 + this.height > var2) {
  174.          return this.width != 0 && this.height != 0 && var3 != 0 && var4 != 0;
  175.       } else {
  176.          return false;
  177.       }
  178.    }
  179.  
  180.    public boolean intersects(Rect var1) {
  181.       return var1 == null ? false : this.intersects(var1.field_0, var1.field_1, var1.width, var1.height);
  182.    }
  183.  
  184.    public void intersectWith(int var1, int var2, int var3, int var4) {
  185.       int var5 = var1;
  186.       int var6 = var2;
  187.       int var7 = var1 + var3;
  188.       int var8 = var2 + var4;
  189.       int var9 = this.field_0 + this.width;
  190.       int var10 = this.field_1 + this.height;
  191.       if (this.field_0 < var7 && var9 > var1) {
  192.          if (this.field_0 > var1 && this.field_0 < var7) {
  193.             var5 = this.field_0;
  194.             if (var9 < var7) {
  195.                var7 = var9;
  196.             }
  197.          } else if (var9 > var1 && var9 < var7) {
  198.             var7 = var9;
  199.          }
  200.       } else {
  201.          var7 = 0;
  202.          var5 = 0;
  203.       }
  204.  
  205.       if (this.field_1 < var8 && var10 > var2) {
  206.          if (this.field_1 > var2 && this.field_1 < var8) {
  207.             var6 = this.field_1;
  208.             if (var10 < var8) {
  209.                var8 = var10;
  210.             }
  211.          } else if (var10 > var2 && var10 < var8) {
  212.             var8 = var10;
  213.          }
  214.       } else {
  215.          var8 = 0;
  216.          var6 = 0;
  217.       }
  218.  
  219.       this.setCoordinates(var5, var6, var7, var8);
  220.    }
  221.  
  222.    public void intersectWith(Rect var1) {
  223.       this.intersectWith(var1.field_0, var1.field_1, var1.width, var1.height);
  224.    }
  225.  
  226.    public Rect intersectionRect(Rect var1) {
  227.       int var2 = var1.field_0;
  228.       int var3 = var1.field_1;
  229.       int var4 = var1.field_0 + var1.width;
  230.       int var5 = var1.field_1 + var1.height;
  231.       int var6 = this.field_0 + this.width;
  232.       int var7 = this.field_1 + this.height;
  233.       if (this.field_0 < var4 && var6 > var2 && this.field_1 < var5 && var7 > var3) {
  234.          if (this.field_0 > var2 && this.field_0 < var4) {
  235.             var2 = this.field_0;
  236.             if (var6 < var4) {
  237.                var4 = var6;
  238.             }
  239.          } else if (var6 > var2 && var6 < var4) {
  240.             var4 = var6;
  241.          }
  242.  
  243.          if (this.field_1 > var3 && this.field_1 < var5) {
  244.             var3 = this.field_1;
  245.             if (var7 < var5) {
  246.                var5 = var7;
  247.             }
  248.          } else if (var7 > var3 && var7 < var5) {
  249.             var5 = var7;
  250.          }
  251.  
  252.          return new Rect(var2, var3, var4 - var2, var5 - var3);
  253.       } else {
  254.          return new Rect();
  255.       }
  256.    }
  257.  
  258.    public void unionWith(int var1, int var2, int var3, int var4) {
  259.       int var5 = this.field_0 < var1 ? this.field_0 : var1;
  260.       int var7 = var1 + var3;
  261.       if (this.field_0 + this.width > var7) {
  262.          var7 = this.field_0 + this.width;
  263.       }
  264.  
  265.       int var6 = this.field_1 < var2 ? this.field_1 : var2;
  266.       int var8 = var2 + var4;
  267.       if (this.field_1 + this.height > var8) {
  268.          var8 = this.field_1 + this.height;
  269.       }
  270.  
  271.       this.setCoordinates(var5, var6, var7, var8);
  272.    }
  273.  
  274.    public void unionWith(Rect var1) {
  275.       if (var1 != null) {
  276.          this.unionWith(var1.field_0, var1.field_1, var1.width, var1.height);
  277.       }
  278.    }
  279.  
  280.    public Rect unionRect(Rect var1) {
  281.       if (var1 == null) {
  282.          return new Rect(this);
  283.       } else {
  284.          int var4 = this.field_0 < var1.field_0 ? this.field_0 : var1.field_0;
  285.          int var6 = var1.field_0 + var1.width;
  286.          int var2 = this.field_0 + this.width;
  287.          if (var2 > var6) {
  288.             var6 = var2;
  289.          }
  290.  
  291.          int var5 = this.field_1 < var1.field_1 ? this.field_1 : var1.field_1;
  292.          int var7 = var1.field_1 + var1.height;
  293.          int var3 = this.field_1 + this.height;
  294.          if (var3 > var7) {
  295.             var7 = var3;
  296.          }
  297.  
  298.          return new Rect(var4, var5, var6 - var4, var7 - var5);
  299.       }
  300.    }
  301.  
  302.    void filterEmptyRects(Vector var1) {
  303.       int var3 = var1.count();
  304.  
  305.       while(var3-- > 0) {
  306.          Rect var2 = (Rect)var1.elementAt(var3);
  307.          if (var2.width == 0 || var2.height == 0) {
  308.             var1.removeElementAt(var3);
  309.          }
  310.       }
  311.  
  312.    }
  313.  
  314.    public void computeDisunionRects(Rect var1, Vector var2) {
  315.       if (var1 != null && this.intersects(var1) && var2 != null) {
  316.          if (!var1.contains(this)) {
  317.             if (this.contains(var1)) {
  318.                var2.addElement(newRect(this.field_0, this.field_1, var1.field_0 - this.field_0, this.height));
  319.                var2.addElement(newRect(var1.field_0, this.field_1, var1.width, var1.field_1 - this.field_1));
  320.                var2.addElement(newRect(var1.field_0, var1.maxY(), var1.width, this.maxY() - var1.maxY()));
  321.                var2.addElement(newRect(var1.maxX(), this.field_1, this.maxX() - var1.maxX(), this.height));
  322.                this.filterEmptyRects(var2);
  323.             } else if (var1.field_0 <= this.field_0 && var1.field_1 <= this.field_1) {
  324.                if (var1.maxX() > this.maxX()) {
  325.                   var2.addElement(newRect(this.field_0, var1.maxY(), this.width, this.maxY() - var1.maxY()));
  326.                } else if (var1.maxY() > this.maxY()) {
  327.                   var2.addElement(newRect(var1.maxX(), this.field_1, this.maxX() - var1.maxX(), this.height));
  328.                } else {
  329.                   var2.addElement(newRect(var1.maxX(), this.field_1, this.maxX() - var1.maxX(), var1.maxY() - this.field_1));
  330.                   var2.addElement(newRect(this.field_0, var1.maxY(), this.width, this.maxY() - var1.maxY()));
  331.                }
  332.  
  333.                this.filterEmptyRects(var2);
  334.             } else if (var1.field_0 <= this.field_0 && var1.maxY() >= this.maxY()) {
  335.                if (var1.maxX() > this.maxX()) {
  336.                   var2.addElement(newRect(this.field_0, this.field_1, this.width, var1.field_1 - this.field_1));
  337.                } else {
  338.                   var2.addElement(newRect(this.field_0, this.field_1, this.width, var1.field_1 - this.field_1));
  339.                   var2.addElement(newRect(var1.maxX(), var1.field_1, this.maxX() - var1.maxX(), this.maxY() - var1.field_1));
  340.                }
  341.  
  342.                this.filterEmptyRects(var2);
  343.             } else if (var1.field_0 <= this.field_0) {
  344.                if (var1.maxX() >= this.maxX()) {
  345.                   var2.addElement(newRect(this.field_0, this.field_1, this.width, var1.field_1 - this.field_1));
  346.                   var2.addElement(newRect(this.field_0, var1.maxY(), this.width, this.maxY() - var1.maxY()));
  347.                } else {
  348.                   var2.addElement(newRect(this.field_0, this.field_1, this.width, var1.field_1 - this.field_1));
  349.                   var2.addElement(newRect(var1.maxX(), var1.field_1, this.maxX() - var1.maxX(), var1.height));
  350.                   var2.addElement(newRect(this.field_0, var1.maxY(), this.width, this.maxY() - var1.maxY()));
  351.                }
  352.  
  353.                this.filterEmptyRects(var2);
  354.             } else if (var1.field_0 <= this.maxX() && var1.maxX() > this.maxX()) {
  355.                if (var1.field_1 <= this.field_1 && var1.maxY() > this.maxY()) {
  356.                   var2.addElement(newRect(this.field_0, this.field_1, var1.field_0 - this.field_0, this.height));
  357.                } else if (var1.field_1 <= this.field_1) {
  358.                   var2.addElement(newRect(this.field_0, this.field_1, var1.field_0 - this.field_0, var1.maxY() - this.field_1));
  359.                   var2.addElement(newRect(this.field_0, var1.maxY(), this.width, this.maxY() - var1.maxY()));
  360.                } else if (var1.maxY() > this.maxY()) {
  361.                   var2.addElement(newRect(this.field_0, this.field_1, this.width, var1.field_1 - this.field_1));
  362.                   var2.addElement(newRect(this.field_0, var1.field_1, var1.field_0 - this.field_0, this.maxY() - var1.field_1));
  363.                } else {
  364.                   var2.addElement(newRect(this.field_0, this.field_1, this.width, var1.field_1 - this.field_1));
  365.                   var2.addElement(newRect(this.field_0, var1.field_1, var1.field_0 - this.field_0, var1.height));
  366.                   var2.addElement(newRect(this.field_0, var1.maxY(), this.width, this.maxY() - var1.maxY()));
  367.                }
  368.  
  369.                this.filterEmptyRects(var2);
  370.             } else if (var1.field_0 >= this.field_0 && var1.maxX() <= this.maxX()) {
  371.                if (var1.field_1 <= this.field_1 && var1.maxY() > this.maxY()) {
  372.                   var2.addElement(newRect(this.field_0, this.field_1, var1.field_0 - this.field_0, this.height));
  373.                   var2.addElement(newRect(var1.maxX(), this.field_1, this.maxX() - var1.maxX(), this.height));
  374.                } else if (var1.field_1 <= this.field_1) {
  375.                   var2.addElement(newRect(this.field_0, this.field_1, var1.field_0 - this.field_0, this.height));
  376.                   var2.addElement(newRect(var1.field_0, var1.maxY(), var1.width, this.maxY() - var1.maxY()));
  377.                   var2.addElement(newRect(var1.maxX(), this.field_1, this.maxX() - var1.maxX(), this.height));
  378.                } else {
  379.                   var2.addElement(newRect(this.field_0, this.field_1, var1.field_0 - this.field_0, this.height));
  380.                   var2.addElement(newRect(var1.field_0, this.field_1, var1.width, var1.field_1 - this.field_1));
  381.                   var2.addElement(newRect(var1.maxX(), this.field_1, this.maxX() - var1.maxX(), this.height));
  382.                }
  383.  
  384.                this.filterEmptyRects(var2);
  385.             }
  386.          }
  387.       }
  388.    }
  389.  
  390.    public void describeClassInfo(ClassInfo var1) {
  391.       var1.addClass("netscape.application.Rect", 1);
  392.       var1.addField("x", (byte)8);
  393.       var1.addField("y", (byte)8);
  394.       var1.addField("width", (byte)8);
  395.       var1.addField("height", (byte)8);
  396.    }
  397.  
  398.    public void encode(Encoder var1) throws CodingException {
  399.       var1.encodeInt("x", this.field_0);
  400.       var1.encodeInt("y", this.field_1);
  401.       var1.encodeInt("width", this.width);
  402.       var1.encodeInt("height", this.height);
  403.    }
  404.  
  405.    public void decode(Decoder var1) throws CodingException {
  406.       this.field_0 = var1.decodeInt("x");
  407.       this.field_1 = var1.decodeInt("y");
  408.       this.width = var1.decodeInt("width");
  409.       this.height = var1.decodeInt("height");
  410.    }
  411.  
  412.    public void finishDecoding() throws CodingException {
  413.    }
  414.  
  415.    static Rect newRect(int var0, int var1, int var2, int var3) {
  416.       Vector var5 = _rectCache;
  417.       synchronized(var5){}
  418.  
  419.       Rect var4;
  420.       label47: {
  421.          Rect var7;
  422.          try {
  423.             if (_cacheRects && !_rectCache.isEmpty()) {
  424.                var4 = (Rect)_rectCache.removeLastElement();
  425.                break label47;
  426.             }
  427.  
  428.             var7 = new Rect(var0, var1, var2, var3);
  429.          } catch (Throwable var9) {
  430.             throw var9;
  431.          }
  432.  
  433.          return var7;
  434.       }
  435.  
  436.       var4.setBounds(var0, var1, var2, var3);
  437.       return var4;
  438.    }
  439.  
  440.    static Rect newRect(Rect var0) {
  441.       return var0 == null ? newRect(0, 0, 0, 0) : newRect(var0.field_0, var0.field_1, var0.width, var0.height);
  442.    }
  443.  
  444.    static Rect newRect() {
  445.       return newRect(0, 0, 0, 0);
  446.    }
  447.  
  448.    static void returnRect(Rect var0) {
  449.       if (_cacheRects) {
  450.          Vector var1 = _rectCache;
  451.          synchronized(var1){}
  452.  
  453.          try {
  454.             if (_rectCache.count() < 50) {
  455.                _rectCache.addElement(var0);
  456.             }
  457.          } catch (Throwable var3) {
  458.             throw var3;
  459.          }
  460.  
  461.       }
  462.    }
  463.  
  464.    static void returnRects(Vector var0) {
  465.       if (var0 != null && _cacheRects) {
  466.          int var1 = var0.count();
  467.  
  468.          while(var1-- > 0) {
  469.             returnRect((Rect)var0.elementAt(var1));
  470.          }
  471.  
  472.          var0.removeAllElements();
  473.       }
  474.    }
  475.  
  476.    static void setShouldCacheRects(boolean var0) {
  477.       Vector var1 = _rectCache;
  478.       synchronized(var1){}
  479.  
  480.       try {
  481.          _cacheRects = var0;
  482.          if (!_cacheRects) {
  483.             _rectCache.removeAllElements();
  484.          }
  485.       } catch (Throwable var3) {
  486.          throw var3;
  487.       }
  488.  
  489.    }
  490. }
  491.