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