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

LibWeb: Start absolutizing lengths after performing the CSS cascade

Once we've performed the cascade on a set of values for an element,
we should have enough information to resolve/absolutize some lengths.

Basically, any CSS length that isn't "auto" or a percentage can be
turned into an absolute length (in pixels) as long as we have the
following information:

- The viewport rect
- The parent element's font
- The document element's font
- The element's own font

To ensure that we can absolutize lengths relative to the element's own
font, we now do a separate first pass where font-related properties are
defaulted (in the cascade spec sense of the word) and become usable.

There's a lot more work to do here, but this should open up a lot of
simplification in layout code, since it will no longer need to care
about relative lengths. Layout still needs to resolve percentages, since
we can't do that for some properties until the containing block
dimensions are known.
This commit is contained in:
Andreas Kling 2021-09-23 13:13:51 +02:00
parent 30979c1956
commit 23a08fd35a
6 changed files with 305 additions and 51 deletions

View file

@ -231,7 +231,6 @@ void StyleProperties::load_font(Layout::Node const& node) const
}
if (!found_font) {
dbgln("Font not found: '{}' {} {}", family_value->to_string(), size, weight);
found_font = font_fallback(monospace, bold);
}
@ -239,7 +238,7 @@ void StyleProperties::load_font(Layout::Node const& node) const
FontCache::the().set(font_selector, *m_font);
}
RefPtr<Gfx::Font> StyleProperties::font_fallback(bool monospace, bool bold) const
NonnullRefPtr<Gfx::Font> StyleProperties::font_fallback(bool monospace, bool bold)
{
if (monospace && bold)
return Gfx::FontDatabase::default_fixed_width_font().bold_variant();