home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / java2d / pipe / Region.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  2.0 KB  |  157 lines

  1. package sun.java2d.pipe;
  2.  
  3. import java.awt.Rectangle;
  4.  
  5. public class Region {
  6.    public static final int INIT_SIZE = 50;
  7.    public static final int GROW_SIZE = 50;
  8.    int[] bands = new int[50];
  9.    int endIndex;
  10.    int prevYrow;
  11.    int curYrow;
  12.    int lox;
  13.    int loy;
  14.    int hix;
  15.    int hiy;
  16.  
  17.    public void setOutputArea(Rectangle var1) {
  18.       this.setOutputArea(var1.x, var1.y, var1.width, var1.height);
  19.    }
  20.  
  21.    public void setOutputArea(int var1, int var2, int var3, int var4) {
  22.       this.lox = var1;
  23.       this.loy = var2;
  24.       this.hix = var1 + var3;
  25.       this.hiy = var2 + var4;
  26.    }
  27.  
  28.    public void appendSpans(SpanIterator var1) {
  29.       int[] var2 = new int[4];
  30.  
  31.       while(var1.nextSpan(var2)) {
  32.          this.appendSpan(var2[0], var2[1], var2[2], var2[3]);
  33.       }
  34.  
  35.       this.endRow();
  36.       this.calcBBox();
  37.    }
  38.  
  39.    public void appendSpan(int var1, int var2, int var3, int var4) {
  40.       if (var1 < this.lox) {
  41.          var1 = this.lox;
  42.       }
  43.  
  44.       if (var2 < this.loy) {
  45.          var2 = this.loy;
  46.       }
  47.  
  48.       if (var3 > this.hix) {
  49.          var3 = this.hix;
  50.       }
  51.  
  52.       if (var4 > this.hiy) {
  53.          var4 = this.hiy;
  54.       }
  55.  
  56.       if (var3 > var1 && var4 > var2) {
  57.          if (this.endIndex != 0 && var2 < this.bands[this.curYrow + 1]) {
  58.             if (var2 != this.bands[this.curYrow] || var4 != this.bands[this.curYrow + 1] || var1 < this.bands[this.endIndex - 1]) {
  59.                throw new InternalError("bad span");
  60.             }
  61.  
  62.             if (var1 == this.bands[this.endIndex - 1]) {
  63.                this.bands[this.endIndex - 1] = var3;
  64.                return;
  65.             }
  66.  
  67.             this.needSpace(2);
  68.          } else {
  69.             this.endRow();
  70.             this.needSpace(5);
  71.             this.bands[this.endIndex++] = var2;
  72.             this.bands[this.endIndex++] = var4;
  73.             this.bands[this.endIndex++] = 0;
  74.          }
  75.  
  76.          this.bands[this.endIndex++] = var1;
  77.          this.bands[this.endIndex++] = var3;
  78.          int var10002 = this.bands[this.curYrow + 2]++;
  79.       }
  80.    }
  81.  
  82.    void needSpace(int var1) {
  83.       if (this.endIndex + var1 >= this.bands.length) {
  84.          int[] var2 = new int[this.bands.length + 50];
  85.          System.arraycopy(this.bands, 0, var2, 0, this.endIndex);
  86.          this.bands = var2;
  87.       }
  88.  
  89.    }
  90.  
  91.    void endRow() {
  92.       int var1 = this.curYrow;
  93.       int var2 = this.prevYrow;
  94.       if (var1 > var2) {
  95.          int[] var3 = this.bands;
  96.          if (var3[var2 + 1] == var3[var1] && var3[var2 + 2] == var3[var1 + 2]) {
  97.             int var4 = var3[var1 + 2] * 2;
  98.             var1 += 3;
  99.  
  100.             for(int var6 = var2 + 3; var4 > 0 && var3[var1++] == var3[var6++]; --var4) {
  101.             }
  102.  
  103.             if (var4 == 0) {
  104.                var3[this.prevYrow + 1] = var3[this.curYrow + 1];
  105.                this.endIndex = this.curYrow;
  106.                return;
  107.             }
  108.          }
  109.       }
  110.  
  111.       this.prevYrow = this.curYrow;
  112.       this.curYrow = this.endIndex;
  113.    }
  114.  
  115.    void calcBBox() {
  116.       if (this.endIndex == 0) {
  117.          this.lox = this.loy = this.hix = this.hiy = 0;
  118.       } else {
  119.          int var1 = this.hix;
  120.          int var2 = this.lox;
  121.          int var3 = 0;
  122.          int var4 = 0;
  123.          int[] var5 = this.bands;
  124.  
  125.          while(var4 < this.endIndex) {
  126.             var3 = var4;
  127.             int var6 = var5[var4 + 2];
  128.             var4 += 3;
  129.             if (var1 > var5[var4]) {
  130.                var1 = var5[var4];
  131.             }
  132.  
  133.             var4 += var6 * 2;
  134.             if (var2 < var5[var4 - 1]) {
  135.                var2 = var5[var4 - 1];
  136.             }
  137.          }
  138.  
  139.          this.lox = var1;
  140.          this.loy = var5[0];
  141.          this.hix = var2;
  142.          this.hiy = var5[var3 + 1];
  143.       }
  144.    }
  145.  
  146.    public void getBounds(int[] var1) {
  147.       var1[0] = this.lox;
  148.       var1[1] = this.loy;
  149.       var1[2] = this.hix;
  150.       var1[3] = this.hiy;
  151.    }
  152.  
  153.    public RegionIterator getIterator() {
  154.       return new RegionIterator(this);
  155.    }
  156. }
  157.