#ifndef __OPENGLPLAYGROUND_FONTPROVIDER_HH__ #define __OPENGLPLAYGROUND_FONTPROVIDER_HH__ #include #include #include #include #include "common.hh" #include "Singleton.hh" using FontProviderKeyType = std::tuple; namespace std { template<> struct hash { typedef FontProviderKeyType argument_type; typedef std::size_t result_type; result_type operator()(argument_type const& s) const { const result_type h1{std::hash()(std::get<0>(s))}; const result_type h2{std::hash()(std::get<1>(s))}; return h1 ^ h2; } }; } class FontProvider : public Singleton { private: FontProvider(); friend class Singleton; public: TTF_Font *getFont(std::string const& name, unsigned ptsize); void cleanup(); private: std::unordered_map, TTFFontUPtr> fontCache_; }; #endif