1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 04:27:45 +00:00

LibWeb: Fix inline blocks swallowing trailing whitespace

In #10434 an issue with leading whitespace in new lines after
a <br> element was fixed by checking whether the last fragment
of LineBox is empty.

However, this introduced a regression by which whitespace following
inline elements was swallowed, so `<b>Test</b> 123` would appear
like `Test123`.

By asking specifically if we are handling a forced linebreak
instead of implicity asking for a property that may be shared by
other Node types, we can maintain the correct behavior in regards
to leading whitespace on new lines, as well as trailing whitespace
of inline elements.
This commit is contained in:
Felix Rauch 2021-10-26 16:15:53 +02:00 committed by Andreas Kling
parent 7426feacf7
commit 30c39e0e41
5 changed files with 15 additions and 3 deletions

View file

@ -5,8 +5,10 @@
*/
#include <AK/CharacterTypes.h>
#include <AK/TypeCasts.h>
#include <AK/Utf8View.h>
#include <LibWeb/Layout/Box.h>
#include <LibWeb/Layout/BreakNode.h>
#include <LibWeb/Layout/LineBox.h>
#include <LibWeb/Layout/Node.h>
#include <LibWeb/Layout/TextNode.h>
@ -61,9 +63,13 @@ bool LineBox::is_empty_or_ends_in_whitespace() const
{
if (m_fragments.is_empty())
return true;
if (m_fragments.last().length() == 0)
return true;
return m_fragments.last().ends_in_whitespace();
}
bool LineBox::ends_with_forced_line_break() const
{
return is<BreakNode>(m_fragments.last().layout_node());
}
}