mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-10-11 20:58:16 +03:00
LibWeb: Teach InlineLevelIterator to skip across inline-block elements
We don't want to descend into inline-block containers when iterating inline-level items, since that would make the inline-level children of the inline-block bubble up to the containing block of the inline-block.
This commit is contained in:
parent
ce8043c6c2
commit
67b3f769fb
Notes:
sideshowbarker
2024-07-17 20:26:03 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/67b3f769fbf
@ -11,11 +11,28 @@
|
||||
|
||||
namespace Web::Layout {
|
||||
|
||||
// This is similar to Layout::Node::next_in_pre_order() but will not descend into inline-block nodes.
|
||||
static Layout::Node* next_inline_node_in_pre_order(Layout::Node& current, Layout::Node const* stay_within)
|
||||
{
|
||||
if (current.first_child() && current.first_child()->is_inline() && !current.is_inline_block())
|
||||
return current.first_child();
|
||||
|
||||
Layout::Node* node = ¤t;
|
||||
Layout::Node* next = nullptr;
|
||||
while (!(next = node->next_sibling())) {
|
||||
node = node->parent();
|
||||
if (!node || node == stay_within)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return next;
|
||||
}
|
||||
|
||||
void InlineLevelIterator::skip_to_next()
|
||||
{
|
||||
VERIFY(m_current_node);
|
||||
do {
|
||||
m_current_node = m_current_node->next_in_pre_order(&m_container);
|
||||
m_current_node = next_inline_node_in_pre_order(*m_current_node, &m_container);
|
||||
} while (m_current_node && !m_current_node->is_inline());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user