From 65962ba03d045b627370deec21cc354b7974e273 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Wed, 20 May 2026 23:50:38 +0200 Subject: [PATCH] LibGfx: Add IPC serialization for CornerRadii The compositor IPC boundary needs to transfer CSS corner radii without keeping their wire shape in Web-specific glue. Declare the IPC specializations on the LibGfx types and encode each corner radius pair next to the CornerRadii implementation. This is preparatory work required to add IPC between the main and compositor threads. --- Libraries/LibGfx/CornerRadii.cpp | 44 ++++++++++++++++++++++++++++++++ Libraries/LibGfx/CornerRadii.h | 17 ++++++++++++ 2 files changed, 61 insertions(+) diff --git a/Libraries/LibGfx/CornerRadii.cpp b/Libraries/LibGfx/CornerRadii.cpp index 52b7a717c3..c491bba1d5 100644 --- a/Libraries/LibGfx/CornerRadii.cpp +++ b/Libraries/LibGfx/CornerRadii.cpp @@ -7,6 +7,8 @@ #include #include +#include +#include namespace Gfx { @@ -44,3 +46,45 @@ void CornerRadii::adjust_corners_for_spread_distance(int spread_distance) } } + +namespace IPC { + +template<> +ErrorOr encode(Encoder& encoder, Gfx::CornerRadius const& radius) +{ + TRY(encoder.encode(radius.horizontal_radius)); + TRY(encoder.encode(radius.vertical_radius)); + return {}; +} + +template<> +ErrorOr decode(Decoder& decoder) +{ + return Gfx::CornerRadius { + .horizontal_radius = TRY(decoder.decode()), + .vertical_radius = TRY(decoder.decode()), + }; +} + +template<> +ErrorOr encode(Encoder& encoder, Gfx::CornerRadii const& radii) +{ + TRY(encoder.encode(radii.top_left)); + TRY(encoder.encode(radii.top_right)); + TRY(encoder.encode(radii.bottom_right)); + TRY(encoder.encode(radii.bottom_left)); + return {}; +} + +template<> +ErrorOr decode(Decoder& decoder) +{ + return Gfx::CornerRadii { + .top_left = TRY(decoder.decode()), + .top_right = TRY(decoder.decode()), + .bottom_right = TRY(decoder.decode()), + .bottom_left = TRY(decoder.decode()), + }; +} + +} diff --git a/Libraries/LibGfx/CornerRadii.h b/Libraries/LibGfx/CornerRadii.h index 35a066e45c..a266e65605 100644 --- a/Libraries/LibGfx/CornerRadii.h +++ b/Libraries/LibGfx/CornerRadii.h @@ -9,6 +9,7 @@ #include #include +#include namespace Gfx { @@ -90,3 +91,19 @@ struct CornerRadii { }; } + +namespace IPC { + +template<> +ErrorOr encode(Encoder&, Gfx::CornerRadius const&); + +template<> +ErrorOr decode(Decoder&); + +template<> +ErrorOr encode(Encoder&, Gfx::CornerRadii const&); + +template<> +ErrorOr decode(Decoder&); + +}