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