From 93c999ce00c7ce44cdd3090e1774d00f4a184612 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Wed, 20 Jul 2022 13:03:30 +0100 Subject: [PATCH] LibWeb: Stop handling impossible Percentage return values When a `calc()` is resolved, it can only return a Percentage value if the requested type is Percentage. In all other cases, it returns a concrete value. eg, a `calc()` with Lengths and Percentages in will always resolve to a Length, never a Percentage. This means we can just return Length directly instead of LengthPercentage, which simplifies things in a few places. --- Userland/Libraries/LibWeb/CSS/Percentage.cpp | 14 ++++---- Userland/Libraries/LibWeb/CSS/StyleValue.cpp | 36 +++++++------------- Userland/Libraries/LibWeb/CSS/StyleValue.h | 8 ++--- 3 files changed, 23 insertions(+), 35 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/Percentage.cpp b/Userland/Libraries/LibWeb/CSS/Percentage.cpp index e6867bf95e..473e04be8f 100644 --- a/Userland/Libraries/LibWeb/CSS/Percentage.cpp +++ b/Userland/Libraries/LibWeb/CSS/Percentage.cpp @@ -9,24 +9,24 @@ namespace Web::CSS { -Angle AnglePercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const& layout_node, Angle const& reference_value) const +Angle AnglePercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const&, Angle const& reference_value) const { - return calculated->resolve_angle_percentage(reference_value)->resolved(layout_node, reference_value); + return calculated->resolve_angle_percentage(reference_value).value(); } -Frequency FrequencyPercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const& layout_node, Frequency const& reference_value) const +Frequency FrequencyPercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const&, Frequency const& reference_value) const { - return calculated->resolve_frequency_percentage(reference_value)->resolved(layout_node, reference_value); + return calculated->resolve_frequency_percentage(reference_value).value(); } Length LengthPercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const& layout_node, Length const& reference_value) const { - return calculated->resolve_length_percentage(layout_node, reference_value)->resolved(layout_node, reference_value); + return calculated->resolve_length_percentage(layout_node, reference_value).value(); } -Time TimePercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const& layout_node, Time const& reference_value) const +Time TimePercentage::resolve_calculated(NonnullRefPtr const& calculated, Layout::Node const&, Time const& reference_value) const { - return calculated->resolve_time_percentage(reference_value)->resolved(layout_node, reference_value); + return calculated->resolve_time_percentage(reference_value).value(); } } diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp index e049dbd65f..5cc9cca591 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp @@ -661,18 +661,15 @@ Optional CalculatedStyleValue::resolve_angle() const return {}; } -Optional CalculatedStyleValue::resolve_angle_percentage(Angle const& percentage_basis) const +Optional CalculatedStyleValue::resolve_angle_percentage(Angle const& percentage_basis) const { auto result = m_expression->resolve(nullptr, percentage_basis); return result.value().visit( - [&](Angle const& angle) -> Optional { + [&](Angle const& angle) -> Optional { return angle; }, - [&](Percentage const& percentage) -> Optional { - return percentage; - }, - [&](auto const&) -> Optional { + [&](auto const&) -> Optional { return {}; }); } @@ -686,18 +683,15 @@ Optional CalculatedStyleValue::resolve_frequency() const return {}; } -Optional CalculatedStyleValue::resolve_frequency_percentage(Frequency const& percentage_basis) const +Optional CalculatedStyleValue::resolve_frequency_percentage(Frequency const& percentage_basis) const { auto result = m_expression->resolve(nullptr, percentage_basis); return result.value().visit( - [&](Frequency const& frequency) -> Optional { + [&](Frequency const& frequency) -> Optional { return frequency; }, - [&](Percentage const& percentage) -> Optional { - return percentage; - }, - [&](auto const&) -> Optional { + [&](auto const&) -> Optional { return {}; }); } @@ -711,18 +705,15 @@ Optional CalculatedStyleValue::resolve_length(Layout::Node const& layout return {}; } -Optional CalculatedStyleValue::resolve_length_percentage(Layout::Node const& layout_node, Length const& percentage_basis) const +Optional CalculatedStyleValue::resolve_length_percentage(Layout::Node const& layout_node, Length const& percentage_basis) const { auto result = m_expression->resolve(&layout_node, percentage_basis); return result.value().visit( - [&](Length const& length) -> Optional { + [&](Length const& length) -> Optional { return length; }, - [&](Percentage const& percentage) -> Optional { - return percentage; - }, - [&](auto const&) -> Optional { + [&](auto const&) -> Optional { return {}; }); } @@ -744,18 +735,15 @@ Optional