1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-25 22:35:07 +00:00

LibHTML: Add a simple font cache

The FontCache caches the result of font lookups. The cache key is a
simple object called FontSelector which consists of the font family
and font weight (both strings.)

This drastically reduces time spent in font lookup.
This commit is contained in:
Andreas Kling 2019-10-18 23:02:10 +02:00
parent 76e2c08fbf
commit 60be51f908
4 changed files with 63 additions and 0 deletions

View file

@ -1,5 +1,6 @@
#include <LibCore/CDirIterator.h>
#include <LibHTML/CSS/StyleProperties.h>
#include <LibHTML/FontCache.h>
#include <ctype.h>
void StyleProperties::set_property(CSS::PropertyID id, NonnullRefPtr<StyleValue> value)
@ -44,6 +45,11 @@ void StyleProperties::load_font() const
auto font_family = string_or_fallback(CSS::PropertyID::FontFamily, "Katica");
auto font_weight = string_or_fallback(CSS::PropertyID::FontWeight, "normal");
if (auto cached_font = FontCache::the().get({ font_family, font_weight })) {
m_font = cached_font;
return;
}
String weight;
if (font_weight == "lighter")
weight = "Thin";
@ -92,6 +98,7 @@ void StyleProperties::load_font() const
#endif
m_font = Font::load_from_file(String::format("/res/fonts/%s", file_name.characters()));
FontCache::the().set({ font_family, font_weight }, *m_font);
}
int StyleProperties::line_height() const