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