/* * Copyright (c) 2018-2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include struct FontSelector { FlyString family; float point_size { 0 }; int weight { 0 }; int width { 0 }; int slope { 0 }; bool operator==(FontSelector const& other) const { return family == other.family && point_size == other.point_size && weight == other.weight && width == other.width && slope == other.slope; } }; namespace AK { template<> struct Traits : public GenericTraits { static unsigned hash(FontSelector const& key) { return pair_int_hash(pair_int_hash(key.family.hash(), key.weight), key.point_size); } }; } class FontCache { public: static FontCache& the(); RefPtr get(FontSelector const&) const; void set(FontSelector const&, NonnullRefPtr); NonnullRefPtr scaled_font(Gfx::Font const&, float scale_factor); private: FontCache() = default; mutable HashMap> m_fonts; };