1
0
Fork 0
flightgear/src/Model/panelnode.hxx
2020-06-18 17:39:48 +01:00

90 lines
2.4 KiB
C++

#ifndef FG_PANELNODE_HXX
#define FG_PANELNODE_HXX
#include <osg/Vec3>
#include <osg/Matrix>
#include <osg/Drawable>
#include <osg/Version>
#include <memory>
#include <simgear/structure/SGSharedPtr.hxx>
#include <simgear/props/props.hxx>
class FGPanel;
class SGPropertyNode;
// PanelNode defines an OSG drawable wrapping the 2D panel drawing code
class FGPanelNode : public osg::Drawable
{
public:
FGPanelNode(SGPropertyNode* props);
virtual ~FGPanelNode();
// OSGFIXME
virtual osg::Object* cloneType() const { return 0; }
virtual osg::Object* clone(const osg::CopyOp& copyop) const { return 0; }
FGPanel* getPanel() { return _panel; }
virtual void drawImplementation(osg::RenderInfo& renderInfo) const
{ drawImplementation(*renderInfo.getState()); }
void drawImplementation(osg::State& state) const;
osg::BoundingBox computeBoundingBox() const override;
/** Return true, FGPanelNode does support accept(PrimitiveFunctor&). */
virtual bool supports(const osg::PrimitiveFunctor&) const { return true; }
virtual void accept(osg::PrimitiveFunctor& functor) const;
static osg::Node* load(SGPropertyNode *n);
static osg::Node* create2DPanelNode();
osg::Matrix transformMatrix() const;
void setPanelPath(const std::string& panel);
void lazyLoad();
/**
* is visible in 2D mode or not?
*/
bool isVisible2d() const;
private:
FGPanelNode(); // for 2D panels
void commonInit();
void initWithPanel();
bool panelMouseClickCommand(const SGPropertyNode * arg, SGPropertyNode * root);
const bool _is2d;
SGSharedPtr<FGPanel> _panel;
std::string _panelPath;
bool _resizeToViewport;
bool _depthTest;
// Panel corner coordinates
osg::Vec3 _bottomLeft, _topLeft, _bottomRight;
int _xmin, _ymin, _xmax, _ymax;
// The matrix that results, which transforms 2D x/y panel
// coordinates into 3D coordinates of the panel quadrilateral.
osg::Matrix _xform;
SGPropertyChangeListener* _listener;
std::unique_ptr<SGPropertyChangeListener> _pathListener;
/// should the 2D panel auto-hide when the view orientation changes
mutable SGPropertyNode_ptr _autoHide2d;
/// should the 2D panel be hidden in views other than the default (view 0)
mutable SGPropertyNode_ptr _hideNonDefaultViews;
};
#endif // FG_PANELNODE_HXX