Merge branch 'master' of https://source.jalview.org/git/jalviewjs.git
[jalviewjs.git] / site / j2s / java / awt / image / PixelGrabber.js
1 Clazz.declarePackage ("java.awt.image");
2 Clazz.load (["java.awt.image.ImageConsumer"], "java.awt.image.PixelGrabber", ["java.awt.image.ColorModel", "swingjs.JSToolkit"], function () {
3 c$ = Clazz.decorateAsClass (function () {
4 this.producer = null;
5 this.dstX = 0;
6 this.dstY = 0;
7 this.dstW = 0;
8 this.dstH = 0;
9 this.imageModel = null;
10 this.bytePixels = null;
11 this.intPixels = null;
12 this.dstOff = 0;
13 this.dstScan = 0;
14 this.grabbing = false;
15 this.flags = 0;
16 Clazz.instantialize (this, arguments);
17 }, java.awt.image, "PixelGrabber", null, java.awt.image.ImageConsumer);
18 Clazz.makeConstructor (c$, 
19 function (img, x, y, w, h, pix, off, scansize) {
20 this.construct (img.getSource (), x, y, w, h, pix, off, scansize);
21 }, "java.awt.Image,~N,~N,~N,~N,~A,~N,~N");
22 Clazz.makeConstructor (c$, 
23 function (ip, x, y, w, h, pix, off, scansize) {
24 this.producer = ip;
25 this.dstX = x;
26 this.dstY = y;
27 this.dstW = w;
28 this.dstH = h;
29 this.dstOff = off;
30 this.dstScan = scansize;
31 this.intPixels = pix;
32 this.imageModel = java.awt.image.ColorModel.getRGBdefault ();
33 }, "java.awt.image.ImageProducer,~N,~N,~N,~N,~A,~N,~N");
34 Clazz.makeConstructor (c$, 
35 function (img, x, y, w, h, forceRGB) {
36 this.producer = img.getSource ();
37 this.dstX = x;
38 this.dstY = y;
39 this.dstW = w;
40 this.dstH = h;
41 if (forceRGB) {
42 this.imageModel = java.awt.image.ColorModel.getRGBdefault ();
43 }}, "java.awt.Image,~N,~N,~N,~N,~B");
44 Clazz.defineMethod (c$, "startGrabbing", 
45 function () {
46 if ((this.flags & 112) != 0) {
47 return;
48 }if (!this.grabbing) {
49 this.grabbing = true;
50 this.flags &= -129;
51 this.producer.startProduction (this);
52 }});
53 Clazz.defineMethod (c$, "abortGrabbing", 
54 function () {
55 this.imageComplete (4);
56 });
57 Clazz.defineMethod (c$, "grabPixels", 
58 function () {
59 return this.grabPixels (0);
60 });
61 Clazz.defineMethod (c$, "grabPixels", 
62 function (ms) {
63 if ((this.flags & 112) != 0) {
64 return (this.flags & 48) != 0;
65 }var end = ms + System.currentTimeMillis ();
66 if (!this.grabbing) {
67 this.grabbing = true;
68 this.flags &= -129;
69 this.producer.startProduction (this);
70 }while (this.grabbing) {
71 var timeout;
72 if (ms == 0) {
73 timeout = 0;
74 } else {
75 timeout = end - System.currentTimeMillis ();
76 if (timeout <= 0) {
77 break;
78 }}swingjs.JSToolkit.warn ("wait in PixelGrabber.grabPixels");
79 this.wait (timeout);
80 }
81 return (this.flags & 48) != 0;
82 }, "~N");
83 Clazz.defineMethod (c$, "getStatus", 
84 function () {
85 return this.flags;
86 });
87 Clazz.defineMethod (c$, "getWidth", 
88 function () {
89 return (this.dstW < 0) ? -1 : this.dstW;
90 });
91 Clazz.defineMethod (c$, "getHeight", 
92 function () {
93 return (this.dstH < 0) ? -1 : this.dstH;
94 });
95 Clazz.defineMethod (c$, "getPixels", 
96 function () {
97 return (this.bytePixels == null) ? (this.intPixels) : (this.bytePixels);
98 });
99 Clazz.defineMethod (c$, "getColorModel", 
100 function () {
101 return this.imageModel;
102 });
103 Clazz.overrideMethod (c$, "setDimensions", 
104 function (width, height) {
105 if (this.dstW < 0) {
106 this.dstW = width - this.dstX;
107 }if (this.dstH < 0) {
108 this.dstH = height - this.dstY;
109 }if (this.dstW <= 0 || this.dstH <= 0) {
110 this.imageComplete (3);
111 } else if (this.intPixels == null && this.imageModel === java.awt.image.ColorModel.getRGBdefault ()) {
112 this.intPixels =  Clazz.newIntArray (this.dstW * this.dstH, 0);
113 this.dstScan = this.dstW;
114 this.dstOff = 0;
115 }this.flags |= (3);
116 }, "~N,~N");
117 Clazz.overrideMethod (c$, "setHints", 
118 function (hints) {
119 return;
120 }, "~N");
121 Clazz.overrideMethod (c$, "setProperties", 
122 function (props) {
123 return;
124 }, "java.util.Hashtable");
125 Clazz.overrideMethod (c$, "setColorModel", 
126 function (model) {
127 return;
128 }, "java.awt.image.ColorModel");
129 Clazz.defineMethod (c$, "convertToRGB", 
130  function () {
131 var size = this.dstW * this.dstH;
132 var newpixels =  Clazz.newIntArray (size, 0);
133 if (this.bytePixels != null) {
134 for (var i = 0; i < size; i++) {
135 newpixels[i] = this.imageModel.getRGB (this.bytePixels[i] & 0xff);
136 }
137 } else if (this.intPixels != null) {
138 for (var i = 0; i < size; i++) {
139 newpixels[i] = this.imageModel.getRGB (this.intPixels[i]);
140 }
141 }this.bytePixels = null;
142 this.intPixels = newpixels;
143 this.dstScan = this.dstW;
144 this.dstOff = 0;
145 this.imageModel = java.awt.image.ColorModel.getRGBdefault ();
146 });
147 Clazz.defineMethod (c$, "setPixels", 
148 function (srcX, srcY, srcW, srcH, model, pixels, srcOff, srcScan) {
149 if (srcY < this.dstY) {
150 var diff = this.dstY - srcY;
151 if (diff >= srcH) {
152 return;
153 }srcOff += srcScan * diff;
154 srcY += diff;
155 srcH -= diff;
156 }if (srcY + srcH > this.dstY + this.dstH) {
157 srcH = (this.dstY + this.dstH) - srcY;
158 if (srcH <= 0) {
159 return;
160 }}if (srcX < this.dstX) {
161 var diff = this.dstX - srcX;
162 if (diff >= srcW) {
163 return;
164 }srcOff += diff;
165 srcX += diff;
166 srcW -= diff;
167 }if (srcX + srcW > this.dstX + this.dstW) {
168 srcW = (this.dstX + this.dstW) - srcX;
169 if (srcW <= 0) {
170 return;
171 }}var dstPtr = this.dstOff + (srcY - this.dstY) * this.dstScan + (srcX - this.dstX);
172 if (this.intPixels == null) {
173 if (this.bytePixels == null) {
174 this.bytePixels =  Clazz.newByteArray (this.dstW * this.dstH, 0);
175 this.dstScan = this.dstW;
176 this.dstOff = 0;
177 this.imageModel = model;
178 } else if (this.imageModel !== model) {
179 this.convertToRGB ();
180 }if (this.bytePixels != null) {
181 for (var h = srcH; h > 0; h--) {
182 System.arraycopy (pixels, srcOff, this.bytePixels, dstPtr, srcW);
183 srcOff += srcScan;
184 dstPtr += this.dstScan;
185 }
186 }}if (this.intPixels != null) {
187 var dstRem = this.dstScan - srcW;
188 var srcRem = srcScan - srcW;
189 for (var h = srcH; h > 0; h--) {
190 for (var w = srcW; w > 0; w--) {
191 this.intPixels[dstPtr++] = model.getRGB (pixels[srcOff++] & 0xff);
192 }
193 srcOff += srcRem;
194 dstPtr += dstRem;
195 }
196 }this.flags |= 8;
197 }, "~N,~N,~N,~N,java.awt.image.ColorModel,~A,~N,~N");
198 Clazz.defineMethod (c$, "setPixels", 
199 function (srcX, srcY, srcW, srcH, model, pixels, srcOff, srcScan) {
200 if (srcY < this.dstY) {
201 var diff = this.dstY - srcY;
202 if (diff >= srcH) {
203 return;
204 }srcOff += srcScan * diff;
205 srcY += diff;
206 srcH -= diff;
207 }if (srcY + srcH > this.dstY + this.dstH) {
208 srcH = (this.dstY + this.dstH) - srcY;
209 if (srcH <= 0) {
210 return;
211 }}if (srcX < this.dstX) {
212 var diff = this.dstX - srcX;
213 if (diff >= srcW) {
214 return;
215 }srcOff += diff;
216 srcX += diff;
217 srcW -= diff;
218 }if (srcX + srcW > this.dstX + this.dstW) {
219 srcW = (this.dstX + this.dstW) - srcX;
220 if (srcW <= 0) {
221 return;
222 }}if (this.intPixels == null) {
223 if (this.bytePixels == null) {
224 this.intPixels =  Clazz.newIntArray (this.dstW * this.dstH, 0);
225 this.dstScan = this.dstW;
226 this.dstOff = 0;
227 this.imageModel = model;
228 } else {
229 this.convertToRGB ();
230 }}var dstPtr = this.dstOff + (srcY - this.dstY) * this.dstScan + (srcX - this.dstX);
231 if (this.imageModel === model) {
232 for (var h = srcH; h > 0; h--) {
233 System.arraycopy (pixels, srcOff, this.intPixels, dstPtr, srcW);
234 srcOff += srcScan;
235 dstPtr += this.dstScan;
236 }
237 } else {
238 if (this.imageModel !== java.awt.image.ColorModel.getRGBdefault ()) {
239 this.convertToRGB ();
240 }var dstRem = this.dstScan - srcW;
241 var srcRem = srcScan - srcW;
242 for (var h = srcH; h > 0; h--) {
243 for (var w = srcW; w > 0; w--) {
244 this.intPixels[dstPtr++] = model.getRGB (pixels[srcOff++]);
245 }
246 srcOff += srcRem;
247 dstPtr += dstRem;
248 }
249 }this.flags |= 8;
250 }, "~N,~N,~N,~N,java.awt.image.ColorModel,~A,~N,~N");
251 Clazz.overrideMethod (c$, "imageComplete", 
252 function (status) {
253 this.grabbing = false;
254 switch (status) {
255 default:
256 case 1:
257 this.flags |= 192;
258 break;
259 case 4:
260 this.flags |= 128;
261 break;
262 case 3:
263 this.flags |= 32;
264 break;
265 case 2:
266 this.flags |= 16;
267 break;
268 }
269 this.producer.removeConsumer (this);
270 }, "~N");
271 Clazz.defineMethod (c$, "status", 
272 function () {
273 return this.flags;
274 });
275 Clazz.defineStatics (c$,
276 "GRABBEDBITS", (48),
277 "DONEBITS", (112));
278 });