mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 16:17:45 +00:00
LibWeb: Add some helpers to PositionStyleValue
Both of these are needed by the gradient style values.
This commit is contained in:
parent
8917378aa7
commit
2ae53bc5eb
2 changed files with 28 additions and 0 deletions
|
@ -11,6 +11,26 @@
|
||||||
|
|
||||||
namespace Web::CSS {
|
namespace Web::CSS {
|
||||||
|
|
||||||
|
bool PositionStyleValue::is_center() const
|
||||||
|
{
|
||||||
|
return (edge_x()->edge() == PositionEdge::Left
|
||||||
|
&& edge_x()->offset().is_percentage() && edge_x()->offset().percentage() == Percentage { 50 })
|
||||||
|
&& (edge_y()->edge() == PositionEdge::Top
|
||||||
|
&& edge_y()->offset().is_percentage() && edge_y()->offset().percentage() == Percentage { 50 });
|
||||||
|
}
|
||||||
|
|
||||||
|
CSSPixelPoint PositionStyleValue::resolved(Layout::Node const& node, CSSPixelRect const& rect) const
|
||||||
|
{
|
||||||
|
// Note: A preset + a none default x/y_relative_to is impossible in the syntax (and makes little sense)
|
||||||
|
CSSPixels x = m_properties.edge_x->offset().to_px(node, rect.width());
|
||||||
|
CSSPixels y = m_properties.edge_y->offset().to_px(node, rect.height());
|
||||||
|
if (m_properties.edge_x->edge() == PositionEdge::Right)
|
||||||
|
x = rect.width() - x;
|
||||||
|
if (m_properties.edge_y->edge() == PositionEdge::Bottom)
|
||||||
|
y = rect.height() - y;
|
||||||
|
return CSSPixelPoint { rect.x() + x, rect.y() + y };
|
||||||
|
}
|
||||||
|
|
||||||
String PositionStyleValue::to_string() const
|
String PositionStyleValue::to_string() const
|
||||||
{
|
{
|
||||||
return MUST(String::formatted("{} {}", m_properties.edge_x->to_string(), m_properties.edge_y->to_string()));
|
return MUST(String::formatted("{} {}", m_properties.edge_x->to_string(), m_properties.edge_y->to_string()));
|
||||||
|
|
|
@ -22,10 +22,18 @@ public:
|
||||||
{
|
{
|
||||||
return adopt_ref(*new (nothrow) PositionStyleValue(move(edge_x), move(edge_y)));
|
return adopt_ref(*new (nothrow) PositionStyleValue(move(edge_x), move(edge_y)));
|
||||||
}
|
}
|
||||||
|
static ValueComparingNonnullRefPtr<PositionStyleValue> create_center()
|
||||||
|
{
|
||||||
|
return adopt_ref(*new (nothrow) PositionStyleValue(
|
||||||
|
EdgeStyleValue::create(PositionEdge::Left, Percentage { 50 }),
|
||||||
|
EdgeStyleValue::create(PositionEdge::Top, Percentage { 50 })));
|
||||||
|
}
|
||||||
virtual ~PositionStyleValue() override = default;
|
virtual ~PositionStyleValue() override = default;
|
||||||
|
|
||||||
ValueComparingNonnullRefPtr<EdgeStyleValue> edge_x() const { return m_properties.edge_x; }
|
ValueComparingNonnullRefPtr<EdgeStyleValue> edge_x() const { return m_properties.edge_x; }
|
||||||
ValueComparingNonnullRefPtr<EdgeStyleValue> edge_y() const { return m_properties.edge_y; }
|
ValueComparingNonnullRefPtr<EdgeStyleValue> edge_y() const { return m_properties.edge_y; }
|
||||||
|
bool is_center() const;
|
||||||
|
CSSPixelPoint resolved(Layout::Node const&, CSSPixelRect const&) const;
|
||||||
|
|
||||||
virtual String to_string() const override;
|
virtual String to_string() const override;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue