mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-11 02:29:21 +00:00
LibWeb: Add {,de}serialization steps for DOMMatrixReadonly
This commit is contained in:
parent
57e7d6e989
commit
181424377d
Notes:
sideshowbarker
2024-07-17 05:09:48 +09:00
Author: https://github.com/kennethmyhra
Commit: 181424377d
Pull-request: https://github.com/SerenityOS/serenity/pull/23538
Reviewed-by: https://github.com/ADKaster
5 changed files with 170 additions and 2 deletions
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Luke Wilde <lukew@serenityos.org>
|
||||
* Copyright (c) 2023, Bastiaan van der Plaat <bastiaan.v.d.plaat@gmail.com>
|
||||
* Copyright (c) 2024, Kenneth Myhra <kennethmyhra@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -12,6 +13,7 @@
|
|||
#include <LibWeb/Geometry/DOMMatrix.h>
|
||||
#include <LibWeb/Geometry/DOMMatrixReadOnly.h>
|
||||
#include <LibWeb/Geometry/DOMPoint.h>
|
||||
#include <LibWeb/HTML/StructuredSerialize.h>
|
||||
#include <LibWeb/HTML/Window.h>
|
||||
#include <LibWeb/WebIDL/Buffers.h>
|
||||
#include <LibWeb/WebIDL/ExceptionOr.h>
|
||||
|
@ -115,6 +117,11 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<DOMMatrixReadOnly>> DOMMatrixReadOnly::crea
|
|||
init.m41.value(), init.m42.value(), init.m43, init.m44);
|
||||
}
|
||||
|
||||
JS::NonnullGCPtr<DOMMatrixReadOnly> DOMMatrixReadOnly::create(JS::Realm& realm)
|
||||
{
|
||||
return realm.heap().allocate<DOMMatrixReadOnly>(realm, realm);
|
||||
}
|
||||
|
||||
DOMMatrixReadOnly::DOMMatrixReadOnly(JS::Realm& realm, double m11, double m12, double m21, double m22, double m41, double m42)
|
||||
: Bindings::PlatformObject(realm)
|
||||
{
|
||||
|
@ -134,6 +141,11 @@ DOMMatrixReadOnly::DOMMatrixReadOnly(JS::Realm& realm, DOMMatrixReadOnly const&
|
|||
{
|
||||
}
|
||||
|
||||
DOMMatrixReadOnly::DOMMatrixReadOnly(JS::Realm& realm)
|
||||
: Bindings::PlatformObject(realm)
|
||||
{
|
||||
}
|
||||
|
||||
DOMMatrixReadOnly::~DOMMatrixReadOnly() = default;
|
||||
|
||||
void DOMMatrixReadOnly::initialize(JS::Realm& realm)
|
||||
|
@ -685,6 +697,140 @@ WebIDL::ExceptionOr<String> DOMMatrixReadOnly::to_string() const
|
|||
return TRY_OR_THROW_OOM(vm, builder.to_string());
|
||||
}
|
||||
|
||||
// https://drafts.fxtf.org/geometry/#structured-serialization
|
||||
WebIDL::ExceptionOr<void> DOMMatrixReadOnly::serialization_steps(HTML::SerializationRecord& serialized, bool)
|
||||
{
|
||||
HTML::serialize_primitive_type(serialized, m_is_2d);
|
||||
// 1. If value’s is 2D is true:
|
||||
if (m_is_2d) {
|
||||
// 1. Set serialized.[[M11]] to value’s m11 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m11());
|
||||
// 2. Set serialized.[[M12]] to value’s m12 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m12());
|
||||
// 3. Set serialized.[[M21]] to value’s m21 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m21());
|
||||
// 4. Set serialized.[[M22]] to value’s m22 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m22());
|
||||
// 5. Set serialized.[[M41]] to value’s m41 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m41());
|
||||
// 6. Set serialized.[[M42]] to value’s m42 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m42());
|
||||
// 7. Set serialized.[[Is2D]] to true.
|
||||
// NOTE: This is set in the beginning of the function.
|
||||
}
|
||||
// 2. Otherwise:
|
||||
else {
|
||||
// 1. Set serialized.[[M11]] to value’s m11 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m11());
|
||||
// 2. Set serialized.[[M12]] to value’s m12 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m12());
|
||||
// 3. Set serialized.[[M13]] to value’s m13 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m13());
|
||||
// 4. Set serialized.[[M14]] to value’s m14 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m14());
|
||||
// 5. Set serialized.[[M21]] to value’s m21 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m21());
|
||||
// 6. Set serialized.[[M22]] to value’s m22 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m22());
|
||||
// 7. Set serialized.[[M23]] to value’s m23 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m23());
|
||||
// 8. Set serialized.[[M24]] to value’s m24 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m24());
|
||||
// 9. Set serialized.[[M31]] to value’s m31 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m31());
|
||||
// 10. Set serialized.[[M32]] to value’s m32 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m32());
|
||||
// 11. Set serialized.[[M33]] to value’s m33 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m33());
|
||||
// 12. Set serialized.[[M34]] to value’s m34 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m34());
|
||||
// 13. Set serialized.[[M41]] to value’s m41 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m41());
|
||||
// 14. Set serialized.[[M42]] to value’s m42 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m42());
|
||||
// 15. Set serialized.[[M43]] to value’s m43 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m43());
|
||||
// 16. Set serialized.[[M44]] to value’s m44 element.
|
||||
HTML::serialize_primitive_type(serialized, this->m44());
|
||||
// 17. Set serialized.[[Is2D]] to false.
|
||||
// NOTE: This is set in the beginning of the function.
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
// https://drafts.fxtf.org/geometry/#structured-serialization
|
||||
WebIDL::ExceptionOr<void> DOMMatrixReadOnly::deserialization_steps(ReadonlySpan<u32> const& record, size_t& position)
|
||||
{
|
||||
bool is_2d = HTML::deserialize_primitive_type<bool>(record, position);
|
||||
// 1. If serialized.[[Is2D]] is true:
|
||||
if (is_2d) {
|
||||
// 1. Set value’s m11 element to serialized.[[M11]].
|
||||
double m11 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 2. Set value’s m12 element to serialized.[[M12]].
|
||||
double m12 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 3. Set value’s m13 element to 0.
|
||||
// 4. Set value’s m14 element to 0.
|
||||
// 5. Set value’s m21 element to serialized.[[M21]].
|
||||
double m21 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 6. Set value’s m22 element to serialized.[[M22]].
|
||||
double m22 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 7. Set value’s m23 element to 0.
|
||||
// 8. Set value’s m24 element to 0.
|
||||
// 9. Set value’s m31 element to 0.
|
||||
// 10. Set value’s m32 element to 0.
|
||||
// 11. Set value’s m33 element to 1.
|
||||
// 12. Set value’s m34 element to 0.
|
||||
// 13. Set value’s m41 element to serialized.[[M41]].
|
||||
double m41 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 14 Set value’s m42 element to serialized.[[M42]].
|
||||
double m42 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 15. Set value’s m43 element to 0.
|
||||
// 16. Set value’s m44 element to 1.
|
||||
// 17. Set value’s is 2D to true.
|
||||
|
||||
initialize_from_create_2d_matrix(m11, m12, m21, m22, m41, m42);
|
||||
}
|
||||
// 2. Otherwise:
|
||||
else {
|
||||
// 1. Set value’s m11 element to serialized.[[M11]].
|
||||
double m11 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 2. Set value’s m12 element to serialized.[[M12]].
|
||||
double m12 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 3. Set value’s m13 element to serialized.[[M13]].
|
||||
double m13 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 4. Set value’s m14 element to serialized.[[M14]].
|
||||
double m14 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 5. Set value’s m21 element to serialized.[[M21]].
|
||||
double m21 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 6. Set value’s m22 element to serialized.[[M22]].
|
||||
double m22 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 7. Set value’s m23 element to serialized.[[M23]].
|
||||
double m23 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 8. Set value’s m24 element to serialized.[[M24]].
|
||||
double m24 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 9. Set value’s m31 element to serialized.[[M31]].
|
||||
double m31 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 10. Set value’s m32 element to serialized.[[M32]].
|
||||
double m32 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 11. Set value’s m33 element to serialized.[[M33]].
|
||||
double m33 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 12. Set value’s m34 element to serialized.[[M34]].
|
||||
double m34 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 13. Set value’s m41 element to serialized.[[M41]].
|
||||
double m41 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 14. Set value’s m42 element to serialized.[[M42]].
|
||||
double m42 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 15. Set value’s m43 element to serialized.[[M43]].
|
||||
double m43 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 16. Set value’s m44 element to serialized.[[M44]].
|
||||
double m44 = HTML::deserialize_primitive_type<double>(record, position);
|
||||
// 17. Set value’s is 2D to false.
|
||||
|
||||
initialize_from_create_3d_matrix(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44);
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
// https://drafts.fxtf.org/geometry/#matrix-validate-and-fixup-2d
|
||||
WebIDL::ExceptionOr<void> validate_and_fixup_dom_matrix_2d_init(DOMMatrix2DInit& init)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue