mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-02 22:30:31 +00:00
LibWeb: Devirtualize CSS::CalculatedOr
This fixes a compile warning on GCC 13.3.0 where it warns about the use of Variant within this class with no key function. Since the class was almost a CRTP base class, make it a real one.
This commit is contained in:
parent
f22f6e1f5b
commit
603df37a88
Notes:
github-actions[bot]
2025-03-20 17:37:08 +00:00
Author: https://github.com/ADKaster
Commit: 603df37a88
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4009
Reviewed-by: https://github.com/Hendiadyoin1
1 changed files with 46 additions and 51 deletions
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
namespace Web::CSS {
|
namespace Web::CSS {
|
||||||
|
|
||||||
template<typename T>
|
template<typename Self, typename T>
|
||||||
class CalculatedOr {
|
class CalculatedOr {
|
||||||
public:
|
public:
|
||||||
CalculatedOr(T t)
|
CalculatedOr(T t)
|
||||||
|
@ -31,8 +31,6 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~CalculatedOr() = default;
|
|
||||||
|
|
||||||
bool is_calculated() const { return m_value.template has<NonnullRefPtr<CalculatedStyleValue>>(); }
|
bool is_calculated() const { return m_value.template has<NonnullRefPtr<CalculatedStyleValue>>(); }
|
||||||
|
|
||||||
T const& value() const
|
T const& value() const
|
||||||
|
@ -80,7 +78,7 @@ public:
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(CalculatedOr<T> const& other) const
|
bool operator==(CalculatedOr<Self, T> const& other) const
|
||||||
{
|
{
|
||||||
if (is_calculated() || other.is_calculated())
|
if (is_calculated() || other.is_calculated())
|
||||||
return false;
|
return false;
|
||||||
|
@ -88,92 +86,89 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual Optional<T> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const = 0;
|
Optional<T> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const& calculated, CalculationResolutionContext const& context) const
|
||||||
virtual NonnullRefPtr<CSSStyleValue> create_style_value() const = 0;
|
{
|
||||||
|
return static_cast<Self const*>(this)->resolve_calculated(calculated, context);
|
||||||
|
}
|
||||||
|
NonnullRefPtr<CSSStyleValue> create_style_value() const
|
||||||
|
{
|
||||||
|
return static_cast<Self const*>(this)->create_style_value();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Variant<T, NonnullRefPtr<CalculatedStyleValue>> m_value;
|
Variant<T, NonnullRefPtr<CalculatedStyleValue>> m_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AngleOrCalculated : public CalculatedOr<Angle> {
|
class AngleOrCalculated : public CalculatedOr<AngleOrCalculated, Angle> {
|
||||||
public:
|
public:
|
||||||
using CalculatedOr<Angle>::CalculatedOr;
|
using CalculatedOr::CalculatedOr;
|
||||||
|
|
||||||
private:
|
Optional<Angle> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const;
|
||||||
virtual Optional<Angle> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const override;
|
NonnullRefPtr<CSSStyleValue> create_style_value() const;
|
||||||
virtual NonnullRefPtr<CSSStyleValue> create_style_value() const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class FlexOrCalculated : public CalculatedOr<Flex> {
|
class FlexOrCalculated : public CalculatedOr<FlexOrCalculated, Flex> {
|
||||||
public:
|
public:
|
||||||
using CalculatedOr<Flex>::CalculatedOr;
|
using CalculatedOr::CalculatedOr;
|
||||||
|
|
||||||
private:
|
Optional<Flex> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const;
|
||||||
virtual Optional<Flex> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const override;
|
NonnullRefPtr<CSSStyleValue> create_style_value() const;
|
||||||
virtual NonnullRefPtr<CSSStyleValue> create_style_value() const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class FrequencyOrCalculated : public CalculatedOr<Frequency> {
|
class FrequencyOrCalculated : public CalculatedOr<FrequencyOrCalculated, Frequency> {
|
||||||
public:
|
public:
|
||||||
using CalculatedOr<Frequency>::CalculatedOr;
|
using CalculatedOr::CalculatedOr;
|
||||||
|
|
||||||
private:
|
Optional<Frequency> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const;
|
||||||
virtual Optional<Frequency> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const override;
|
NonnullRefPtr<CSSStyleValue> create_style_value() const;
|
||||||
virtual NonnullRefPtr<CSSStyleValue> create_style_value() const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class IntegerOrCalculated : public CalculatedOr<i64> {
|
class IntegerOrCalculated : public CalculatedOr<IntegerOrCalculated, i64> {
|
||||||
public:
|
public:
|
||||||
using CalculatedOr<i64>::CalculatedOr;
|
using CalculatedOr::CalculatedOr;
|
||||||
|
|
||||||
private:
|
Optional<i64> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const;
|
||||||
virtual Optional<i64> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const override;
|
NonnullRefPtr<CSSStyleValue> create_style_value() const;
|
||||||
virtual NonnullRefPtr<CSSStyleValue> create_style_value() const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class LengthOrCalculated : public CalculatedOr<Length> {
|
class LengthOrCalculated : public CalculatedOr<LengthOrCalculated, Length> {
|
||||||
public:
|
public:
|
||||||
using CalculatedOr<Length>::CalculatedOr;
|
using CalculatedOr::CalculatedOr;
|
||||||
|
|
||||||
private:
|
Optional<Length> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const;
|
||||||
virtual Optional<Length> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const override;
|
NonnullRefPtr<CSSStyleValue> create_style_value() const;
|
||||||
virtual NonnullRefPtr<CSSStyleValue> create_style_value() const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class NumberOrCalculated : public CalculatedOr<double> {
|
class NumberOrCalculated : public CalculatedOr<NumberOrCalculated, double> {
|
||||||
public:
|
public:
|
||||||
using CalculatedOr<double>::CalculatedOr;
|
using CalculatedOr::CalculatedOr;
|
||||||
|
|
||||||
private:
|
Optional<double> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const;
|
||||||
virtual Optional<double> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const override;
|
NonnullRefPtr<CSSStyleValue> create_style_value() const;
|
||||||
virtual NonnullRefPtr<CSSStyleValue> create_style_value() const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class PercentageOrCalculated : public CalculatedOr<Percentage> {
|
class PercentageOrCalculated : public CalculatedOr<PercentageOrCalculated, Percentage> {
|
||||||
public:
|
public:
|
||||||
using CalculatedOr<Percentage>::CalculatedOr;
|
using CalculatedOr::CalculatedOr;
|
||||||
|
|
||||||
private:
|
Optional<Percentage> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const;
|
||||||
virtual Optional<Percentage> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const override;
|
NonnullRefPtr<CSSStyleValue> create_style_value() const;
|
||||||
virtual NonnullRefPtr<CSSStyleValue> create_style_value() const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ResolutionOrCalculated : public CalculatedOr<Resolution> {
|
class ResolutionOrCalculated : public CalculatedOr<ResolutionOrCalculated, Resolution> {
|
||||||
public:
|
public:
|
||||||
using CalculatedOr<Resolution>::CalculatedOr;
|
using CalculatedOr::CalculatedOr;
|
||||||
|
|
||||||
private:
|
Optional<Resolution> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const;
|
||||||
virtual Optional<Resolution> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const override;
|
NonnullRefPtr<CSSStyleValue> create_style_value() const;
|
||||||
virtual NonnullRefPtr<CSSStyleValue> create_style_value() const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class TimeOrCalculated : public CalculatedOr<Time> {
|
class TimeOrCalculated : public CalculatedOr<TimeOrCalculated, Time> {
|
||||||
public:
|
public:
|
||||||
using CalculatedOr<Time>::CalculatedOr;
|
using CalculatedOr::CalculatedOr;
|
||||||
|
|
||||||
private:
|
Optional<Time> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const;
|
||||||
virtual Optional<Time> resolve_calculated(NonnullRefPtr<CalculatedStyleValue> const&, CalculationResolutionContext const&) const override;
|
NonnullRefPtr<CSSStyleValue> create_style_value() const;
|
||||||
virtual NonnullRefPtr<CSSStyleValue> create_style_value() const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue