LibWeb: Saturate result in PixelUnits::operator/

This commit is contained in:
Hendiadyoin1 2023-07-26 15:03:51 +02:00 committed by Alexander Kalenik
parent f9fc0505fb
commit 71f56d8697
Notes: sideshowbarker 2024-07-17 06:35:16 +09:00
2 changed files with 11 additions and 3 deletions

View File

@ -31,6 +31,11 @@ TEST_CASE(division1)
CSSPixels b(5);
CSSPixels c = a / b;
EXPECT_EQ(c, CSSPixels(2));
a = CSSPixels::from_raw(0x3FFF'FFFF); // int_max / 2
b = 0.25;
EXPECT(!a.might_be_saturated());
EXPECT((a / b).might_be_saturated());
}
TEST_CASE(multiplication1)

View File

@ -124,9 +124,12 @@ CSSPixels CSSPixels::operator*(CSSPixels const& other) const
CSSPixels CSSPixels::operator/(CSSPixels const& other) const
{
CSSPixels result;
result.set_raw_value(static_cast<long long>(fixed_point_denominator) * raw_value() / other.raw_value());
return result;
i64 mult = raw_value();
mult <<= fractional_bits;
mult /= other.raw_value();
int int_value = AK::clamp_to_int(mult);
return from_raw(int_value);
}
CSSPixels& CSSPixels::operator+=(CSSPixels const& other)