|
@@ -11,6 +11,26 @@
|
|
|
|
|
|
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
|
|
|
{
|
|
|
return MUST(String::formatted("{} {}", m_properties.edge_x->to_string(), m_properties.edge_y->to_string()));
|