home *** CD-ROM | disk | FTP | other *** search
- package sun.awt.image;
-
- import java.awt.image.ColorModel;
- import java.awt.image.ImageConsumer;
- import java.awt.image.ImageProducer;
- import java.util.Hashtable;
- import sun.misc.Ref;
-
- public abstract class PixelStore extends Ref {
- int width;
- int height;
- ColorModel colormodel;
- Hashtable properties;
- boolean[] seen;
- int numlines;
- int availinfo;
- int hints;
- static final int NO_BITS_YET = 0;
- static final int BITS_ALLOCATED = 1;
- static final int BITS_LOST = 2;
- int bit_state = 0;
- int[] offsets;
-
- public PixelStore() {
- }
-
- public PixelStore(int var1, int var2) {
- this.setDimensions(var1, var2);
- }
-
- public PixelStore(int var1, int var2, ColorModel var3) {
- this.setDimensions(var1, var2);
- this.setColorModel(var3);
- }
-
- public synchronized void setDimensions(int var1, int var2) {
- this.width = var1;
- this.height = var2;
- this.availinfo |= 3;
- }
-
- public synchronized void setProperties(Hashtable var1) {
- this.properties = var1;
- this.availinfo |= 4;
- }
-
- public synchronized void setColorModel(ColorModel var1) {
- this.colormodel = var1;
- }
-
- public synchronized void setHints(int var1) {
- this.hints = var1;
- }
-
- protected void recordPixels(int var1, int var2, int var3, int var4) {
- this.numlines = Math.max(this.numlines, var2 + var4);
- if ((this.hints & 2) == 0) {
- if (this.seen == null) {
- this.seen = new boolean[this.height];
- }
-
- for(int var5 = 0; var5 < var4; ++var5) {
- this.seen[var2 + var5] = true;
- }
- }
-
- }
-
- public synchronized boolean setPixels(int var1, int var2, int var3, int var4, byte[] var5, int var6, int var7) {
- this.recordPixels(var1, var2, var3, var4);
- Object[] var8 = ((Ref)this).get();
- if (var8 != null) {
- int var9 = var6;
-
- for(int var10 = var2; var10 < var2 + var4; ++var10) {
- byte[] var11 = (byte[])var8[var10];
- int var12 = this.offsets[var10] + var1;
- System.arraycopy(var5, var9, var11, var12, var3);
- var9 += var7;
- }
-
- this.availinfo |= 8;
- }
-
- return var8 != null;
- }
-
- public synchronized boolean setPixels(int var1, int var2, int var3, int var4, int[] var5, int var6, int var7) {
- this.recordPixels(var1, var2, var3, var4);
- Object[] var8 = ((Ref)this).get();
- if (var8 != null) {
- int var9 = var6;
-
- for(int var10 = var2; var10 < var2 + var4; ++var10) {
- int[] var11 = (int[])var8[var10];
- int var12 = this.offsets[var10] + var1;
- System.arraycopy(var5, var9, var11, var12, var3);
- var9 += var7;
- }
-
- this.availinfo |= 8;
- }
-
- return var8 != null;
- }
-
- public synchronized void imageComplete() {
- if (((Ref)this).get() != null && this.bit_state == 1) {
- this.hints = 30;
- this.availinfo |= 32;
- }
-
- }
-
- public synchronized int getWidth() {
- return this.width;
- }
-
- public synchronized int getHeight() {
- return this.height;
- }
-
- public synchronized ColorModel getColorModel() {
- return this.colormodel;
- }
-
- public synchronized int getBitState() {
- if (this.bit_state == 1 && this.numlines > 0) {
- ((Ref)this).get();
- }
-
- return this.bit_state;
- }
-
- abstract void replayLines(ImageConsumer var1, int var2, int var3, Object var4);
-
- public synchronized boolean replay(ImageProducer var1, ImageConsumer var2) {
- return this.replay(var1, var2, true);
- }
-
- public synchronized boolean replay(ImageProducer var1, ImageConsumer var2, boolean var3) {
- if (var3 && (this.availinfo & 1) != 0 && (this.availinfo & 2) != 0) {
- var2.setDimensions(this.width, this.height);
- if (!var1.isConsumer(var2)) {
- return true;
- }
- }
-
- if (var3 && (this.availinfo & 4) != 0) {
- var2.setProperties(this.properties);
- }
-
- if (var3 && this.colormodel != null) {
- var2.setColorModel(this.colormodel);
- if (!var1.isConsumer(var2)) {
- return true;
- }
- }
-
- if (this.hints != 0) {
- var2.setHints(this.hints & 30);
- if (!var1.isConsumer(var2)) {
- return true;
- }
- }
-
- Object[] var4 = null;
- if (this.bit_state == 1 && this.numlines > 0) {
- var4 = ((Ref)this).get();
- }
-
- if (this.bit_state == 2) {
- return false;
- } else {
- Thread var5 = Thread.currentThread();
- if (ImageFetcher.isFetcher(var5) && var5.getPriority() > 3) {
- var5.setPriority(3);
- }
-
- if (var4 != null) {
- Object var6 = null;
- int var7 = 0;
-
- for(int var8 = 0; var8 < this.numlines; ++var8) {
- if (this.seen != null && !this.seen[var8]) {
- if (var6 != null) {
- this.replayLines(var2, var8 - var7, var7, var6);
- if (!var1.isConsumer(var2)) {
- return true;
- }
-
- var6 = null;
- var7 = 0;
- }
- } else {
- Object var9 = var4[var8];
- if (var6 != var9 && var6 != null) {
- this.replayLines(var2, var8 - var7, var7, var6);
- if (!var1.isConsumer(var2)) {
- return true;
- }
-
- var7 = 0;
- }
-
- var6 = var9;
- ++var7;
- }
- }
-
- if (var6 != null) {
- this.replayLines(var2, this.numlines - var7, var7, var6);
- if (!var1.isConsumer(var2)) {
- return true;
- }
- }
- }
-
- if (var3 && this.bit_state == 1 && (this.availinfo & 32) != 0) {
- var2.imageComplete(3);
- }
-
- return true;
- }
- }
-
- abstract Object allocateLines(int var1);
-
- public Object reconstitute() {
- Object[] var1 = null;
- if (this.bit_state == 0) {
- if ((this.availinfo & 2) == 0 || (this.availinfo & 1) == 0 || this.colormodel == null) {
- return null;
- }
-
- this.bit_state = 1;
- var1 = new Object[this.height];
- this.offsets = new int[this.height];
- int var2 = 0;
-
- while(var2 < this.height) {
- int var3 = this.height - var2;
- Object var4 = null;
-
- while(var4 == null && var3 > 0) {
- try {
- var4 = this.allocateLines(var3);
- if (var4 == null) {
- break;
- }
- } catch (OutOfMemoryError var6) {
- var4 = null;
- var3 /= 2;
- }
- }
-
- if (var4 == null) {
- this.bit_state = 2;
- return null;
- }
-
- for(int var5 = 0; var3 > 0; --var3) {
- var1[var2] = var4;
- this.offsets[var2] = var5;
- var5 += this.width;
- ++var2;
- }
- }
- } else if (this.bit_state == 1) {
- this.bit_state = 2;
- }
-
- return var1;
- }
- }
-