LibWeb: Make division of CSSPixels by integers create a fraction

This also adds some additional operators to `CSSPixelsFraction` to
allow this change to build, since some places were using equations like
`(a / b) + (c / d)` or `-(x / y)`.
This commit is contained in:
Zaggy1024 2023-09-01 14:33:54 -05:00 committed by Alexander Kalenik
parent 607a398917
commit fc05cda8cf
Notes: sideshowbarker 2024-07-17 20:22:04 +09:00
2 changed files with 16 additions and 2 deletions

View file

@ -849,7 +849,7 @@ void GridFormattingContext::distribute_extra_space_across_spanned_tracks_base_si
// Find the item-incurred increase for each spanned track with an affected size by: distributing the space
// equally among such tracks, freezing a tracks item-incurred increase as its affected size + item-incurred
// increase reaches its limit
CSSPixels increase_per_track = max(extra_space / affected_tracks.size(), CSSPixels::smallest_positive_value());
CSSPixels increase_per_track = max(CSSPixels::smallest_positive_value(), extra_space / affected_tracks.size());
for (auto& track : affected_tracks) {
if (track.base_size_frozen)
continue;

View file

@ -324,6 +324,20 @@ public:
return CSSPixels::from_raw(AK::clamp_to_int(wide_value));
}
constexpr CSSPixels operator-(CSSPixels const& other) const
{
return CSSPixels(*this) - other;
}
constexpr CSSPixels operator+(CSSPixels const& other) const
{
return CSSPixels(*this) + other;
}
constexpr CSSPixelFraction operator-() const
{
return CSSPixelFraction(-numerator(), denominator());
}
constexpr int operator<=>(CSSPixelFraction const& other) const
{
auto left = static_cast<i64>(m_numerator.raw_value()) * other.m_denominator.raw_value();
@ -375,7 +389,7 @@ constexpr CSSPixels CSSPixels::operator/(CSSPixelFraction const& other) const
}
template<Integral T>
constexpr CSSPixels operator/(CSSPixels left, T right) { return left / CSSPixels(right); }
constexpr CSSPixelFraction operator/(CSSPixels left, T right) { return left / CSSPixels(right); }
inline float operator/(CSSPixels left, float right) { return left.to_float() / right; }
inline double operator/(CSSPixels left, double right) { return left.to_double() / right; }