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:
parent
bf8107b247
commit
f900957d26
16 changed files with 54 additions and 137 deletions
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue