Преглед изворни кода

LibWeb: Add DOMMatrix and DOMMatrixReadOnly fromMatrix

Bastiaan van der Plaat пре 1 година
родитељ
комит
ff1bcc694d

+ 2 - 0
Tests/LibWeb/Text/expected/geometry/dommatrix.txt

@@ -0,0 +1,2 @@
+1. {"a":10,"b":20,"c":30,"d":40,"e":50,"f":60,"m11":10,"m12":20,"m13":0,"m14":0,"m21":30,"m22":40,"m23":0,"m24":0,"m31":0,"m32":0,"m33":1,"m34":0,"m41":50,"m42":60,"m43":0,"m44":1,"is2D":true,"isIdentity":false}
+2. {"a":10,"b":20,"c":30,"d":40,"e":50,"f":60,"m11":10,"m12":20,"m13":0,"m14":0,"m21":30,"m22":40,"m23":0,"m24":0,"m31":0,"m32":0,"m33":1,"m34":0,"m41":50,"m42":60,"m43":0,"m44":1,"is2D":true,"isIdentity":false}

+ 15 - 0
Tests/LibWeb/Text/input/geometry/dommatrix.html

@@ -0,0 +1,15 @@
+<script src="../include.js"></script>
+<script>
+    test(() => {
+        let testCounter = 1;
+        function testPart(part) {
+            println(`${testCounter++}. ${JSON.stringify(part())}`);
+        }
+
+        // 1. Creating a DOMMatrix
+        testPart(() => new DOMMatrix([10, 20, 30, 40, 50, 60]));
+
+        // 2. Creating a DOMMatrix with fromMatrix
+        testPart(() => DOMMatrix.fromMatrix({ a: 10, b: 20, c: 30, d: 40, e: 50, f: 60 }));
+    });
+</script>

+ 6 - 0
Userland/Libraries/LibWeb/Geometry/DOMMatrix.cpp

@@ -73,6 +73,12 @@ void DOMMatrix::initialize(JS::Realm& realm)
     set_prototype(&Bindings::ensure_web_prototype<Bindings::DOMMatrixPrototype>(realm, "DOMMatrix"));
 }
 
+// https://drafts.fxtf.org/geometry/#dom-dommatrix-frommatrix
+WebIDL::ExceptionOr<JS::NonnullGCPtr<DOMMatrix>> DOMMatrix::from_matrix(JS::VM& vm, DOMMatrixInit other)
+{
+    return create_from_dom_matrix_2d_init(*vm.current_realm(), other);
+}
+
 // https://drafts.fxtf.org/geometry/#dom-dommatrixreadonly-m11
 void DOMMatrix::set_m11(double value)
 {

+ 2 - 0
Userland/Libraries/LibWeb/Geometry/DOMMatrix.h

@@ -21,6 +21,8 @@ public:
 
     virtual ~DOMMatrix() override;
 
+    static WebIDL::ExceptionOr<JS::NonnullGCPtr<DOMMatrix>> from_matrix(JS::VM&, DOMMatrixInit other = {});
+
     void set_m11(double value);
     void set_m12(double value);
     void set_m13(double value);

+ 1 - 1
Userland/Libraries/LibWeb/Geometry/DOMMatrix.idl

@@ -6,7 +6,7 @@
 interface DOMMatrix : DOMMatrixReadOnly {
     constructor(optional (DOMString or sequence<unrestricted double>) init);
 
-    // FIXME: [NewObject] static DOMMatrix fromMatrix(optional DOMMatrixInit other = {});
+    [NewObject] static DOMMatrix fromMatrix(optional DOMMatrixInit other = {});
     // FIXME: [NewObject] static DOMMatrix fromFloat32Array(Float32Array array32);
     // FIXME: [NewObject] static DOMMatrix fromFloat64Array(Float64Array array64);
 

+ 6 - 0
Userland/Libraries/LibWeb/Geometry/DOMMatrixReadOnly.cpp

@@ -180,6 +180,12 @@ void DOMMatrixReadOnly::initialize_from_create_3d_matrix(double m11, double m12,
     // 4. Return matrix
 }
 
+// https://drafts.fxtf.org/geometry/#dom-dommatrixreadonly-frommatrix
+WebIDL::ExceptionOr<JS::NonnullGCPtr<DOMMatrixReadOnly>> DOMMatrixReadOnly::from_matrix(JS::VM& vm, DOMMatrixInit& other)
+{
+    return create_from_dom_matrix_2d_init(*vm.current_realm(), other);
+}
+
 // https://drafts.fxtf.org/geometry/#dom-dommatrixreadonly-isidentity
 bool DOMMatrixReadOnly::is_identity() const
 {

+ 2 - 0
Userland/Libraries/LibWeb/Geometry/DOMMatrixReadOnly.h

@@ -53,6 +53,8 @@ public:
 
     virtual ~DOMMatrixReadOnly() override;
 
+    static WebIDL::ExceptionOr<JS::NonnullGCPtr<DOMMatrixReadOnly>> from_matrix(JS::VM&, DOMMatrixInit& other);
+
     // https://drafts.fxtf.org/geometry/#dommatrix-attributes
     double m11() const { return m_matrix.elements()[0][0]; }
     double m12() const { return m_matrix.elements()[1][0]; }

+ 1 - 1
Userland/Libraries/LibWeb/Geometry/DOMMatrixReadOnly.idl

@@ -6,7 +6,7 @@
 interface DOMMatrixReadOnly {
     constructor(optional (DOMString or sequence<unrestricted double>) init);
 
-    // FIXME: [NewObject] static DOMMatrixReadOnly fromMatrix(optional DOMMatrixInit other = {});
+    [NewObject] static DOMMatrixReadOnly fromMatrix(optional DOMMatrixInit other = {});
     // FIXME: [NewObject] static DOMMatrixReadOnly fromFloat32Array(Float32Array array32);
     // FIXME: [NewObject] static DOMMatrixReadOnly fromFloat64Array(Float64Array array64);