X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCockpit%2Fpanel.hxx;h=1adc9e811569859c14e7cdf5e909cea6bfed5f24;hb=29275ce1ecf9c4ea302aacca8c5ae5d4d3319a17;hp=e3e5f04e15d7c19c9b6ad7fcdc2d5a87e3345c2d;hpb=be88681d69079538e835b8fc5cde912a08afbcda;p=flightgear.git diff --git a/src/Cockpit/panel.hxx b/src/Cockpit/panel.hxx index e3e5f04e1..1adc9e811 100644 --- a/src/Cockpit/panel.hxx +++ b/src/Cockpit/panel.hxx @@ -30,6 +30,8 @@ # include #endif +#include + #ifdef HAVE_WINDOWS_H # include #endif @@ -38,11 +40,15 @@ #include #include +#include #include #include #include +#include
+ + FG_USING_STD(vector); FG_USING_STD(map); @@ -72,17 +78,36 @@ private: // This structure wraps an SSG texture with cropping information. //////////////////////////////////////////////////////////////////////// -struct CroppedTexture +class FGCroppedTexture { - CroppedTexture () {} - CroppedTexture (const string &path, +public: + + FGCroppedTexture (); + FGCroppedTexture (const string &path, float _minX = 0.0, float _minY = 0.0, - float _maxX = 1.0, float _maxY = 1.0) - : texture(FGTextureManager::createTexture(path)), - minX(_minX), minY(_minY), maxX(_maxX), maxY(_maxY) {} + float _maxX = 1.0, float _maxY = 1.0); + virtual ~FGCroppedTexture (); + + virtual void setPath (const string &path) { _path = path; } + + virtual const string &getPath () const { return _path; } - ssgTexture * texture; - float minX, minY, maxX, maxY; + virtual ssgTexture * getTexture (); + + virtual void setCrop (float minX, float minY, float maxX, float maxY) { + _minX = minX; _minY = minY; _maxX = maxX; _maxY = maxY; + } + + virtual float getMinX () const { return _minX; } + virtual float getMinY () const { return _minY; } + virtual float getMaxX () const { return _maxX; } + virtual float getMaxY () const { return _maxY; } + + +private: + string _path; + ssgTexture * _texture; + float _minX, _minY, _maxX, _maxY; }; @@ -96,19 +121,22 @@ struct CroppedTexture // the appropriate instruments for processing. //////////////////////////////////////////////////////////////////////// -class FGPanel +class FGPanel : public FGSubsystem { public: - FGPanel (int x, int y, int w, int h); + FGPanel (int window_x, int window_y, int window_w, int window_h); virtual ~FGPanel (); + // Update the panel (every frame). + virtual void init (); + virtual void bind (); + virtual void unbind (); + virtual void update (); + // transfer pointer ownership!!! virtual void addInstrument (FGPanelInstrument * instrument); - // Update the panel (every frame). - virtual void update () const; - // Background texture. virtual void setBackground (ssgTexture * texture); @@ -116,6 +144,26 @@ public: virtual bool getVisibility () const; virtual void setVisibility (bool visibility); + // Full width of panel. + virtual void setWidth (int width) { _width = width; } + virtual int getWidth () const { return _width; } + + // Full height of panel. + virtual void setHeight (int height) { _height = height; } + virtual int getHeight () const { return _height; } + + // X-offset + virtual void setXOffset (int offset); + virtual int getXOffset () const { return _x_offset; } + + // Y-offset. + virtual void setYOffset (int offset); + virtual int getYOffset () const { return _y_offset; } + + // View height. + virtual void setViewHeight (int height) { _view_height = height; } + virtual int getViewHeight () const { return _view_height; } + // Handle a mouse click. virtual bool doMouseAction (int button, int updown, int x, int y); @@ -126,8 +174,13 @@ private: mutable int _mouseDelay; mutable FGPanelInstrument * _mouseInstrument; typedef vector instrument_list_type; - int _x, _y, _w, _h; - int _panel_h; + int _winx, _winy, _winw, _winh; + int _width; + int _height; + int _x_offset; + int _y_offset; + int _view_height; + ssgTexture * _bg; // List of instruments in panel. instrument_list_type _instruments; @@ -322,9 +375,6 @@ public: }; FGPanelTransformation (); - FGPanelTransformation (Type type, const SGValue * value, - float min, float max, - float factor, float offset); virtual ~FGPanelTransformation (); Type type; @@ -392,7 +442,6 @@ protected: class FGLayeredInstrument : public FGPanelInstrument { public: - typedef vector layer_list; FGLayeredInstrument (int x, int y, int w, int h); virtual ~FGLayeredInstrument (); @@ -400,12 +449,13 @@ public: // Transfer pointer ownership!! virtual int addLayer (FGInstrumentLayer *layer); - virtual int addLayer (CroppedTexture &texture, int w = -1, int h = -1); + virtual int addLayer (FGCroppedTexture &texture, int w = -1, int h = -1); // Transfer pointer ownership!! virtual void addTransformation (FGPanelTransformation * transformation); protected: + typedef vector layer_list; layer_list _layers; }; @@ -423,47 +473,19 @@ class FGTexturedLayer : public FGInstrumentLayer { public: FGTexturedLayer (int w = -1, int h = -1) : FGInstrumentLayer(w, h) {} - FGTexturedLayer (const CroppedTexture &texture, int w = -1, int h = -1); + FGTexturedLayer (const FGCroppedTexture &texture, int w = -1, int h = -1); virtual ~FGTexturedLayer (); virtual void draw (); - virtual void setTexture (const CroppedTexture &texture) { + virtual void setTexture (const FGCroppedTexture &texture) { _texture = texture; } - virtual CroppedTexture &getTexture () { return _texture; } - virtual const CroppedTexture &getTexture () const { return _texture; } + virtual FGCroppedTexture &getTexture () { return _texture; } + virtual const FGCroppedTexture &getTexture () const { return _texture; } private: - mutable CroppedTexture _texture; -}; - - - -//////////////////////////////////////////////////////////////////////// -// A moving window on a texture. -// -// This layer automatically recrops a cropped texture based on -// property values, creating a moving window over the texture. -//////////////////////////////////////////////////////////////////////// - -class FGWindowLayer : public FGTexturedLayer -{ -public: - FGWindowLayer (int w = -1, int h = -1); - FGWindowLayer (const CroppedTexture &texture, int w = -1, int h = -1); - virtual ~FGWindowLayer (); - - virtual void draw (); - - virtual const SGValue * getXValue () const { return _xValue; } - virtual void setXValue (const SGValue * value) { _xValue = value; } - virtual const SGValue * getYValue () const { return _yValue; } - virtual void setYValue (const SGValue * value) { _yValue = value; } - -private: - const SGValue * _xValue; - const SGValue * _yValue; + mutable FGCroppedTexture _texture; }; @@ -501,8 +523,7 @@ public: mutable char _buf[1024]; }; - FGTextLayer (int w = -1, int h = -1, Chunk * chunk1 = 0, Chunk * chunk2 = 0, - Chunk * chunk3 = 0); + FGTextLayer (int w = -1, int h = -1); virtual ~FGTextLayer (); virtual void draw (); @@ -514,13 +535,18 @@ public: virtual void setFont (fntFont * font); private: + + void recalc_value () const; + typedef vector chunk_list; chunk_list _chunks; float _color[4]; float _pointSize; - // FIXME: need only one globally - mutable fntRenderer _renderer; + + mutable string _value; + mutable SGTimeStamp _then; + mutable SGTimeStamp _now; }; @@ -546,6 +572,14 @@ private: }; + +//////////////////////////////////////////////////////////////////////// +// Functions. +//////////////////////////////////////////////////////////////////////// + +bool fgPanelVisible (); + + //////////////////////////////////////////////////////////////////////// // The current panel, if any.