X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FGUI%2Fnew_gui.hxx;h=0797d53a66ac8551f4b8adc9e0362b00fd832297;hb=c5366cceb6d345d3526ab013b04eb815fe0a6845;hp=674bd73e2d99a7ddade14181bb2f3b455041a9bc;hpb=a251fd35cb3ad3f6b30982f1b74702ca0dec5b67;p=flightgear.git diff --git a/src/GUI/new_gui.hxx b/src/GUI/new_gui.hxx index 674bd73e2..0797d53a6 100644 --- a/src/GUI/new_gui.hxx +++ b/src/GUI/new_gui.hxx @@ -3,28 +3,16 @@ #ifndef __NEW_GUI_HXX #define __NEW_GUI_HXX 1 -#ifndef __cplusplus -# error This library requires C++ -#endif - -#ifdef HAVE_CONFIG_H -# include -#endif - #include -#include // for SG_USING_STD #include #include #include +#include #include #include -SG_USING_STD(vector); -SG_USING_STD(map); -SG_USING_STD(string); - #include
class SGBinding; @@ -118,7 +106,7 @@ public: * @param name The name of the dialog box. * @return true if the dialog exists, false otherwise. */ - virtual bool showDialog (const string &name); + virtual bool showDialog (const std::string &name); /** @@ -137,14 +125,14 @@ public: * @param name The name of the dialog box. * @return true if the dialog was active, false otherwise. */ - virtual bool closeDialog (const string &name); + virtual bool closeDialog (const std::string &name); /** * Get dialog property tree's root node. * @param name The name of the dialog box. * @return node pointer if the dialog was found, zero otherwise. */ - virtual SGPropertyNode_ptr getDialogProperties (const string &name); + virtual SGPropertyNode_ptr getDialogProperties (const std::string &name); /** * Return a pointer to the current menubar. @@ -172,14 +160,14 @@ public: * * @return The named dialog, or 0 if it isn't active. */ - virtual FGDialog * getDialog (const string &name); + virtual FGDialog * getDialog (const std::string &name); virtual FGColor *getColor (const char * name) const { _citt_t it = _colors.find(name); return (it != _colors.end()) ? it->second : NULL; } - virtual FGColor *getColor (const string &name) const { + virtual FGColor *getColor (const std::string &name) const { _citt_t it = _colors.find(name.c_str()); return (it != _colors.end()) ? it->second : NULL; } @@ -231,12 +219,12 @@ private: void clear_colors(); // Read all the configuration files in a directory. - void readDir (const char * path); + void readDir (const SGPath& path); FGMenuBar * _menubar; FGDialog * _active_dialog; - map _active_dialogs; - map _dialog_props; + std::map _active_dialogs; + std::map _dialog_props; }; @@ -286,23 +274,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(); @@ -314,6 +330,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(); };