]> git.mxchange.org Git - flightgear.git/blobdiff - src/Cockpit/panel.hxx
#738: crash when switching 2D panels
[flightgear.git] / src / Cockpit / panel.hxx
index ab4f5264fabee673544d1a7ba01370b312607c45..361c43984f3e6fa485872097893adffe1ea8b8f7 100644 (file)
@@ -27,6 +27,8 @@
 
 #include <simgear/compiler.h>
 #include <simgear/props/props.hxx>
+#include <simgear/props/propertyObject.hxx>
+
 #include <simgear/structure/subsystem_mgr.hxx>
 #include <simgear/structure/SGBinding.hxx>
 #include <simgear/math/interpolater.hxx>
@@ -41,6 +43,7 @@
 class FGPanelInstrument;
 class fntFont;
 class DCLGPS;
+class IntRect;
 
 ////////////////////////////////////////////////////////////////////////
 // Texture management.
@@ -128,8 +131,9 @@ public:
   virtual void unbind ();
   virtual void draw (osg::State& state);
   virtual void update (double);
-  void update (osg::State& state);
-  virtual void update (osg::State& state, GLfloat winx, GLfloat winw, GLfloat winy, GLfloat winh);
+  //void update (osg::State& state);
+  //virtual void update (osg::State& state, GLfloat winx, GLfloat winw, GLfloat winy, GLfloat winh);
 
   virtual void updateMouseDelay();
 
@@ -163,9 +167,15 @@ public:
   virtual int getYOffset () const { return _y_offset->getIntValue(); }
 
                                // View height.
-  virtual void setViewHeight (int height) { _view_height = height; }
-  virtual int getViewHeight () const { return _view_height; }
-
+ // virtual void setViewHeight (int height) { _view_height = height; }
+ // virtual int getViewHeight () const { return _view_height; }
+
+  /**
+   * find the actual logical extend of the panel, including all instruments
+   * and actions.
+   */
+  void getLogicalExtent(int &x0, int& y0, int& x1, int &y1);
+  
                                // Handle a mouse click.
   virtual bool doMouseAction (int button, int updown, int x, int y);
   virtual bool doLocalMouseAction(int button, int updown, int x, int y);
@@ -174,6 +184,8 @@ public:
 
   bool getAutohide(void) const { return _autohide; };
   void setAutohide(bool enable) { _autohide = enable; };
+  
+  double getAspectScale() const;
 
 private:
   void setupVirtualCockpit();
@@ -186,7 +198,7 @@ private:
   typedef std::vector<FGPanelInstrument *> instrument_list_type;
   int _width;
   int _height;
-  int _view_height;
// int _view_height;
 
   SGPropertyNode_ptr _visibility;
   SGPropertyNode_ptr _x_offset;
@@ -203,6 +215,8 @@ private:
   instrument_list_type _instruments;
   bool _enable_depth_test;
   bool _autohide;
+  
+  SGPropObjBool _drawPanelHotspots;
 };
 
 
@@ -385,6 +399,7 @@ public:
                                // Coordinates relative to centre.
   virtual bool doMouseAction (int button, int updown, int x, int y);
 
+  void extendRect(IntRect& r) const;
 protected:
   int _x, _y, _w, _h;
   typedef std::vector<FGPanelAction *> action_list_type;