LibWeb: Saturate PixelUnits on creation when needed

This commit is contained in:
Hendiadyoin1 2023-08-04 16:55:47 +02:00 committed by Alexander Kalenik
parent 95d00553c9
commit 1e5ba09d76
Notes: sideshowbarker 2024-07-17 18:46:30 +09:00
2 changed files with 17 additions and 3 deletions

View File

@ -11,17 +11,28 @@ namespace Web {
CSSPixels::CSSPixels(int value)
{
m_value = value * fixed_point_denominator;
if (value > max_integer_value) [[unlikely]]
m_value = NumericLimits<int>::max();
else if (value < min_integer_value) [[unlikely]]
m_value = NumericLimits<int>::min();
else
m_value = value << fractional_bits;
}
CSSPixels::CSSPixels(unsigned int value)
{
m_value = value * fixed_point_denominator;
if (value > max_integer_value) [[unlikely]]
m_value = NumericLimits<int>::max();
else
m_value = static_cast<int>(value) << fractional_bits;
}
CSSPixels::CSSPixels(unsigned long value)
{
m_value = value * fixed_point_denominator;
if (value > max_integer_value) [[unlikely]]
m_value = NumericLimits<int>::max();
else
m_value = static_cast<int>(value) << fractional_bits;
}
CSSPixels::CSSPixels(float value)

View File

@ -57,6 +57,9 @@ public:
static constexpr i32 radix_mask = fixed_point_denominator - 1;
static constexpr i32 max_integer_value = NumericLimits<int>::max() >> fractional_bits;
static constexpr i32 min_integer_value = NumericLimits<int>::min() >> fractional_bits;
CSSPixels() = default;
CSSPixels(int value);
CSSPixels(unsigned int value);