diff --git a/Userland/Libraries/LibGfx/FontDatabase.cpp b/Userland/Libraries/LibGfx/FontDatabase.cpp index dc3fbd41e9..0410b0dd9d 100644 --- a/Userland/Libraries/LibGfx/FontDatabase.cpp +++ b/Userland/Libraries/LibGfx/FontDatabase.cpp @@ -159,10 +159,19 @@ RefPtr FontDatabase::get_by_name(const StringView& name) RefPtr FontDatabase::get(const String& family, unsigned size, unsigned weight) { - for (auto& it : m_private->full_name_to_font_map) { - auto& font = *it.value; - if (font.family() == family && font.presentation_size() == size && font.weight() == weight) - return font; + for (auto typeface : m_private->typefaces) { + if (typeface->family() == family && typeface->weight() == weight) + return typeface->get_font(size); + } + return nullptr; +} + +RefPtr FontDatabase::get(const String& family, const String& variant, unsigned size) +{ + dbgln("FontDatabase: Request font {} {} {}", family, variant, size); + for (auto typeface : m_private->typefaces) { + if (typeface->family() == family && typeface->variant() == variant) + return typeface->get_font(size); } return nullptr; } @@ -178,4 +187,11 @@ RefPtr FontDatabase::get_or_create_typeface(const String& family, cons return typeface; } +void FontDatabase::for_each_typeface(Function callback) +{ + for (auto typeface : m_private->typefaces) { + callback(*typeface); + } +} + } diff --git a/Userland/Libraries/LibGfx/FontDatabase.h b/Userland/Libraries/LibGfx/FontDatabase.h index 204ab8e18b..4fb77b1d49 100644 --- a/Userland/Libraries/LibGfx/FontDatabase.h +++ b/Userland/Libraries/LibGfx/FontDatabase.h @@ -45,16 +45,19 @@ public: static Font& default_bold_fixed_width_font(); RefPtr get(const String& family, unsigned size, unsigned weight); + RefPtr get(const String& family, const String& variant, unsigned size); RefPtr get_by_name(const StringView&); void for_each_font(Function); void for_each_fixed_width_font(Function); - RefPtr get_or_create_typeface(const String& family, const String& variant); + void for_each_typeface(Function); private: FontDatabase(); ~FontDatabase(); + RefPtr get_or_create_typeface(const String& family, const String& variant); + struct Private; OwnPtr m_private; }; diff --git a/Userland/Libraries/LibGfx/Typeface.cpp b/Userland/Libraries/LibGfx/Typeface.cpp index 478ff6e5e1..f9f6442368 100644 --- a/Userland/Libraries/LibGfx/Typeface.cpp +++ b/Userland/Libraries/LibGfx/Typeface.cpp @@ -28,6 +28,16 @@ namespace Gfx { +unsigned Typeface::weight() const +{ + ASSERT(m_ttf_font || m_bitmap_fonts.size() > 0); + + if (is_fixed_size()) + return m_bitmap_fonts[0]->weight(); + + return m_ttf_font->weight(); +} + void Typeface::add_bitmap_font(RefPtr font) { m_bitmap_fonts.append(font); @@ -53,4 +63,11 @@ RefPtr Typeface::get_font(unsigned size) return {}; } +void Typeface::for_each_fixed_size_font(Function callback) const +{ + for (auto font : m_bitmap_fonts) { + callback(*font); + } +} + } diff --git a/Userland/Libraries/LibGfx/Typeface.h b/Userland/Libraries/LibGfx/Typeface.h index 5aa8218c1d..591d685106 100644 --- a/Userland/Libraries/LibGfx/Typeface.h +++ b/Userland/Libraries/LibGfx/Typeface.h @@ -26,6 +26,7 @@ #pragma once +#include #include #include #include @@ -38,13 +39,17 @@ namespace Gfx { class Typeface : public RefCounted { public: Typeface(const String& family, const String& variant) - : m_family(family) - , m_variant(variant) - {} + : m_family(family) + , m_variant(variant) + { + } String family() const { return m_family; } String variant() const { return m_variant; } - unsigned weight() const { return 100; /*TODO*/ } + unsigned weight() const; + + bool is_fixed_size() const { return !m_bitmap_fonts.is_empty(); } + void for_each_fixed_size_font(Function) const; void add_bitmap_font(RefPtr); void set_ttf_font(RefPtr);