]> git.mxchange.org Git - flightgear.git/blob - utils/fgpanel/FGFontCache.hxx
Fix Win32 build, hopefully.
[flightgear.git] / utils / fgpanel / FGFontCache.hxx
1 //  This program is free software; you can redistribute it and/or
2 //  modify it under the terms of the GNU General Public License as
3 //  published by the Free Software Foundation; either version 2 of the
4 //  License, or (at your option) any later version.
5 // 
6 //  This program is distributed in the hope that it will be useful, but
7 //  WITHOUT ANY WARRANTY; without even the implied warranty of
8 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
9 //  General Public License for more details.
10 //
11 //  You should have received a copy of the GNU General Public License
12 //  along with this program; if not, write to the Free Software
13 //  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
14 //
15 #ifndef __FGFONTCACHE_HXX
16 #define __FGFONTCACHE_HXX
17
18 #include <simgear/misc/sg_path.hxx>
19 #include <simgear/props/props.hxx>
20
21
22 // forward declare only!
23 class puFont;
24 class fntTexFont;
25
26 /**
27  * A class to keep all fonts available for future use.
28  * This also assures a font isn't resident more than once.
29  */
30 class FGFontCache {
31 private:
32     // The parameters of a request to the cache.
33     struct FntParams
34     {
35         const std::string name;
36         const float size;
37         const float slant;
38         FntParams() : size(0.0f), slant(0.0f) {}
39         FntParams(const FntParams& rhs)
40             : name(rhs.name), size(rhs.size), slant(rhs.slant)
41         {
42         }
43         FntParams(const std::string& name_, float size_, float slant_)
44             : name(name_), size(size_), slant(slant_)
45         {
46         }
47     };
48     struct FntParamsLess
49         : public std::binary_function<const FntParams, const FntParams, bool>
50     {
51         bool operator() (const FntParams& f1, const FntParams& f2) const;
52     };
53     struct fnt {
54         fnt(puFont *pu = 0) : pufont(pu), texfont(0) {}
55         ~fnt();
56         // Font used by plib GUI code
57         puFont *pufont;
58         // TXF font
59         fntTexFont *texfont;
60     };
61     // Path to the font directory
62     SGPath _path;
63
64     typedef std::map<const std::string, fntTexFont*> TexFontMap;
65     typedef std::map<const FntParams, fnt*, FntParamsLess> PuFontMap;
66     TexFontMap _texFonts;
67     PuFontMap _puFonts;
68
69     bool _initialized;
70     struct fnt *getfnt(const char *name, float size, float slant);
71     void init();
72
73 public:
74     FGFontCache();
75     ~FGFontCache();
76
77     puFont *get(const char *name, float size=15.0, float slant=0.0);
78     puFont *get(SGPropertyNode *node);
79
80     fntTexFont *getTexFont(const char *name, float size=15.0, float slant=0.0);
81
82     SGPath getfntpath(const char *name);
83     /**
84      * Preload all the fonts in the FlightGear font directory. It is
85      * important to load the font textures early, with the proper
86      * graphics context current, so that no plib (or our own) code
87      * tries to load a font from disk when there's no current graphics
88      * context.
89      */
90     bool initializeFonts();
91 };
92 #endif