diff options
author | Tobias Christiansen <tobi@tobyase.de> | 2021-05-30 13:43:47 +0200 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2021-06-06 01:46:06 +0430 |
commit | 27704f5f9ed87d3a93b9acd2d2bbe5916a3c9fd4 (patch) | |
tree | 842873682cc18a351d24fef2db78e5205f651aab | |
parent | ead864acf30f241f71073dfe37e5505a1b3be6f2 (diff) | |
download | serenity-27704f5f9ed87d3a93b9acd2d2bbe5916a3c9fd4.zip |
LibWeb: Add support for 'definite size' determination
This is pretty naive and there are more nuances in the spec but should
be enough for now.
-rw-r--r-- | Userland/Libraries/LibWeb/Layout/Node.cpp | 13 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/Layout/Node.h | 6 |
2 files changed, 18 insertions, 1 deletions
diff --git a/Userland/Libraries/LibWeb/Layout/Node.cpp b/Userland/Libraries/LibWeb/Layout/Node.cpp index 6771564ff3..e7d09efb1f 100644 --- a/Userland/Libraries/LibWeb/Layout/Node.cpp +++ b/Userland/Libraries/LibWeb/Layout/Node.cpp @@ -264,8 +264,13 @@ void NodeWithStyle::apply_style(const CSS::StyleProperties& specified_style) computed_values.set_flex_wrap(flex_wrap.value()); auto position = specified_style.position(); - if (position.has_value()) + if (position.has_value()) { computed_values.set_position(position.value()); + if (position.value() == CSS::Position::Absolute) { + m_has_definite_width = true; + m_has_definite_height = true; + } + } auto text_align = specified_style.text_align(); if (text_align.has_value()) @@ -310,9 +315,15 @@ void NodeWithStyle::apply_style(const CSS::StyleProperties& specified_style) computed_values.set_background_color(specified_style.color_or_fallback(CSS::PropertyID::BackgroundColor, document(), Color::Transparent)); computed_values.set_z_index(specified_style.z_index()); + + if (auto width = specified_style.property(CSS::PropertyID::Width); width.has_value()) + m_has_definite_width = true; computed_values.set_width(specified_style.length_or_fallback(CSS::PropertyID::Width, {})); computed_values.set_min_width(specified_style.length_or_fallback(CSS::PropertyID::MinWidth, {})); computed_values.set_max_width(specified_style.length_or_fallback(CSS::PropertyID::MaxWidth, {})); + + if (auto height = specified_style.property(CSS::PropertyID::Height); height.has_value()) + m_has_definite_height = true; computed_values.set_height(specified_style.length_or_fallback(CSS::PropertyID::Height, {})); computed_values.set_min_height(specified_style.length_or_fallback(CSS::PropertyID::MinHeight, {})); computed_values.set_max_height(specified_style.length_or_fallback(CSS::PropertyID::MaxHeight, {})); diff --git a/Userland/Libraries/LibWeb/Layout/Node.h b/Userland/Libraries/LibWeb/Layout/Node.h index 20e4f3b1f0..ebd2405ea4 100644 --- a/Userland/Libraries/LibWeb/Layout/Node.h +++ b/Userland/Libraries/LibWeb/Layout/Node.h @@ -204,6 +204,9 @@ public: NonnullRefPtr<NodeWithStyle> create_anonymous_wrapper() const; + bool has_definite_height() const { return m_has_definite_height; } + bool has_definite_width() const { return m_has_definite_width; } + protected: NodeWithStyle(DOM::Document&, DOM::Node*, NonnullRefPtr<CSS::StyleProperties>); NodeWithStyle(DOM::Document&, DOM::Node*, CSS::ComputedValues); @@ -216,6 +219,9 @@ private: RefPtr<CSS::ImageStyleValue> m_background_image; CSS::Position m_position; + + bool m_has_definite_height { false }; + bool m_has_definite_width { false }; }; class NodeWithStyleAndBoxModelMetrics : public NodeWithStyle { |