LibWeb: Add a constructor for StackingContextTransform

This avoids some code duplication in an upcoming commit.
This commit is contained in:
InvalidUsernameException 2025-09-02 22:57:40 +02:00 committed by Jelle Raaijmakers
parent 7dd3fca858
commit 870b7c79c3
3 changed files with 13 additions and 16 deletions

View File

@ -12,6 +12,15 @@
namespace Web::Painting {
StackingContextTransform::StackingContextTransform(Gfx::FloatPoint origin, Gfx::FloatMatrix4x4 matrix, float scale)
{
this->origin = origin.scaled(scale);
matrix[0, 3] *= scale;
matrix[1, 3] *= scale;
matrix[2, 3] *= scale;
this->matrix = matrix;
}
DisplayListRecorder::DisplayListRecorder(DisplayList& command_list)
: m_display_list(command_list)
{
@ -300,10 +309,7 @@ void DisplayListRecorder::push_stacking_context(PushStackingContextParams params
.opacity = params.opacity,
.compositing_and_blending_operator = params.compositing_and_blending_operator,
.isolate = params.isolate,
.transform = {
.origin = params.transform.origin,
.matrix = params.transform.matrix,
},
.transform = params.transform,
.clip_path = params.clip_path });
m_clip_frame_stack.append({});
}

View File

@ -33,6 +33,8 @@ namespace Web::Painting {
struct StackingContextTransform {
Gfx::FloatPoint origin;
Gfx::FloatMatrix4x4 matrix;
StackingContextTransform(Gfx::FloatPoint origin, Gfx::FloatMatrix4x4 matrix, float scale);
};
class WEB_API DisplayListRecorder {

View File

@ -291,14 +291,6 @@ Gfx::AffineTransform StackingContext::affine_transform_matrix() const
return Gfx::extract_2d_affine_transform(paintable_box().transform());
}
static Gfx::FloatMatrix4x4 matrix_with_scaled_translation(Gfx::FloatMatrix4x4 matrix, float scale)
{
matrix[0, 3] *= scale;
matrix[1, 3] *= scale;
matrix[2, 3] *= scale;
return matrix;
}
void StackingContext::paint(DisplayListRecordingContext& context) const
{
auto opacity = paintable_box().computed_values().opacity();
@ -322,10 +314,7 @@ void StackingContext::paint(DisplayListRecordingContext& context) const
.opacity = opacity,
.compositing_and_blending_operator = compositing_and_blending_operator,
.isolate = paintable_box().computed_values().isolation() == CSS::Isolation::Isolate,
.transform = {
.origin = transform_origin.scaled(to_device_pixels_scale),
.matrix = matrix_with_scaled_translation(transform_matrix, to_device_pixels_scale),
},
.transform = StackingContextTransform(transform_origin, transform_matrix, to_device_pixels_scale),
};
auto const& computed_values = paintable_box().computed_values();