# error This library requires C++
#endif
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <plib/pu.h>
#include <simgear/compiler.h> // for SG_USING_STD
class FGMenuBar;
class FGDialog;
class FGBinding;
+class FGColor;
/**
*/
virtual FGDialog * getActiveDialog ();
+ const FGColor& getColor (const char * which) { return _colors[which]; }
+ const FGColor& getColor (string which) { return _colors[which.c_str()]; }
+
protected:
/**
*/
virtual void setMenuBarVisible (bool visible);
+ virtual void setStyle ();
+ virtual void setupFont ();
private:
+ fntTexFont _tex_font;
+ puFont _font;
+ map<string,FGColor> _colors;
// Free all allocated memory.
void clear ();
};
+class FGColor {
+public:
+ FGColor() { clear(); }
+ FGColor(float r, float g, float b, float a = 1.0f) { set(r, g, b, a); }
+ FGColor(const SGPropertyNode *prop) { set(prop); }
+
+ FGColor& operator=(const FGColor& c) {
+ _red = c._red;
+ _green = c._green;
+ _blue = c._blue;
+ _alpha = c._alpha;
+ return *this;
+ }
+
+ inline void clear() { _red = _green = _blue = -1.0f; _alpha = 1.0f; }
+ // merges in non-negative components from property with children <red> etc.
+ void merge(const SGPropertyNode *prop);
+ void merge(const FGColor& color);
+
+ void set(const SGPropertyNode *prop) { clear(); merge(prop); };
+ void set(const FGColor& color) { clear(); merge(color); }
+ void set(float r, float g, float b, float a = 1.0f) {
+ _red = clamp(r), _green = clamp(g), _blue = clamp(b), _alpha = clamp(a);
+ }
+ bool isValid() const {
+ return _red >= 0.0 && _green >= 0.0 && _blue >= 0.0
+ && _alpha >= 0.0;
+ }
+ void print() const {
+ std::cerr << "red=" << _red << ", green=" << _green
+ << ", blue=" << _blue << ", alpha=" << _alpha << std::endl;
+ }
+
+ inline void setRed(float red) { _red = clamp(red); }
+ inline void setGreen(float green) { _green = clamp(green); }
+ inline void setBlue(float blue) { _blue = clamp(blue); }
+ inline void setAlpha(float alpha) { _alpha = clamp(alpha); }
+
+ inline float red() const { return _red; }
+ inline float green() const { return _green; }
+ inline float blue() const { return _blue; }
+ inline float alpha() const { return _alpha; }
+
+protected:
+ float _red, _green, _blue, _alpha;
+
+private:
+ float clamp(float f) { return f < 0.0 ? 0.0 : f > 1.0 ? 1.0 : f; }
+};
+
+
#endif // __NEW_GUI_HXX