1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-01 10:08:10 +00:00

LibWeb: Bring CSS line-height closer to other engines

This patch makes a few changes to the way we calculate line-height:

- `line-height: normal` is now resolved using metrics from the used
  font (specifically, round(A + D + lineGap)).

- `line-height: calc(...)` is now resolved at style compute time.

- `line-height` values are now absolutized at style compute time.

As a consequence of the above, we no longer need to walk the DOM
ancestor chain looking for line-heights during style computation.
Instead, values are inherited, resolved and absolutized locally.

This is not only much faster, but also makes our line-height metrics
match those of other engines like Gecko and Blink.
This commit is contained in:
Andreas Kling 2024-01-12 12:39:40 +01:00
parent f0722671c3
commit e7de5cb4d2
385 changed files with 6889 additions and 6893 deletions

View file

@ -1,28 +1,28 @@
Viewport <#document> at (0,0) content-size 800x600 children: not-inline
BlockContainer <html> at (1,1) content-size 798x250.03125 [BFC] children: not-inline
BlockContainer <body> at (10,10) content-size 780x21.46875 children: not-inline
BlockContainer <div.Layout-sidebar> at (11,11) content-size 220x19.46875 children: inline
line 0 width: 102, height: 19.46875, bottom: 19.46875, baseline: 14.53125
frag 0 from BlockContainer start: 0, length: 0, rect: [12,12 100x17.46875]
BlockContainer <div.d-inline-block> at (12,12) content-size 100x17.46875 inline-block [BFC] children: inline
line 0 width: 69.734375, height: 17.46875, bottom: 17.46875, baseline: 13.53125
frag 0 from TextNode start: 0, length: 12, rect: [12,12 69.734375x17.46875]
BlockContainer <html> at (1,1) content-size 798x249 [BFC] children: not-inline
BlockContainer <body> at (10,10) content-size 780x21 children: not-inline
BlockContainer <div.Layout-sidebar> at (11,11) content-size 220x19 children: inline
line 0 width: 102, height: 19, bottom: 19, baseline: 14.296875
frag 0 from BlockContainer start: 0, length: 0, rect: [12,12 100x17]
BlockContainer <div.d-inline-block> at (12,12) content-size 100x17 inline-block [BFC] children: inline
line 0 width: 69.734375, height: 17, bottom: 17, baseline: 13.296875
frag 0 from TextNode start: 0, length: 12, rect: [12,12 69.734375x17]
"floats!!!!!!"
TextNode <#text>
BlockContainer <div.float-left> at (12,31.46875) content-size 232.71875x218.5625 floating [BFC] children: inline
line 0 width: 232.71875, height: 109.1875, bottom: 109.1875, baseline: 84.578125
frag 0 from TextNode start: 0, length: 5, rect: [12,31.46875 232.71875x109.1875]
BlockContainer <div.float-left> at (12,31) content-size 232.71875x218 floating [BFC] children: inline
line 0 width: 232.71875, height: 109, bottom: 109, baseline: 84.484375
frag 0 from TextNode start: 0, length: 5, rect: [12,31 232.71875x109]
"float"
line 1 width: 164.0625, height: 109.375, bottom: 218.5625, baseline: 84.578125
frag 0 from TextNode start: 6, length: 4, rect: [12,140.46875 164.0625x109.1875]
line 1 width: 164.0625, height: 109, bottom: 218, baseline: 84.484375
frag 0 from TextNode start: 6, length: 4, rect: [12,140 164.0625x109]
"left"
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x252.03125]
PaintableWithLines (BlockContainer<BODY>) [9,9 782x23.46875]
PaintableWithLines (BlockContainer<DIV>.Layout-sidebar) [10,10 222x21.46875]
PaintableWithLines (BlockContainer<DIV>.d-inline-block) [11,11 102x19.46875]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x251]
PaintableWithLines (BlockContainer<BODY>) [9,9 782x23]
PaintableWithLines (BlockContainer<DIV>.Layout-sidebar) [10,10 222x21]
PaintableWithLines (BlockContainer<DIV>.d-inline-block) [11,11 102x19]
TextPaintable (TextNode<#text>)
PaintableWithLines (BlockContainer<DIV>.float-left) [11,30.46875 234.71875x220.5625]
PaintableWithLines (BlockContainer<DIV>.float-left) [11,30 234.71875x220]
TextPaintable (TextNode<#text>)