mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-10 13:00:29 +03: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
Notes:
sideshowbarker
2024-07-17 06:09:44 +09:00
Author: https://github.com/AtkinsSJ Commit: https://github.com/SerenityOS/serenity/commit/2ae53bc5eb Pull-request: https://github.com/SerenityOS/serenity/pull/21829
@ -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()));
|
||||
|
@ -22,10 +22,18 @@ public:
|
||||
{
|
||||
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;
|
||||
|
||||
ValueComparingNonnullRefPtr<EdgeStyleValue> edge_x() const { return m_properties.edge_x; }
|
||||
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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user