home *** CD-ROM | disk | FTP | other *** search
- package sun.java2d.pipe;
-
- import java.awt.Rectangle;
-
- public class Region {
- public static final int INIT_SIZE = 50;
- public static final int GROW_SIZE = 50;
- int[] bands = new int[50];
- int endIndex;
- int prevYrow;
- int curYrow;
- int lox;
- int loy;
- int hix;
- int hiy;
-
- public void setOutputArea(Rectangle var1) {
- this.setOutputArea(var1.x, var1.y, var1.width, var1.height);
- }
-
- public void setOutputArea(int var1, int var2, int var3, int var4) {
- this.lox = var1;
- this.loy = var2;
- this.hix = var1 + var3;
- this.hiy = var2 + var4;
- }
-
- public void appendSpans(SpanIterator var1) {
- int[] var2 = new int[4];
-
- while(var1.nextSpan(var2)) {
- this.appendSpan(var2[0], var2[1], var2[2], var2[3]);
- }
-
- this.endRow();
- this.calcBBox();
- }
-
- public void appendSpan(int var1, int var2, int var3, int var4) {
- if (var1 < this.lox) {
- var1 = this.lox;
- }
-
- if (var2 < this.loy) {
- var2 = this.loy;
- }
-
- if (var3 > this.hix) {
- var3 = this.hix;
- }
-
- if (var4 > this.hiy) {
- var4 = this.hiy;
- }
-
- if (var3 > var1 && var4 > var2) {
- if (this.endIndex != 0 && var2 < this.bands[this.curYrow + 1]) {
- if (var2 != this.bands[this.curYrow] || var4 != this.bands[this.curYrow + 1] || var1 < this.bands[this.endIndex - 1]) {
- throw new InternalError("bad span");
- }
-
- if (var1 == this.bands[this.endIndex - 1]) {
- this.bands[this.endIndex - 1] = var3;
- return;
- }
-
- this.needSpace(2);
- } else {
- this.endRow();
- this.needSpace(5);
- this.bands[this.endIndex++] = var2;
- this.bands[this.endIndex++] = var4;
- this.bands[this.endIndex++] = 0;
- }
-
- this.bands[this.endIndex++] = var1;
- this.bands[this.endIndex++] = var3;
- int var10002 = this.bands[this.curYrow + 2]++;
- }
- }
-
- void needSpace(int var1) {
- if (this.endIndex + var1 >= this.bands.length) {
- int[] var2 = new int[this.bands.length + 50];
- System.arraycopy(this.bands, 0, var2, 0, this.endIndex);
- this.bands = var2;
- }
-
- }
-
- void endRow() {
- int var1 = this.curYrow;
- int var2 = this.prevYrow;
- if (var1 > var2) {
- int[] var3 = this.bands;
- if (var3[var2 + 1] == var3[var1] && var3[var2 + 2] == var3[var1 + 2]) {
- int var4 = var3[var1 + 2] * 2;
- var1 += 3;
-
- for(int var6 = var2 + 3; var4 > 0 && var3[var1++] == var3[var6++]; --var4) {
- }
-
- if (var4 == 0) {
- var3[this.prevYrow + 1] = var3[this.curYrow + 1];
- this.endIndex = this.curYrow;
- return;
- }
- }
- }
-
- this.prevYrow = this.curYrow;
- this.curYrow = this.endIndex;
- }
-
- void calcBBox() {
- if (this.endIndex == 0) {
- this.lox = this.loy = this.hix = this.hiy = 0;
- } else {
- int var1 = this.hix;
- int var2 = this.lox;
- int var3 = 0;
- int var4 = 0;
- int[] var5 = this.bands;
-
- while(var4 < this.endIndex) {
- var3 = var4;
- int var6 = var5[var4 + 2];
- var4 += 3;
- if (var1 > var5[var4]) {
- var1 = var5[var4];
- }
-
- var4 += var6 * 2;
- if (var2 < var5[var4 - 1]) {
- var2 = var5[var4 - 1];
- }
- }
-
- this.lox = var1;
- this.loy = var5[0];
- this.hix = var2;
- this.hiy = var5[var3 + 1];
- }
- }
-
- public void getBounds(int[] var1) {
- var1[0] = this.lox;
- var1[1] = this.loy;
- var1[2] = this.hix;
- var1[3] = this.hiy;
- }
-
- public RegionIterator getIterator() {
- return new RegionIterator(this);
- }
- }
-