1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 06:57:46 +00:00

LibGfx+LibWeb: Move Gfx::ScaledFont caching from LibWeb into LibGfx

Before this change, we would only cache and reuse Gfx::ScaledFont
instances for downloaded CSS fonts.

By moving it into Gfx::VectorFont, we get caching for all vector fonts,
including local system TTFs etc.

This avoids a *lot* of style invalidations in LibWeb, since we now vend
the same Gfx::Font pointer for the same font when used repeatedly.
This commit is contained in:
Andreas Kling 2023-12-25 12:45:18 +01:00
parent bf8107b247
commit f900957d26
16 changed files with 54 additions and 137 deletions

View file

@ -14,6 +14,8 @@
namespace Gfx {
class ScaledFont;
struct ScaledFontMetrics {
float ascender { 0 };
float descender { 0 };
@ -35,7 +37,7 @@ struct ScaledGlyphMetrics {
class VectorFont : public RefCounted<VectorFont> {
public:
virtual ~VectorFont() { }
virtual ~VectorFont();
virtual ScaledFontMetrics metrics(float x_scale, float y_scale) const = 0;
virtual ScaledGlyphMetrics glyph_metrics(u32 glyph_id, float x_scale, float y_scale, float point_width, float point_height) const = 0;
virtual float glyphs_horizontal_kerning(u32 left_glyph_id, u32 right_glyph_id, float x_scale) const = 0;
@ -52,6 +54,14 @@ public:
virtual u8 slope() const = 0;
virtual bool is_fixed_width() const = 0;
virtual bool has_color_bitmaps() const = 0;
[[nodiscard]] NonnullRefPtr<ScaledFont> scaled_font(float point_size) const;
protected:
VectorFont();
private:
mutable HashMap<float, NonnullRefPtr<ScaledFont>> m_scaled_fonts;
};
}