mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-27 23:09:08 +00:00
In order for this to work nicely, I made the line box classes use float instead of int for its geometry information. Justification works by distributing all of the whitespace on the line (including the trailing whitespace before the line break) evenly across the spaces in-between words. We should probably use floating point (or maybe fixed point?) for all the layout metrics stuff. But one thing at a time. :^)
16 lines
896 B
C++
16 lines
896 B
C++
#include <LibHTML/Layout/LayoutNode.h>
|
|
#include <LibHTML/Layout/LineBox.h>
|
|
|
|
void LineBox::add_fragment(const LayoutNode& layout_node, int start, int length, int width, int height)
|
|
{
|
|
bool text_align_is_justify = layout_node.style().string_or_fallback(CSS::PropertyID::TextAlign, "left") == "justify";
|
|
if (!text_align_is_justify && !m_fragments.is_empty() && &m_fragments.last().layout_node() == &layout_node) {
|
|
// The fragment we're adding is from the last LayoutNode on the line.
|
|
// Expand the last fragment instead of adding a new one with the same LayoutNode.
|
|
m_fragments.last().m_length = (start - m_fragments.last().m_start) + length;
|
|
m_fragments.last().m_rect.set_width(m_fragments.last().m_rect.width() + width);
|
|
} else {
|
|
m_fragments.empend(layout_node, start, length, FloatRect(m_width, 0, width, height));
|
|
}
|
|
m_width += width;
|
|
}
|