ladybird/Userland/Libraries/LibWeb/Layout/AvailableSpace.cpp
Aliaksandr Kalenik 147c3b3d97 LibWeb+WebContent: Forbid access to underlying type of CSSPixels
Although DistinctNumeric, which is supposed to abstract the underlying
type, was used to represent CSSPixels, we have a whole bunch of places
in the layout code that assume CSSPixels::value() returns a
floating-point type. This assumption makes it difficult to replace the
underlying type in CSSPixels with a non-floating type.

To make it easier to transition CSSPixels to fixed-point math, one step
we can take is to prevent access to the underlying type using value()
and instead use explicit conversions with the to_float(), to_double(),
and to_int() methods.
2023-06-13 06:08:27 +02:00

59 lines
1.3 KiB
C++

/*
* Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibWeb/Layout/AvailableSpace.h>
#include <math.h>
namespace Web::Layout {
AvailableSize AvailableSize::make_definite(CSSPixels value)
{
VERIFY(isfinite(value.to_double()));
return AvailableSize { Type::Definite, value };
}
AvailableSize AvailableSize::make_indefinite()
{
return AvailableSize { Type::Indefinite, INFINITY };
}
AvailableSize AvailableSize::make_min_content()
{
return AvailableSize { Type::MinContent, 0 };
}
AvailableSize AvailableSize::make_max_content()
{
return AvailableSize { Type::MaxContent, INFINITY };
}
DeprecatedString AvailableSize::to_deprecated_string() const
{
switch (m_type) {
case Type::Definite:
return DeprecatedString::formatted("definite({})", m_value);
case Type::Indefinite:
return "indefinite";
case Type::MinContent:
return "min-content";
case Type::MaxContent:
return "max-content";
}
VERIFY_NOT_REACHED();
}
DeprecatedString AvailableSpace::to_deprecated_string() const
{
return DeprecatedString::formatted("{} x {}", width, height);
}
AvailableSize::AvailableSize(Type type, CSSPixels value)
: m_type(type)
, m_value(value)
{
}
}