X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FGUI%2Fnew_gui.hxx;h=6bc2707157eec18780bbf377ecab6b9441d24a75;hb=5cad5aa7da2476ca8323a61f81dea59676dca085;hp=981628af8406eb0843bb162eb0532ee7d0e13bae;hpb=2f8beb56eafb97c0e38c04b192068a1578c79344;p=flightgear.git diff --git a/src/GUI/new_gui.hxx b/src/GUI/new_gui.hxx index 981628af8..6bc270715 100644 --- a/src/GUI/new_gui.hxx +++ b/src/GUI/new_gui.hxx @@ -18,12 +18,13 @@ #include #include +#include #include #include -SG_USING_STD(vector); -SG_USING_STD(map); -SG_USING_STD(string); +using std::vector; +using std::map; +using std::string; #include
@@ -264,10 +265,7 @@ public: bool isValid() const { return _red >= 0.0 && _green >= 0.0 && _blue >= 0.0; } - void print() const { - std::cerr << "red=" << _red << ", green=" << _green - << ", blue=" << _blue << ", alpha=" << _alpha << std::endl; - } + void print() const; inline void setRed(float red) { _red = red; } inline void setGreen(float green) { _green = green; } @@ -289,23 +287,51 @@ private: /** - * A small class to keep all fonts available for future use. + * A class to keep all fonts available for future use. * This also assures a font isn't resident more than once. */ class FGFontCache { private: + // The parameters of a request to the cache. + struct FntParams + { + const std::string name; + const float size; + const float slant; + FntParams() : size(0.0f), slant(0.0f) {} + FntParams(const FntParams& rhs) + : name(rhs.name), size(rhs.size), slant(rhs.slant) + { + } + FntParams(const std::string& name_, float size_, float slant_) + : name(name_), size(size_), slant(slant_) + { + } + }; + struct FntParamsLess + : public std::binary_function + { + bool operator() (const FntParams& f1, const FntParams& f2) const; + }; struct fnt { fnt(puFont *pu = 0) : pufont(pu), texfont(0) {} ~fnt() { if (texfont) { delete pufont; delete texfont; } } + // Font used by plib GUI code puFont *pufont; + // TXF font fntTexFont *texfont; }; + // Path to the font directory SGPath _path; - map _fonts; - typedef map::const_iterator _itt_t; + typedef map TexFontMap; + typedef map PuFontMap; + TexFontMap _texFonts; + PuFontMap _puFonts; + bool _initialized; struct fnt *getfnt(const char *name, float size, float slant); + void init(); public: FGFontCache(); @@ -317,6 +343,14 @@ public: fntTexFont *getTexFont(const char *name, float size=15.0, float slant=0.0); SGPath getfntpath(const char *name); + /** + * Preload all the fonts in the FlightGear font directory. It is + * important to load the font textures early, with the proper + * graphics context current, so that no plib (or our own) code + * tries to load a font from disk when there's no current graphics + * context. + */ + bool initializeFonts(); };