JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / java / awt / image / AffineTransformOp.js
1 Clazz.declarePackage ("java.awt.image");\r
2 Clazz.load (["java.awt.image.BufferedImageOp", "$.RasterOp"], "java.awt.image.AffineTransformOp", ["java.lang.IllegalArgumentException", "$.InternalError", "$.NullPointerException", "java.awt.AlphaComposite", "$.RenderingHints", "java.awt.geom.Rectangle2D", "java.awt.image.BufferedImage", "$.ImagingOpException", "$.RasterFormatException", "jssun.awt.image.ImagingLib"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.xform = null;\r
5 this.hints = null;\r
6 this.swingJStype = 'A';\r
7 this.interpolationType = 1;\r
8 Clazz.instantialize (this, arguments);\r
9 }, java.awt.image, "AffineTransformOp", null, [java.awt.image.BufferedImageOp, java.awt.image.RasterOp]);\r
10 Clazz.makeConstructor (c$, \r
11 function (xform, hints) {\r
12 this.validateTransform (xform);\r
13 this.xform = xform.clone ();\r
14 this.hints = hints;\r
15 if (hints != null) {\r
16 var value = hints.get (java.awt.RenderingHints.KEY_INTERPOLATION);\r
17 if (value == null) {\r
18 value = hints.get (java.awt.RenderingHints.KEY_RENDERING);\r
19 if (value === java.awt.RenderingHints.VALUE_RENDER_SPEED) {\r
20 this.interpolationType = 1;\r
21 } else if (value === java.awt.RenderingHints.VALUE_RENDER_QUALITY) {\r
22 this.interpolationType = 2;\r
23 }} else if (value === java.awt.RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR) {\r
24 this.interpolationType = 1;\r
25 } else if (value === java.awt.RenderingHints.VALUE_INTERPOLATION_BILINEAR) {\r
26 this.interpolationType = 2;\r
27 } else if (value === java.awt.RenderingHints.VALUE_INTERPOLATION_BICUBIC) {\r
28 this.interpolationType = 3;\r
29 }} else {\r
30 this.interpolationType = 1;\r
31 }}, "java.awt.geom.AffineTransform,java.awt.RenderingHints");\r
32 Clazz.makeConstructor (c$, \r
33 function (xform, interpolationType) {\r
34 this.validateTransform (xform);\r
35 this.xform = xform.clone ();\r
36 switch (interpolationType) {\r
37 case 1:\r
38 case 2:\r
39 case 3:\r
40 break;\r
41 default:\r
42 throw  new IllegalArgumentException ("Unknown interpolation type: " + interpolationType);\r
43 }\r
44 this.interpolationType = interpolationType;\r
45 }, "java.awt.geom.AffineTransform,~N");\r
46 Clazz.defineMethod (c$, "getInterpolationType", \r
47 function () {\r
48 return this.interpolationType;\r
49 });\r
50 Clazz.defineMethod (c$, "filter", \r
51 function (src, dst) {\r
52 if (src == null) {\r
53 throw  new NullPointerException ("src image is null");\r
54 }if (src === dst) {\r
55 throw  new IllegalArgumentException ("src image cannot be the same as the dst image");\r
56 }var srcCM = src.getColorModel ();\r
57 var dstCM;\r
58 var origDst = dst;\r
59 if (dst == null) {\r
60 dst = this.createCompatibleDestImage (src, null);\r
61 dstCM = srcCM;\r
62 origDst = dst;\r
63 } else {\r
64 dstCM = dst.getColorModel ();\r
65 if (srcCM.getColorSpace ().getType () != dstCM.getColorSpace ().getType ()) {\r
66 throw  new java.awt.image.ImagingOpException ("SwingJS: Unable to transform src image");\r
67 }}if (jssun.awt.image.ImagingLib.filter (this, src, dst) == null) {\r
68 throw  new java.awt.image.ImagingOpException ("Unable to transform src image");\r
69 } else if (origDst !== dst) {\r
70 var g = origDst.createGraphics ();\r
71 try {\r
72 g.setComposite (java.awt.AlphaComposite.Src);\r
73 g.drawImage (dst, 0, 0, null);\r
74 } finally {\r
75 g.dispose ();\r
76 }\r
77 }return origDst;\r
78 }, "java.awt.image.BufferedImage,java.awt.image.BufferedImage");\r
79 Clazz.defineMethod (c$, "filter", \r
80 function (src, dst) {\r
81 if (src == null) {\r
82 throw  new NullPointerException ("src image is null");\r
83 }if (dst == null) {\r
84 dst = this.createCompatibleDestRaster (src);\r
85 }if (src === dst) {\r
86 throw  new IllegalArgumentException ("src image cannot be the same as the dst image");\r
87 }if (src.getNumBands () != dst.getNumBands ()) {\r
88 throw  new IllegalArgumentException ("Number of src bands (" + src.getNumBands () + ") does not match number of " + " dst bands (" + dst.getNumBands () + ")");\r
89 }if (jssun.awt.image.ImagingLib.filter (this, src, dst) == null) {\r
90 throw  new java.awt.image.ImagingOpException ("Unable to transform src image");\r
91 }return dst;\r
92 }, "java.awt.image.Raster,java.awt.image.WritableRaster");\r
93 Clazz.defineMethod (c$, "getBounds2D", \r
94 function (src) {\r
95 return this.getBounds2D (src.getRaster ());\r
96 }, "java.awt.image.BufferedImage");\r
97 Clazz.defineMethod (c$, "getBounds2D", \r
98 function (src) {\r
99 var w = src.getWidth ();\r
100 var h = src.getHeight ();\r
101 var pts =  Clazz.newFloatArray (-1, [0, 0, w, 0, w, h, 0, h]);\r
102 this.xform.transform (pts, 0, pts, 0, 4);\r
103 var fmaxX = pts[0];\r
104 var fmaxY = pts[1];\r
105 var fminX = pts[0];\r
106 var fminY = pts[1];\r
107 for (var i = 2; i < 8; i += 2) {\r
108 if (pts[i] > fmaxX) {\r
109 fmaxX = pts[i];\r
110 } else if (pts[i] < fminX) {\r
111 fminX = pts[i];\r
112 }if (pts[i + 1] > fmaxY) {\r
113 fmaxY = pts[i + 1];\r
114 } else if (pts[i + 1] < fminY) {\r
115 fminY = pts[i + 1];\r
116 }}\r
117 return  new java.awt.geom.Rectangle2D.Float (fminX, fminY, fmaxX - fminX, fmaxY - fminY);\r
118 }, "java.awt.image.Raster");\r
119 Clazz.overrideMethod (c$, "createCompatibleDestImage", \r
120 function (src, destCM) {\r
121 var image;\r
122 var r = this.getBounds2D (src).getBounds ();\r
123 var w = r.x + r.width;\r
124 var h = r.y + r.height;\r
125 if (w <= 0) {\r
126 throw  new java.awt.image.RasterFormatException ("Transformed width (" + w + ") is less than or equal to 0.");\r
127 }if (h <= 0) {\r
128 throw  new java.awt.image.RasterFormatException ("Transformed height (" + h + ") is less than or equal to 0.");\r
129 }if (destCM == null) {\r
130 var cm = src.getColorModel ();\r
131 if (this.interpolationType != 1 && (cm.getTransparency () == 1)) {\r
132 image =  new java.awt.image.BufferedImage (w, h, 2);\r
133 } else {\r
134 image =  new java.awt.image.BufferedImage (cm, src.getRaster ().createCompatibleWritableRaster (w, h), cm.isAlphaPremultiplied (), null);\r
135 }} else {\r
136 image =  new java.awt.image.BufferedImage (destCM, destCM.createCompatibleWritableRaster (w, h), destCM.isAlphaPremultiplied (), null);\r
137 }return image;\r
138 }, "java.awt.image.BufferedImage,java.awt.image.ColorModel");\r
139 Clazz.overrideMethod (c$, "createCompatibleDestRaster", \r
140 function (src) {\r
141 var r = this.getBounds2D (src);\r
142 return src.createCompatibleWritableRaster (Clazz.doubleToInt (r.getX ()), Clazz.doubleToInt (r.getY ()), Clazz.doubleToInt (r.getWidth ()), Clazz.doubleToInt (r.getHeight ()));\r
143 }, "java.awt.image.Raster");\r
144 Clazz.overrideMethod (c$, "getPoint2D", \r
145 function (srcPt, dstPt) {\r
146 return this.xform.transform (srcPt, dstPt);\r
147 }, "java.awt.geom.Point2D,java.awt.geom.Point2D");\r
148 Clazz.defineMethod (c$, "getTransform", \r
149 function () {\r
150 return this.xform.clone ();\r
151 });\r
152 Clazz.overrideMethod (c$, "getRenderingHints", \r
153 function () {\r
154 if (this.hints == null) {\r
155 var val;\r
156 switch (this.interpolationType) {\r
157 case 1:\r
158 val = java.awt.RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR;\r
159 break;\r
160 case 2:\r
161 val = java.awt.RenderingHints.VALUE_INTERPOLATION_BILINEAR;\r
162 break;\r
163 case 3:\r
164 val = java.awt.RenderingHints.VALUE_INTERPOLATION_BICUBIC;\r
165 break;\r
166 default:\r
167 throw  new InternalError ("Unknown interpolation type " + this.interpolationType);\r
168 }\r
169 this.hints =  new java.awt.RenderingHints (java.awt.RenderingHints.KEY_INTERPOLATION, val);\r
170 }return this.hints;\r
171 });\r
172 Clazz.defineMethod (c$, "validateTransform", \r
173 function (xform) {\r
174 if (Math.abs (xform.getDeterminant ()) <= 4.9E-324) {\r
175 throw  new java.awt.image.ImagingOpException ("Unable to invert transform " + xform);\r
176 }}, "java.awt.geom.AffineTransform");\r
177 Clazz.defineStatics (c$,\r
178 "TYPE_NEAREST_NEIGHBOR", 1,\r
179 "TYPE_BILINEAR", 2,\r
180 "TYPE_BICUBIC", 3);\r
181 });\r