1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 04:37:44 +00:00

LibWeb: Forbid using CSS::Length as reference value in resolved()

CSSPixels should not be wrapped into CSS::Length before being passed
to resolved() to end up resolving percentages without losing
precision.

Fixes thrashing layout when 33.3333% width is used together with
"box-sizing: border-box".
This commit is contained in:
Aliaksandr Kalenik 2024-01-07 01:09:09 +01:00 committed by Andreas Kling
parent f2cd120fd3
commit 4bc38300ad
10 changed files with 40 additions and 17 deletions

View file

@ -20,7 +20,7 @@ Transformation::Transformation(TransformFunction function, Vector<TransformValue
Gfx::FloatMatrix4x4 Transformation::to_matrix(Painting::PaintableBox const& paintable_box) const
{
auto count = m_values.size();
auto value = [&](size_t index, CSS::Length const& reference_length = CSS::Length::make_px(0)) -> float {
auto value = [&](size_t index, CSSPixels const& reference_length = 0) -> float {
return m_values[index].visit(
[&](CSS::LengthPercentage const& value) -> double {
return value.resolved(paintable_box.layout_node(), reference_length).to_px(paintable_box.layout_node()).to_float();
@ -34,8 +34,8 @@ Gfx::FloatMatrix4x4 Transformation::to_matrix(Painting::PaintableBox const& pain
};
auto reference_box = paintable_box.absolute_rect();
auto width = CSS::Length::make_px(reference_box.width());
auto height = CSS::Length::make_px(reference_box.height());
auto width = reference_box.width();
auto height = reference_box.height();
switch (m_function) {
case CSS::TransformFunction::Matrix: