/* * Copyright (c) 2023, Luke Wilde * Copyright (c) 2023, Bastiaan van der Plaat * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::Geometry { // https://drafts.fxtf.org/geometry/#dommatrix class DOMMatrix : public DOMMatrixReadOnly { WEB_PLATFORM_OBJECT(DOMMatrix, Bindings::PlatformObject); JS_DECLARE_ALLOCATOR(DOMMatrix); public: static WebIDL::ExceptionOr> construct_impl(JS::Realm&, Optional>> const& init); static WebIDL::ExceptionOr> create_from_dom_matrix_2d_init(JS::Realm&, DOMMatrix2DInit& init); static WebIDL::ExceptionOr> create_from_dom_matrix_init(JS::Realm&, DOMMatrixInit& init); static JS::NonnullGCPtr create_from_dom_matrix_read_only(JS::Realm&, DOMMatrixReadOnly const& read_only_matrix); static JS::NonnullGCPtr create(JS::Realm&); virtual ~DOMMatrix() override; static WebIDL::ExceptionOr> from_matrix(JS::VM&, DOMMatrixInit other = {}); static WebIDL::ExceptionOr> from_float32_array(JS::VM&, JS::Handle const& array32); static WebIDL::ExceptionOr> from_float64_array(JS::VM&, JS::Handle const& array64); void set_m11(double value); void set_m12(double value); void set_m13(double value); void set_m14(double value); void set_m21(double value); void set_m22(double value); void set_m23(double value); void set_m24(double value); void set_m31(double value); void set_m32(double value); void set_m33(double value); void set_m34(double value); void set_m41(double value); void set_m42(double value); void set_m43(double value); void set_m44(double value); void set_a(double value); void set_b(double value); void set_c(double value); void set_d(double value); void set_e(double value); void set_f(double value); WebIDL::ExceptionOr> multiply_self(DOMMatrixInit other = {}); WebIDL::ExceptionOr> pre_multiply_self(DOMMatrixInit other = {}); JS::NonnullGCPtr translate_self(Optional tx, Optional ty, Optional tz); JS::NonnullGCPtr scale_self(Optional scale_x, Optional scale_y, Optional scale_z, Optional origin_x, Optional origin_y, Optional origin_z); JS::NonnullGCPtr scale3d_self(Optional scale, Optional origin_x, Optional origin_y, Optional origin_z); JS::NonnullGCPtr rotate_self(Optional rot_x, Optional rot_y, Optional rot_z); JS::NonnullGCPtr rotate_from_vector_self(Optional x, Optional y); JS::NonnullGCPtr rotate_axis_angle_self(Optional x, Optional y, Optional z, Optional angle); JS::NonnullGCPtr skew_x_self(double sx = 0); JS::NonnullGCPtr skew_y_self(double sy = 0); JS::NonnullGCPtr invert_self(); WebIDL::ExceptionOr> set_matrix_value(String const& transform_list); virtual StringView interface_name() const override { return "DOMMatrix"sv; } private: DOMMatrix(JS::Realm&, double m11, double m12, double m21, double m22, double m41, double m42); DOMMatrix(JS::Realm&, double m11, double m12, double m13, double m14, double m21, double m22, double m23, double m24, double m31, double m32, double m33, double m34, double m41, double m42, double m43, double m44); DOMMatrix(JS::Realm&, DOMMatrixReadOnly const& read_only_matrix); explicit DOMMatrix(JS::Realm&); virtual void initialize(JS::Realm&) override; }; }