mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-27 02:05:07 +02:00
Previously, we were collapsing whitespace in Layout::TextNode and then
passed the resulting string for further processing through ChunkIterator
-> InlineLevelIterator -> InlineFormattingContext -> LineBuilder ->
LineBoxFragment -> PaintableFragment. Our painting tree is where we deal
with things like range offsets into the underlying text nodes, but since
we modified the original string, the offsets were wrong.
This changes the way we generate fragments:
* Layout::TextNode no longer collapses whitespace as part of its
stored "text for rendering", but moves this logic to ChunkIterator
which splits up this text into separate views whenever whitespace
needs to be collapsed.
* Layout::LineBox now only extends the last fragment if its end offset
is equal to the new fragment's start offset. Otherwise, there's a
gap caused by collapsing whitespace and we need to generate a
separate fragment for that in order to have a correct start offset.
Some tests need new baselines because of the fixed start offsets.
Fixes #566.
127 lines
8.9 KiB
Plaintext
127 lines
8.9 KiB
Plaintext
Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 600 0+0+0] children: not-inline
|
|
BlockContainer <html> at [0,0] [0+0+0 800 0+0+0] [0+0+0 358 0+0+0] [BFC] children: not-inline
|
|
BlockContainer <body> at [8,8] [8+0+0 784 0+0+8] [8+0+0 342 0+0+8] children: not-inline
|
|
BlockContainer <(anonymous)> at [8,8] [0+0+0 784 0+0+0] [0+0+0 0 0+0+0] children: inline
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <div> at [8,8] [0+0+0 784 0+0+0] [0+0+0 0 0+0+0] children: inline
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <div#lefty> at [8,8] floating [0+0+0 100 0+0+0] [0+0+0 100 0+0+0] [BFC] children: inline
|
|
frag 0 from TextNode start: 0, length: 1, rect: [8,8 10.859375x18] baseline: 13.796875
|
|
"L"
|
|
TextNode <#text> (not painted)
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <div#righty> at [742,8] floating [0+0+0 50 0+0+0] [0+0+0 50 0+0+0] [BFC] children: inline
|
|
frag 0 from TextNode start: 0, length: 1, rect: [742,8 13.6875x18] baseline: 13.796875
|
|
"R"
|
|
TextNode <#text> (not painted)
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <(anonymous)> at [8,8] [0+0+0 784 0+0+0] [0+0+0 0 0+0+0] children: inline
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <div> at [8,8] [0+0+0 784 0+0+0] [0+0+0 0 0+0+0] children: inline
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <div#lefty2> at [108,8] floating [0+0+0 80 0+0+0] [0+0+0 80 0+0+0] [BFC] children: inline
|
|
frag 0 from TextNode start: 0, length: 2, rect: [108,8 19.671875x18] baseline: 13.796875
|
|
"L2"
|
|
TextNode <#text> (not painted)
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <div#righty2> at [712,8] floating [0+0+0 30 0+0+0] [0+0+0 30 0+0+0] [BFC] children: inline
|
|
frag 0 from TextNode start: 0, length: 2, rect: [712,8 22.5x18] baseline: 13.796875
|
|
"R2"
|
|
TextNode <#text> (not painted)
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <(anonymous)> at [8,8] [0+0+0 784 0+0+0] [0+0+0 0 0+0+0] children: inline
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <div> at [8,8] [0+0+0 784 0+0+0] [0+0+0 0 0+0+0] children: inline
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <div#lefty3> at [188,8] floating [0+0+0 40 0+0+0] [0+0+0 40 0+0+0] [BFC] children: inline
|
|
frag 0 from TextNode start: 0, length: 2, rect: [188,8 19.953125x18] baseline: 13.796875
|
|
"L3"
|
|
TextNode <#text> (not painted)
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <div#righty3> at [692,8] floating [0+0+0 20 0+0+0] [0+0+0 20 0+0+0] [BFC] children: inline
|
|
frag 0 from TextNode start: 0, length: 2, rect: [692,8 22.78125x18] baseline: 13.796875
|
|
"R3"
|
|
TextNode <#text> (not painted)
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <(anonymous)> at [8,8] [0+0+0 784 0+0+0] [0+0+0 0 0+0+0] children: inline
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <div> at [8,8] [0+0+0 784 0+0+0] [0+0+0 342 0+0+0] children: inline
|
|
frag 0 from TextNode start: 5, length: 47, rect: [228,8 414.5625x18] baseline: 13.796875
|
|
"lorem ipsum lorem ipsum lorem ipsum lorem ipsum"
|
|
frag 1 from TextNode start: 53, length: 47, rect: [228,26 414.5625x18] baseline: 13.796875
|
|
"lorem ipsum lorem ipsum lorem ipsum lorem ipsum"
|
|
frag 2 from TextNode start: 101, length: 53, rect: [228,44 466.90625x18] baseline: 13.796875
|
|
"lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 3 from TextNode start: 155, length: 65, rect: [188,62 573.5x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum"
|
|
frag 4 from TextNode start: 221, length: 60, rect: [188,80 528.203125x18] baseline: 13.796875
|
|
"lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum "
|
|
frag 5 from TextNode start: 285, length: 5, rect: [716.203125,80 44.34375x18] baseline: 13.796875
|
|
"lorem"
|
|
frag 6 from TextNode start: 291, length: 77, rect: [108,98 679.140625x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum"
|
|
frag 7 from TextNode start: 369, length: 89, rect: [8,116 783.828125x18] baseline: 13.796875
|
|
"lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 8 from TextNode start: 459, length: 83, rect: [8,134 731.484375x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 9 from TextNode start: 543, length: 18, rect: [8,152 158.9375x18] baseline: 13.796875
|
|
"ipsum lorem ipsum "
|
|
frag 10 from TextNode start: 565, length: 65, rect: [166.9375,152 572.546875x18] baseline: 13.796875
|
|
"lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 11 from TextNode start: 631, length: 83, rect: [8,170 731.484375x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 12 from TextNode start: 715, length: 83, rect: [8,188 731.484375x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 13 from TextNode start: 799, length: 42, rect: [8,206 370.21875x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum "
|
|
frag 14 from TextNode start: 845, length: 41, rect: [378.21875,206 361.265625x18] baseline: 13.796875
|
|
"lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 15 from TextNode start: 887, length: 83, rect: [8,224 731.484375x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 16 from TextNode start: 971, length: 83, rect: [8,242 731.484375x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 17 from TextNode start: 1055, length: 66, rect: [8,260 581.5x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum "
|
|
frag 18 from TextNode start: 1125, length: 17, rect: [589.5,260 149.984375x18] baseline: 13.796875
|
|
"lorem ipsum lorem"
|
|
frag 19 from TextNode start: 1143, length: 83, rect: [8,278 731.484375x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 20 from TextNode start: 1227, length: 83, rect: [8,296 731.484375x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 21 from TextNode start: 1311, length: 83, rect: [8,314 731.484375x18] baseline: 13.796875
|
|
"ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
|
|
frag 22 from TextNode start: 1395, length: 5, rect: [8,332 45.296875x18] baseline: 13.796875
|
|
"ipsum"
|
|
TextNode <#text> (not painted)
|
|
BlockContainer <(anonymous)> at [8,350] [0+0+0 784 0+0+0] [0+0+0 0 0+0+0] children: inline
|
|
TextNode <#text> (not painted)
|
|
|
|
ViewportPaintable (Viewport<#document>) [0,0 800x600]
|
|
PaintableWithLines (BlockContainer<HTML>) [0,0 800x358]
|
|
PaintableWithLines (BlockContainer<BODY>) [8,8 784x342]
|
|
PaintableWithLines (BlockContainer(anonymous)) [8,8 784x0]
|
|
PaintableWithLines (BlockContainer<DIV>) [8,8 784x0] overflow: [8,8 784x100]
|
|
PaintableWithLines (BlockContainer<DIV>#lefty) [8,8 100x100]
|
|
TextPaintable (TextNode<#text>)
|
|
PaintableWithLines (BlockContainer<DIV>#righty) [742,8 50x50]
|
|
TextPaintable (TextNode<#text>)
|
|
PaintableWithLines (BlockContainer(anonymous)) [8,8 784x0]
|
|
PaintableWithLines (BlockContainer<DIV>) [8,8 784x0] overflow: [108,8 634x80]
|
|
PaintableWithLines (BlockContainer<DIV>#lefty2) [108,8 80x80]
|
|
TextPaintable (TextNode<#text>)
|
|
PaintableWithLines (BlockContainer<DIV>#righty2) [712,8 30x30]
|
|
TextPaintable (TextNode<#text>)
|
|
PaintableWithLines (BlockContainer(anonymous)) [8,8 784x0]
|
|
PaintableWithLines (BlockContainer<DIV>) [8,8 784x0] overflow: [188,8 526.78125x40]
|
|
PaintableWithLines (BlockContainer<DIV>#lefty3) [188,8 40x40]
|
|
TextPaintable (TextNode<#text>)
|
|
PaintableWithLines (BlockContainer<DIV>#righty3) [692,8 20x20] overflow: [692,8 22.78125x20]
|
|
TextPaintable (TextNode<#text>)
|
|
PaintableWithLines (BlockContainer(anonymous)) [8,8 784x0]
|
|
PaintableWithLines (BlockContainer<DIV>) [8,8 784x342]
|
|
TextPaintable (TextNode<#text>)
|
|
PaintableWithLines (BlockContainer(anonymous)) [8,350 784x0]
|
|
|
|
SC for Viewport<#document> [0,0 800x600] [children: 1] (z-index: auto)
|
|
SC for BlockContainer<HTML> [0,0 800x358] [children: 0] (z-index: auto)
|