Skip to content

Commit bb88cc4

Browse files
committed
working on the DOMMatrx stuff
1 parent 34e3b9e commit bb88cc4

4 files changed

Lines changed: 958 additions & 19 deletions

File tree

src/main/java/org/htmlunit/javascript/host/dom/DOMMatrix.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
*/
1515
package org.htmlunit.javascript.host.dom;
1616

17+
import org.htmlunit.corejs.javascript.Context;
18+
import org.htmlunit.corejs.javascript.Function;
19+
import org.htmlunit.corejs.javascript.Scriptable;
1720
import org.htmlunit.javascript.configuration.JsxClass;
1821
import org.htmlunit.javascript.configuration.JsxConstructor;
1922
import org.htmlunit.javascript.configuration.JsxConstructorAlias;
@@ -29,11 +32,20 @@ public class DOMMatrix extends DOMMatrixReadOnly {
2932

3033
/**
3134
* JavaScript constructor.
35+
* @param cx the current context
36+
* @param scope the scope
37+
* @param args the arguments to the WebSocket constructor
38+
* @param ctorObj the function object
39+
* @param inNewExpr Is new or not
40+
* @return the java object to allow JavaScript to access
3241
*/
33-
@Override
3442
@JsxConstructor
3543
@JsxConstructorAlias(alias = "WebKitCSSMatrix")
36-
public void jsConstructor() {
37-
super.jsConstructor();
44+
public static DOMMatrix jsConstructor(final Context cx, final Scriptable scope,
45+
final Object[] args, final Function ctorObj, final boolean inNewExpr) {
46+
47+
final DOMMatrix matrix = new DOMMatrix();
48+
matrix.init(args, ctorObj);
49+
return matrix;
3850
}
3951
}

src/main/java/org/htmlunit/javascript/host/dom/DOMMatrixReadOnly.java

Lines changed: 332 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,17 @@
1414
*/
1515
package org.htmlunit.javascript.host.dom;
1616

17+
import org.htmlunit.corejs.javascript.Context;
18+
import org.htmlunit.corejs.javascript.Function;
19+
import org.htmlunit.corejs.javascript.FunctionObject;
20+
import org.htmlunit.corejs.javascript.NativeArray;
21+
import org.htmlunit.corejs.javascript.Scriptable;
1722
import org.htmlunit.javascript.HtmlUnitScriptable;
23+
import org.htmlunit.javascript.JavaScriptEngine;
1824
import org.htmlunit.javascript.configuration.JsxClass;
1925
import org.htmlunit.javascript.configuration.JsxConstructor;
26+
import org.htmlunit.javascript.configuration.JsxGetter;
27+
import org.htmlunit.javascript.host.Window;
2028

2129
/**
2230
* A JavaScript object for {@code DOMMatrixReadOnly}.
@@ -27,11 +35,333 @@
2735
@JsxClass
2836
public class DOMMatrixReadOnly extends HtmlUnitScriptable {
2937

38+
private double m11_;
39+
private double m12_;
40+
private double m13_;
41+
private double m14_;
42+
43+
private double m21_;
44+
private double m22_;
45+
private double m23_;
46+
private double m24_;
47+
48+
private double m31_;
49+
private double m32_;
50+
private double m33_;
51+
private double m34_;
52+
53+
private double m41_;
54+
private double m42_;
55+
private double m43_;
56+
private double m44_;
57+
58+
private boolean is2D_;
59+
3060
/**
3161
* JavaScript constructor.
62+
* @param cx the current context
63+
* @param scope the scope
64+
* @param args the arguments to the WebSocket constructor
65+
* @param ctorObj the function object
66+
* @param inNewExpr Is new or not
67+
* @return the java object to allow JavaScript to access
3268
*/
3369
@JsxConstructor
34-
public void jsConstructor() {
35-
// nothing to do
70+
public static DOMMatrixReadOnly jsConstructor(final Context cx, final Scriptable scope,
71+
final Object[] args, final Function ctorObj, final boolean inNewExpr) {
72+
73+
final DOMMatrixReadOnly matrix = new DOMMatrixReadOnly();
74+
matrix.init(args, ctorObj);
75+
return matrix;
76+
}
77+
78+
protected void init(final Object[] args, final Function ctorObj) {
79+
final Window window = getWindow(ctorObj);
80+
81+
if (args.length == 0 || JavaScriptEngine.isUndefined(args[0])) {
82+
setParentScope(window);
83+
setPrototype(((FunctionObject) ctorObj).getClassPrototype());
84+
85+
m11_ = 1;
86+
m12_ = 0;
87+
m13_ = 0;
88+
m14_ = 0;
89+
90+
m21_ = 0;
91+
m22_ = 1;
92+
m23_ = 0;
93+
m24_ = 0;
94+
95+
m31_ = 0;
96+
m32_ = 0;
97+
m33_ = 1;
98+
m34_ = 0;
99+
100+
m41_ = 0;
101+
m42_ = 0;
102+
m43_ = 0;
103+
m44_ = 1;
104+
105+
is2D_ = true;
106+
107+
return;
108+
}
109+
110+
if (args.length > 0) {
111+
if (args[0] instanceof NativeArray) {
112+
final NativeArray arrayArgs = (NativeArray) args[0];
113+
if (arrayArgs.getLength() == 6) {
114+
final DOMMatrixReadOnly matrix = new DOMMatrixReadOnly();
115+
setParentScope(window);
116+
setPrototype(((FunctionObject) ctorObj).getClassPrototype());
117+
118+
m11_ = JavaScriptEngine.toNumber(arrayArgs.get(0));
119+
m12_ = JavaScriptEngine.toNumber(arrayArgs.get(1));
120+
m13_ = 0;
121+
m14_ = 0;
122+
123+
m21_ = JavaScriptEngine.toNumber(arrayArgs.get(2));
124+
m22_ = JavaScriptEngine.toNumber(arrayArgs.get(3));
125+
m23_ = 0;
126+
m24_ = 0;
127+
128+
m31_ = 0;
129+
m32_ = 0;
130+
m33_ = 1;
131+
m34_ = 0;
132+
133+
m41_ = JavaScriptEngine.toNumber(arrayArgs.get(4));
134+
m42_ = JavaScriptEngine.toNumber(arrayArgs.get(5));
135+
m43_ = 0;
136+
m44_ = 1;
137+
138+
is2D_ = true;
139+
140+
return;
141+
}
142+
143+
if (arrayArgs.getLength() == 16) {
144+
final DOMMatrixReadOnly matrix = new DOMMatrixReadOnly();
145+
setParentScope(window);
146+
setPrototype(((FunctionObject) ctorObj).getClassPrototype());
147+
148+
m11_ = JavaScriptEngine.toNumber(arrayArgs.get(0));
149+
m12_ = JavaScriptEngine.toNumber(arrayArgs.get(1));
150+
m13_ = JavaScriptEngine.toNumber(arrayArgs.get(2));
151+
m14_ = JavaScriptEngine.toNumber(arrayArgs.get(3));
152+
153+
m21_ = JavaScriptEngine.toNumber(arrayArgs.get(4));
154+
m22_ = JavaScriptEngine.toNumber(arrayArgs.get(5));
155+
m23_ = JavaScriptEngine.toNumber(arrayArgs.get(6));
156+
m24_ = JavaScriptEngine.toNumber(arrayArgs.get(7));
157+
158+
m31_ = JavaScriptEngine.toNumber(arrayArgs.get(8));
159+
m32_ = JavaScriptEngine.toNumber(arrayArgs.get(9));
160+
m33_ = JavaScriptEngine.toNumber(arrayArgs.get(10));
161+
m34_ = JavaScriptEngine.toNumber(arrayArgs.get(11));
162+
163+
m41_ = JavaScriptEngine.toNumber(arrayArgs.get(12));
164+
m42_ = JavaScriptEngine.toNumber(arrayArgs.get(13));
165+
m43_ = JavaScriptEngine.toNumber(arrayArgs.get(14));
166+
m44_ = JavaScriptEngine.toNumber(arrayArgs.get(15));
167+
168+
is2D_ = false;
169+
170+
return;
171+
}
172+
173+
throw JavaScriptEngine.typeError("DOMMatrixReadOnly constructor: Matrix init sequence must have "
174+
+ "a length of 6 or 16 (actual value: " + arrayArgs.getLength() + ")");
175+
}
176+
}
177+
178+
throw JavaScriptEngine.asJavaScriptException(
179+
window,
180+
"An invalid or illegal string was specified",
181+
DOMException.SYNTAX_ERR);
182+
}
183+
184+
/**
185+
* @return m11
186+
*/
187+
@JsxGetter
188+
public double getM11() {
189+
return m11_;
190+
}
191+
192+
/**
193+
* @return a
194+
*/
195+
@JsxGetter
196+
public double getA() {
197+
return m11_;
198+
}
199+
200+
/**
201+
* @return m12
202+
*/
203+
@JsxGetter
204+
public double getM12() {
205+
return m12_;
206+
}
207+
208+
/**
209+
* @return b
210+
*/
211+
@JsxGetter
212+
public double getB() {
213+
return m12_;
214+
}
215+
216+
/**
217+
* @return m13
218+
*/
219+
@JsxGetter
220+
public double getM13() {
221+
return m13_;
222+
}
223+
224+
/**
225+
* @return m14
226+
*/
227+
@JsxGetter
228+
public double getM14() {
229+
return m14_;
230+
}
231+
232+
/**
233+
* @return m21
234+
*/
235+
@JsxGetter
236+
public double getM21() {
237+
return m21_;
238+
}
239+
240+
/**
241+
* @return c
242+
*/
243+
@JsxGetter
244+
public double getC() {
245+
return m21_;
246+
}
247+
248+
/**
249+
* @return m22
250+
*/
251+
@JsxGetter
252+
public double getM22() {
253+
return m22_;
254+
}
255+
256+
/**
257+
* @return d
258+
*/
259+
@JsxGetter
260+
public double getD() {
261+
return m22_;
262+
}
263+
264+
/**
265+
* @return m23
266+
*/
267+
@JsxGetter
268+
public double getM23() {
269+
return m23_;
270+
}
271+
272+
/**
273+
* @return m24
274+
*/
275+
@JsxGetter
276+
public double getM24() {
277+
return m24_;
278+
}
279+
280+
/**
281+
* @return m31
282+
*/
283+
@JsxGetter
284+
public double getM31() {
285+
return m31_;
286+
}
287+
288+
/**
289+
* @return m32
290+
*/
291+
@JsxGetter
292+
public double getM32() {
293+
return m32_;
294+
}
295+
296+
/**
297+
* @return m33
298+
*/
299+
@JsxGetter
300+
public double getM33() {
301+
return m33_;
302+
}
303+
304+
/**
305+
* @return m34
306+
*/
307+
@JsxGetter
308+
public double getM34() {
309+
return m34_;
310+
}
311+
312+
/**
313+
* @return m41
314+
*/
315+
@JsxGetter
316+
public double getM41() {
317+
return m41_;
318+
}
319+
320+
/**
321+
* @return e
322+
*/
323+
@JsxGetter
324+
public double getE() {
325+
return m41_;
326+
}
327+
328+
/**
329+
* @return m42
330+
*/
331+
@JsxGetter
332+
public double getM42() {
333+
return m42_;
334+
}
335+
336+
/**
337+
* @return f
338+
*/
339+
@JsxGetter
340+
public double getF() {
341+
return m42_;
342+
}
343+
344+
/**
345+
* @return m43
346+
*/
347+
@JsxGetter
348+
public double getM43() {
349+
return m43_;
350+
}
351+
352+
/**
353+
* @return m44
354+
*/
355+
@JsxGetter
356+
public double getM44() {
357+
return m44_;
358+
}
359+
360+
/**
361+
* @return is2d
362+
*/
363+
@JsxGetter
364+
public boolean getIs2D() {
365+
return is2D_;
36366
}
37367
}

0 commit comments

Comments
 (0)