diff options
Diffstat (limited to 'Userland/Libraries/LibWeb/Layout')
-rw-r--r-- | Userland/Libraries/LibWeb/Layout/InlineLevelIterator.cpp | 2 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/Layout/TextNode.cpp | 14 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/Layout/TextNode.h | 3 |
3 files changed, 16 insertions, 3 deletions
diff --git a/Userland/Libraries/LibWeb/Layout/InlineLevelIterator.cpp b/Userland/Libraries/LibWeb/Layout/InlineLevelIterator.cpp index 44def1b158..c879393b2d 100644 --- a/Userland/Libraries/LibWeb/Layout/InlineLevelIterator.cpp +++ b/Userland/Libraries/LibWeb/Layout/InlineLevelIterator.cpp @@ -264,7 +264,7 @@ void InlineLevelIterator::enter_text_node(Layout::TextNode const& text_node) .do_respect_linebreaks = do_respect_linebreaks, .is_first_chunk = true, .is_last_chunk = false, - .chunk_iterator = TextNode::ChunkIterator { text_node.text_for_rendering(), do_wrap_lines, do_respect_linebreaks }, + .chunk_iterator = TextNode::ChunkIterator { text_node.text_for_rendering(), do_wrap_lines, do_respect_linebreaks, text_node.is_generated() && text_node.text_for_rendering().is_empty() }, }; m_text_node_context->next_chunk = m_text_node_context->chunk_iterator.next(); } diff --git a/Userland/Libraries/LibWeb/Layout/TextNode.cpp b/Userland/Libraries/LibWeb/Layout/TextNode.cpp index f1ad910b88..bee02d93ad 100644 --- a/Userland/Libraries/LibWeb/Layout/TextNode.cpp +++ b/Userland/Libraries/LibWeb/Layout/TextNode.cpp @@ -85,9 +85,10 @@ void TextNode::compute_text_for_rendering(bool collapse) m_text_for_rendering = builder.to_string(); } -TextNode::ChunkIterator::ChunkIterator(StringView text, bool wrap_lines, bool respect_linebreaks) +TextNode::ChunkIterator::ChunkIterator(StringView text, bool wrap_lines, bool respect_linebreaks, bool is_generated_empty_string) : m_wrap_lines(wrap_lines) , m_respect_linebreaks(respect_linebreaks) + , m_should_emit_one_empty_chunk(is_generated_empty_string) , m_utf8_view(text) , m_iterator(m_utf8_view.begin()) { @@ -95,6 +96,17 @@ TextNode::ChunkIterator::ChunkIterator(StringView text, bool wrap_lines, bool re Optional<TextNode::Chunk> TextNode::ChunkIterator::next() { + if (m_should_emit_one_empty_chunk) { + m_should_emit_one_empty_chunk = false; + return Chunk { + .view = {}, + .start = 0, + .length = 0, + .has_breaking_newline = false, + .is_all_whitespace = false, + }; + } + if (m_iterator == m_utf8_view.end()) return {}; diff --git a/Userland/Libraries/LibWeb/Layout/TextNode.h b/Userland/Libraries/LibWeb/Layout/TextNode.h index 0d64f31417..128f80b893 100644 --- a/Userland/Libraries/LibWeb/Layout/TextNode.h +++ b/Userland/Libraries/LibWeb/Layout/TextNode.h @@ -33,7 +33,7 @@ public: class ChunkIterator { public: - ChunkIterator(StringView text, bool wrap_lines, bool respect_linebreaks); + ChunkIterator(StringView text, bool wrap_lines, bool respect_linebreaks, bool is_generated_empty_string); Optional<Chunk> next(); private: @@ -41,6 +41,7 @@ public: bool const m_wrap_lines; bool const m_respect_linebreaks; + bool m_should_emit_one_empty_chunk { false }; Utf8View m_utf8_view; Utf8View::Iterator m_iterator; }; |