819dd4d3f2f83d8ec6b93063f39a24914a5df0ca
[jalviewjs.git] / site / swingjs / j2s / javax / swing / RepaintManager.js
1 Clazz.declarePackage ("javax.swing");\r
2 Clazz.load (["java.util.HashMap", "java.awt.Rectangle"], "javax.swing.RepaintManager", ["java.lang.StringBuffer", "$.Thread", "java.util.ArrayList", "$.HashSet", "$.IdentityHashMap", "java.applet.Applet", "java.awt.Frame", "$.Toolkit", "$.Window", "java.awt.event.InvocationEvent", "javax.swing.CellRendererPane", "$.JComponent", "$.SwingUtilities", "jssun.awt.AWTAccessor", "$.AppContext", "$.SunToolkit", "swingjs.JSToolkit"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.volatileMap = null;\r
5 this.hwDirtyComponents = null;\r
6 this.dirtyComponents = null;\r
7 this.tmpDirtyComponents = null;\r
8 this.invalidComponents = null;\r
9 this.runnableList = null;\r
10 this.paintDepth = 0;\r
11 this.painting = false;\r
12 this.repaintRoot = null;\r
13 this.paintThread = null;\r
14 this.processingRunnable = null;\r
15 this.myComponent = null;\r
16 this.tmp = null;\r
17 if (!Clazz.isClassDefined ("javax.swing.RepaintManager.ProcessingRunnable")) {\r
18 javax.swing.RepaintManager.$RepaintManager$ProcessingRunnable$ ();\r
19 }\r
20 Clazz.instantialize (this, arguments);\r
21 }, javax.swing, "RepaintManager");\r
22 Clazz.prepareFields (c$, function () {\r
23 this.volatileMap =  new java.util.HashMap (1);\r
24 this.tmp =  new java.awt.Rectangle ();\r
25 });\r
26 c$.currentManager = Clazz.defineMethod (c$, "currentManager", \r
27 function (c) {\r
28 var appContext = jssun.awt.AppContext.getAppContext ();\r
29 var rm = appContext.get (javax.swing.RepaintManager.repaintManagerKey);\r
30 if (rm == null) {\r
31 rm =  new javax.swing.RepaintManager ();\r
32 rm.set (c);\r
33 appContext.put (javax.swing.RepaintManager.repaintManagerKey, rm);\r
34 }return rm;\r
35 }, "java.awt.Component");\r
36 c$.setCurrentManager = Clazz.defineMethod (c$, "setCurrentManager", \r
37 function (aRepaintManager) {\r
38 if (aRepaintManager != null) {\r
39 javax.swing.SwingUtilities.appContextPut (javax.swing.RepaintManager.repaintManagerKey, aRepaintManager);\r
40 } else {\r
41 javax.swing.SwingUtilities.appContextRemove (javax.swing.RepaintManager.repaintManagerKey);\r
42 }}, "javax.swing.RepaintManager");\r
43 Clazz.makeConstructor (c$, \r
44  function () {\r
45 this.processingRunnable = Clazz.innerTypeInstance (javax.swing.RepaintManager.ProcessingRunnable, this, null);\r
46 });\r
47 Clazz.defineMethod (c$, "set", \r
48  function (c) {\r
49 this.myComponent = c;\r
50 this.dirtyComponents =  new java.util.IdentityHashMap ();\r
51 this.tmpDirtyComponents =  new java.util.IdentityHashMap ();\r
52 this.hwDirtyComponents =  new java.util.IdentityHashMap ();\r
53 }, "java.awt.Component");\r
54 Clazz.defineMethod (c$, "addInvalidComponent", \r
55 function (invalidComponent) {\r
56 var validateRoot = null;\r
57 for (var c = invalidComponent; c != null; c = c.getParent ()) {\r
58 if ((Clazz.instanceOf (c, javax.swing.CellRendererPane))) {\r
59 return;\r
60 }if ((Clazz.instanceOf (c, javax.swing.JComponent)) && ((c).isValidateRoot ())) {\r
61 validateRoot = c;\r
62 break;\r
63 }}\r
64 if (validateRoot == null) {\r
65 return;\r
66 }var root = null;\r
67 for (var c = validateRoot; c != null; c = c.getParent ()) {\r
68 if (!c.isVisible ()) {\r
69 return;\r
70 }if ((Clazz.instanceOf (c, java.awt.Window)) || (Clazz.instanceOf (c, java.applet.Applet))) {\r
71 root = c;\r
72 break;\r
73 }}\r
74 if (root == null) {\r
75 return;\r
76 }if (this.invalidComponents == null) {\r
77 this.invalidComponents =  new java.util.ArrayList ();\r
78 } else {\r
79 var n = this.invalidComponents.size ();\r
80 for (var i = 0; i < n; i++) {\r
81 if (validateRoot === this.invalidComponents.get (i)) {\r
82 return;\r
83 }}\r
84 }this.invalidComponents.add (validateRoot);\r
85 this.scheduleProcessingRunnable (root);\r
86 }, "javax.swing.JComponent");\r
87 Clazz.defineMethod (c$, "removeInvalidComponent", \r
88 function (component) {\r
89 if (this.invalidComponents != null) {\r
90 var index = this.invalidComponents.indexOf (component);\r
91 if (index != -1) {\r
92 this.invalidComponents.remove (index);\r
93 }}}, "javax.swing.JComponent");\r
94 Clazz.defineMethod (c$, "addDirtyRegion0", \r
95  function (c, x, y, w, h) {\r
96 {\r
97 var g = c.getGraphics();\r
98 if (g == null || g.gc == null)return;\r
99 }if ((w <= 0) || (h <= 0) || (c == null)) {\r
100 return;\r
101 }if ((c.getWidth () <= 0) || (c.getHeight () <= 0)) {\r
102 return;\r
103 }if (this.extendDirtyRegion (c, x, y, w, h)) {\r
104 return;\r
105 }var root = null;\r
106 for (var p = c; p != null; p = p.getParent ()) {\r
107 if (!p.isVisible () || p.getPeer () == null) {\r
108 return;\r
109 }if ((Clazz.instanceOf (p, java.awt.Window)) || (Clazz.instanceOf (p, java.applet.Applet))) {\r
110 if (Clazz.instanceOf (p, java.awt.Frame) && ((p).getExtendedState () & 1) == 1) {\r
111 return;\r
112 }root = p;\r
113 break;\r
114 }}\r
115 if (root == null) return;\r
116 {\r
117 if (this.extendDirtyRegion (c, x, y, w, h)) {\r
118 return;\r
119 }this.dirtyComponents.put (c,  new java.awt.Rectangle (x, y, w, h));\r
120 }this.scheduleProcessingRunnable (c);\r
121 }, "java.awt.Container,~N,~N,~N,~N");\r
122 Clazz.defineMethod (c$, "addDirtyRegion", \r
123 function (c, x, y, w, h) {\r
124 this.addDirtyRegion0 (c, x, y, w, h);\r
125 }, "javax.swing.JComponent,~N,~N,~N,~N");\r
126 Clazz.defineMethod (c$, "addDirtyRegion", \r
127 function (window, x, y, w, h) {\r
128 this.addDirtyRegion0 (window, x, y, w, h);\r
129 }, "java.awt.Window,~N,~N,~N,~N");\r
130 Clazz.defineMethod (c$, "addDirtyRegion", \r
131 function (applet, x, y, w, h) {\r
132 this.addDirtyRegion0 (applet, x, y, w, h);\r
133 }, "java.applet.Applet,~N,~N,~N,~N");\r
134 Clazz.defineMethod (c$, "scheduleHeavyWeightPaints", \r
135 function () {\r
136 var hws;\r
137 {\r
138 if (this.hwDirtyComponents.size () == 0) {\r
139 return;\r
140 }hws = this.hwDirtyComponents;\r
141 this.hwDirtyComponents =  new java.util.IdentityHashMap ();\r
142 }for (var hw, $hw = hws.keySet ().iterator (); $hw.hasNext () && ((hw = $hw.next ()) || true);) {\r
143 var dirty = hws.get (hw);\r
144 if (Clazz.instanceOf (hw, java.awt.Window)) {\r
145 this.addDirtyRegion (hw, dirty.x, dirty.y, dirty.width, dirty.height);\r
146 } else if (Clazz.instanceOf (hw, java.applet.Applet)) {\r
147 this.addDirtyRegion (hw, dirty.x, dirty.y, dirty.width, dirty.height);\r
148 } else {\r
149 this.addDirtyRegion0 (hw, dirty.x, dirty.y, dirty.width, dirty.height);\r
150 }}\r
151 });\r
152 Clazz.defineMethod (c$, "nativeAddDirtyRegion", \r
153 function (appContext, c, x, y, w, h) {\r
154 if (w > 0 && h > 0) {\r
155 {\r
156 var dirty = this.hwDirtyComponents.get (c);\r
157 if (dirty == null) {\r
158 this.hwDirtyComponents.put (c,  new java.awt.Rectangle (x, y, w, h));\r
159 } else {\r
160 this.hwDirtyComponents.put (c, javax.swing.SwingUtilities.computeUnion (x, y, w, h, dirty));\r
161 }}this.scheduleProcessingRunnable (appContext);\r
162 }}, "jssun.awt.AppContext,java.awt.Container,~N,~N,~N,~N");\r
163 Clazz.defineMethod (c$, "extendDirtyRegion", \r
164  function (c, x, y, w, h) {\r
165 var r = this.dirtyComponents.get (c);\r
166 if (r != null) {\r
167 javax.swing.SwingUtilities.computeUnion (x, y, w, h, r);\r
168 return true;\r
169 }return false;\r
170 }, "java.awt.Component,~N,~N,~N,~N");\r
171 Clazz.defineMethod (c$, "getDirtyRegion", \r
172 function (aComponent) {\r
173 var r = null;\r
174 {\r
175 r = this.dirtyComponents.get (aComponent);\r
176 }if (r == null) return  new java.awt.Rectangle (0, 0, 0, 0);\r
177  else return  new java.awt.Rectangle (r);\r
178 }, "javax.swing.JComponent");\r
179 Clazz.defineMethod (c$, "markCompletelyDirty", \r
180 function (aComponent) {\r
181 this.addDirtyRegion (aComponent, 0, 0, 2147483647, 2147483647);\r
182 }, "javax.swing.JComponent");\r
183 Clazz.defineMethod (c$, "markCompletelyClean", \r
184 function (aComponent) {\r
185 {\r
186 this.dirtyComponents.remove (aComponent);\r
187 }}, "javax.swing.JComponent");\r
188 Clazz.defineMethod (c$, "isCompletelyDirty", \r
189 function (aComponent) {\r
190 var r;\r
191 r = this.getDirtyRegion (aComponent);\r
192 if (r.width == 2147483647 && r.height == 2147483647) return true;\r
193  else return false;\r
194 }, "javax.swing.JComponent");\r
195 Clazz.defineMethod (c$, "validateInvalidComponents", \r
196 function () {\r
197 var ic;\r
198 {\r
199 if (this.invalidComponents == null) {\r
200 return;\r
201 }ic = this.invalidComponents;\r
202 this.invalidComponents = null;\r
203 }var n = ic.size ();\r
204 for (var i = 0; i < n; i++) {\r
205 var c = ic.get (i);\r
206 c.validate ();\r
207 }\r
208 });\r
209 Clazz.defineMethod (c$, "prePaintDirtyRegions", \r
210  function () {\r
211 var dirtyComponents;\r
212 var runnableList;\r
213 {\r
214 dirtyComponents = this.dirtyComponents;\r
215 runnableList = this.runnableList;\r
216 this.runnableList = null;\r
217 }if (runnableList != null) {\r
218 for (var runnable, $runnable = runnableList.iterator (); $runnable.hasNext () && ((runnable = $runnable.next ()) || true);) {\r
219 runnable.run ();\r
220 }\r
221 }this.paintDirtyRegions ();\r
222 if (dirtyComponents.size () > 0) {\r
223 this.paintDirtyRegions1 (dirtyComponents);\r
224 }});\r
225 Clazz.defineMethod (c$, "updateWindows", \r
226  function (dirtyComponents) {\r
227 var toolkit = java.awt.Toolkit.getDefaultToolkit ();\r
228 if (!(Clazz.instanceOf (toolkit, jssun.awt.SunToolkit) && (toolkit).needUpdateWindow ())) {\r
229 return dirtyComponents;\r
230 }var windows =  new java.util.HashSet ();\r
231 var dirtyComps = dirtyComponents.keySet ();\r
232 for (var it = dirtyComps.iterator (); it.hasNext (); ) {\r
233 var dirty = it.next ();\r
234 var window = Clazz.instanceOf (dirty, java.awt.Window) ? dirty : javax.swing.SwingUtilities.getWindowAncestor (dirty);\r
235 if (window != null && !jssun.awt.AWTAccessor.getWindowAccessor ().isOpaque (window)) {\r
236 it.remove ();\r
237 windows.add (window);\r
238 }}\r
239 for (var window, $window = windows.iterator (); $window.hasNext () && ((window = $window.next ()) || true);) {\r
240 jssun.awt.AWTAccessor.getWindowAccessor ().updateWindow (window, null);\r
241 }\r
242 return dirtyComponents;\r
243 }, "java.util.Map");\r
244 Clazz.defineMethod (c$, "paintDirtyRegions", \r
245 function () {\r
246 {\r
247 var tmp = this.tmpDirtyComponents;\r
248 this.tmpDirtyComponents = this.dirtyComponents;\r
249 this.dirtyComponents = tmp;\r
250 this.dirtyComponents.clear ();\r
251 }this.paintDirtyRegions1 (this.tmpDirtyComponents);\r
252 });\r
253 Clazz.defineMethod (c$, "paintDirtyRegions1", \r
254  function (tmpDirtyComponents) {\r
255 if (tmpDirtyComponents.isEmpty ()) {\r
256 return;\r
257 }this.updateWindows (tmpDirtyComponents);\r
258 var roots =  new java.util.ArrayList (tmpDirtyComponents.size ());\r
259 for (var dirty, $dirty = tmpDirtyComponents.keySet ().iterator (); $dirty.hasNext () && ((dirty = $dirty.next ()) || true);) {\r
260 this.collectDirtyComponents (tmpDirtyComponents, dirty, roots);\r
261 }\r
262 var count = roots.size ();\r
263 this.painting = true;\r
264 try {\r
265 for (var j = 0; j < count; j++) {\r
266 var i = j;\r
267 var dirtyComponent = roots.get (j);\r
268 var rect = tmpDirtyComponents.get (dirtyComponent);\r
269 var localBoundsH = dirtyComponent.getHeight ();\r
270 var localBoundsW = dirtyComponent.getWidth ();\r
271 javax.swing.SwingUtilities.computeIntersection (0, 0, localBoundsW, localBoundsH, rect);\r
272 if (Clazz.instanceOf (dirtyComponent, javax.swing.JComponent)) {\r
273 (dirtyComponent).paintImmediately (rect.x, rect.y, rect.width, rect.height);\r
274 } else if (dirtyComponent.isShowing ()) {\r
275 var g = javax.swing.JComponent.safelyGetGraphics (dirtyComponent, dirtyComponent);\r
276 if (g != null) {\r
277 try {\r
278 dirtyComponent.paint (g);\r
279 } finally {\r
280 g.dispose ();\r
281 }\r
282 }}if (this.repaintRoot != null) {\r
283 this.adjustRoots (this.repaintRoot, roots, i + 1);\r
284 count = roots.size ();\r
285 this.repaintRoot.paintImmediately (0, 0, this.repaintRoot.getWidth (), this.repaintRoot.getHeight ());\r
286 this.repaintRoot = null;\r
287 }}\r
288 } finally {\r
289 this.painting = false;\r
290 }\r
291 tmpDirtyComponents.clear ();\r
292 }, "java.util.Map");\r
293 Clazz.defineMethod (c$, "adjustRoots", \r
294  function (root, roots, index) {\r
295 for (var i = roots.size () - 1; i >= index; i--) {\r
296 var c = roots.get (i);\r
297 for (; ; ) {\r
298 if (c === root || c == null || !(Clazz.instanceOf (c, javax.swing.JComponent))) {\r
299 break;\r
300 }c = c.getParent ();\r
301 }\r
302 if (c === root) {\r
303 roots.remove (i);\r
304 }}\r
305 }, "javax.swing.JComponent,java.util.List,~N");\r
306 Clazz.defineMethod (c$, "collectDirtyComponents", \r
307 function (dirtyComponents, dirtyComponent, roots) {\r
308 var dx;\r
309 var dy;\r
310 var rootDx;\r
311 var rootDy;\r
312 var component;\r
313 var rootDirtyComponent;\r
314 var parent;\r
315 component = rootDirtyComponent = dirtyComponent;\r
316 var x = dirtyComponent.getX ();\r
317 var y = dirtyComponent.getY ();\r
318 var w = dirtyComponent.getWidth ();\r
319 var h = dirtyComponent.getHeight ();\r
320 dx = rootDx = 0;\r
321 dy = rootDy = 0;\r
322 this.tmp.setBounds (dirtyComponents.get (dirtyComponent));\r
323 javax.swing.SwingUtilities.computeIntersection (0, 0, w, h, this.tmp);\r
324 if (this.tmp.isEmpty ()) {\r
325 return;\r
326 }for (; ; ) {\r
327 if (!(Clazz.instanceOf (component, javax.swing.JComponent))) break;\r
328 parent = component.getParent ();\r
329 if (parent == null) break;\r
330 component = parent;\r
331 dx += x;\r
332 dy += y;\r
333 this.tmp.setLocation (this.tmp.x + x, this.tmp.y + y);\r
334 x = component.getX ();\r
335 y = component.getY ();\r
336 w = component.getWidth ();\r
337 h = component.getHeight ();\r
338 this.tmp = javax.swing.SwingUtilities.computeIntersection (0, 0, w, h, this.tmp);\r
339 if (this.tmp.isEmpty ()) {\r
340 return;\r
341 }if (dirtyComponents.get (component) != null) {\r
342 rootDirtyComponent = component;\r
343 rootDx = dx;\r
344 rootDy = dy;\r
345 }}\r
346 if (dirtyComponent !== rootDirtyComponent) {\r
347 var r;\r
348 this.tmp.setLocation (this.tmp.x + rootDx - dx, this.tmp.y + rootDy - dy);\r
349 r = dirtyComponents.get (rootDirtyComponent);\r
350 javax.swing.SwingUtilities.computeUnion (this.tmp.x, this.tmp.y, this.tmp.width, this.tmp.height, r);\r
351 }if (!roots.contains (rootDirtyComponent)) roots.add (rootDirtyComponent);\r
352 }, "java.util.Map,java.awt.Component,java.util.List");\r
353 Clazz.overrideMethod (c$, "toString", \r
354 function () {\r
355 var sb =  new StringBuffer ();\r
356 if (this.dirtyComponents != null) sb.append ("" + this.dirtyComponents);\r
357 return sb.toString ();\r
358 });\r
359 Clazz.defineMethod (c$, "getOffscreenBuffer", \r
360 function (c, proposedWidth, proposedHeight) {\r
361 return null;\r
362 }, "java.awt.Component,~N,~N");\r
363 Clazz.defineMethod (c$, "getVolatileOffscreenBuffer", \r
364 function (c, proposedWidth, proposedHeight) {\r
365 var config = c.getGraphicsConfiguration ();\r
366 var maxSize = this.getDoubleBufferMaximumSize ();\r
367 var width = proposedWidth < 1 ? 1 : (proposedWidth > maxSize.width ? maxSize.width : proposedWidth);\r
368 var height = proposedHeight < 1 ? 1 : (proposedHeight > maxSize.height ? maxSize.height : proposedHeight);\r
369 var image = this.volatileMap.get (config);\r
370 if (image == null || image.getWidth () < width || image.getHeight () < height) {\r
371 if (image != null) {\r
372 image.flush ();\r
373 }image = config.createCompatibleVolatileImage (width, height);\r
374 this.volatileMap.put (config, image);\r
375 }return image;\r
376 }, "java.awt.Component,~N,~N");\r
377 Clazz.defineMethod (c$, "setDoubleBufferMaximumSize", \r
378 function (d) {\r
379 }, "java.awt.Dimension");\r
380 Clazz.defineMethod (c$, "getDoubleBufferMaximumSize", \r
381 function () {\r
382 return null;\r
383 });\r
384 Clazz.defineMethod (c$, "setDoubleBufferingEnabled", \r
385 function (aFlag) {\r
386 }, "~B");\r
387 Clazz.defineMethod (c$, "resetDoubleBuffer", \r
388 function () {\r
389 });\r
390 Clazz.defineMethod (c$, "resetVolatileDoubleBuffer", \r
391 function (gc) {\r
392 var image = this.volatileMap.remove (gc);\r
393 if (image != null) {\r
394 image.flush ();\r
395 }}, "java.awt.GraphicsConfiguration");\r
396 Clazz.defineMethod (c$, "useVolatileDoubleBuffer", \r
397 function () {\r
398 return javax.swing.RepaintManager.volatileImageBufferEnabled;\r
399 });\r
400 Clazz.defineMethod (c$, "isPaintingThread", \r
401  function () {\r
402 return (Thread.currentThread () === this.paintThread);\r
403 });\r
404 Clazz.defineMethod (c$, "paint", \r
405 function (paintingComponent, bufferComponent, g, x, y, w, h) {\r
406 paintingComponent.paintToOffscreen (g, x, y, w, h, x + w, y + h);\r
407 }, "javax.swing.JComponent,javax.swing.JComponent,java.awt.Graphics,~N,~N,~N,~N");\r
408 Clazz.defineMethod (c$, "beginPaint", \r
409 function () {\r
410 var multiThreadedPaint = false;\r
411 var paintDepth = 0;\r
412 var currentThread = Thread.currentThread ();\r
413 {\r
414 paintDepth = this.paintDepth;\r
415 if (this.paintThread == null || currentThread === this.paintThread) {\r
416 this.paintThread = currentThread;\r
417 this.paintDepth++;\r
418 } else {\r
419 multiThreadedPaint = true;\r
420 }}});\r
421 Clazz.defineMethod (c$, "endPaint", \r
422 function () {\r
423 if (this.isPaintingThread ()) {\r
424 }});\r
425 Clazz.defineMethod (c$, "doubleBufferingChanged", \r
426 function (rootPane) {\r
427 }, "javax.swing.JRootPane");\r
428 Clazz.defineMethod (c$, "scheduleProcessingRunnable", \r
429  function (c) {\r
430 this.scheduleProcessingRunnable (c.getAppContext ());\r
431 }, "java.awt.Component");\r
432 Clazz.defineMethod (c$, "scheduleProcessingRunnable", \r
433  function (context) {\r
434 if (this.processingRunnable.markPending ()) {\r
435 jssun.awt.SunToolkit.getSystemEventQueueImplPP (context).postEvent ( new java.awt.event.InvocationEvent (java.awt.Toolkit.getDefaultToolkit (), this.processingRunnable));\r
436 }}, "jssun.awt.AppContext");\r
437 c$.$RepaintManager$ProcessingRunnable$ = function () {\r
438 Clazz.pu$h(self.c$);\r
439 c$ = Clazz.decorateAsClass (function () {\r
440 Clazz.prepareCallback (this, arguments);\r
441 this.pending = false;\r
442 Clazz.instantialize (this, arguments);\r
443 }, javax.swing.RepaintManager, "ProcessingRunnable", null, Runnable);\r
444 Clazz.defineMethod (c$, "markPending", \r
445 function () {\r
446 if (!this.pending) {\r
447 this.pending = true;\r
448 return true;\r
449 }return false;\r
450 });\r
451 Clazz.overrideMethod (c$, "run", \r
452 function () {\r
453 {\r
454 this.pending = false;\r
455 }this.b$["javax.swing.RepaintManager"].scheduleHeavyWeightPaints ();\r
456 this.b$["javax.swing.RepaintManager"].validateInvalidComponents ();\r
457 this.b$["javax.swing.RepaintManager"].prePaintDirtyRegions ();\r
458 swingjs.JSToolkit.forceRepaint (this.b$["javax.swing.RepaintManager"].myComponent);\r
459 });\r
460 c$ = Clazz.p0p ();\r
461 };\r
462 Clazz.defineStatics (c$,\r
463 "HANDLE_TOP_LEVEL_PAINT", false);\r
464 c$.repaintManagerKey = c$.prototype.repaintManagerKey = javax.swing.RepaintManager;\r
465 Clazz.defineStatics (c$,\r
466 "volatileImageBufferEnabled", true);\r
467 {\r
468 javax.swing.RepaintManager.volatileImageBufferEnabled = false;\r
469 var headless = false;\r
470 if (javax.swing.RepaintManager.volatileImageBufferEnabled && headless) {\r
471 javax.swing.RepaintManager.volatileImageBufferEnabled = false;\r
472 }javax.swing.RepaintManager.HANDLE_TOP_LEVEL_PAINT = true;\r
473 }});\r