Fix Camera ownership for GUI-Manager
We can't assume the default/primary Camera for the View, is the GUI camera, so add explicit setting to get tooltips and popups working again.
This commit is contained in:
parent
5db4b5c871
commit
b91b6c4516
3 changed files with 18 additions and 9 deletions
|
@ -116,7 +116,7 @@ class DesktopGroup:
|
||||||
public sc::Group
|
public sc::Group
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DesktopGroup(osgViewer::View* view);
|
DesktopGroup(osg::Camera* camera);
|
||||||
|
|
||||||
void setFocusWindow(const sc::WindowPtr& window);
|
void setFocusWindow(const sc::WindowPtr& window);
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ bool GUIEventHandler::handle( const osgEA& ea,
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
DesktopGroup::DesktopGroup(osgViewer::View* view):
|
DesktopGroup::DesktopGroup(osg::Camera* camera):
|
||||||
Group(sc::CanvasPtr(), fgGetNode("/sim/gui/canvas", true)),
|
Group(sc::CanvasPtr(), fgGetNode("/sim/gui/canvas", true)),
|
||||||
_cb_mouse_mode( this,
|
_cb_mouse_mode( this,
|
||||||
&DesktopGroup::handleMouseMode,
|
&DesktopGroup::handleMouseMode,
|
||||||
|
@ -210,7 +210,6 @@ DesktopGroup::DesktopGroup(osgViewer::View* view):
|
||||||
_width(_node, "size[0]"),
|
_width(_node, "size[0]"),
|
||||||
_height(_node, "size[1]")
|
_height(_node, "size[1]")
|
||||||
{
|
{
|
||||||
auto camera = view->getCamera();
|
|
||||||
if( !camera )
|
if( !camera )
|
||||||
{
|
{
|
||||||
SG_LOG(SG_GUI, SG_WARN, "DesktopGroup: failed to get GUI camera.");
|
SG_LOG(SG_GUI, SG_WARN, "DesktopGroup: failed to get GUI camera.");
|
||||||
|
@ -642,9 +641,10 @@ GUIMgr::GUIMgr()
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
void GUIMgr::setGUIView(osgViewer::View* view)
|
void GUIMgr::setGUIViewAndCamera(osgViewer::View* view, osg::Camera* cam)
|
||||||
{
|
{
|
||||||
_viewerView = view;
|
_viewerView = view;
|
||||||
|
_camera = cam;
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
@ -666,7 +666,12 @@ void GUIMgr::init()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DesktopPtr desktop( new DesktopGroup(_viewerView) );
|
auto camera = _camera;
|
||||||
|
if (!camera) {
|
||||||
|
camera = _viewerView->getCamera();
|
||||||
|
}
|
||||||
|
|
||||||
|
DesktopPtr desktop( new DesktopGroup(camera) );
|
||||||
desktop->handleResize
|
desktop->handleResize
|
||||||
(
|
(
|
||||||
0,
|
0,
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
#include <osg/MatrixTransform>
|
#include <osg/MatrixTransform>
|
||||||
|
|
||||||
namespace osgViewer { class View; }
|
namespace osgViewer { class View; }
|
||||||
|
namespace osg { class Camera; }
|
||||||
|
|
||||||
namespace osgGA
|
namespace osgGA
|
||||||
{
|
{
|
||||||
class GUIEventAdapter;
|
class GUIEventAdapter;
|
||||||
|
@ -72,13 +74,14 @@ public:
|
||||||
void ungrabPointer(const simgear::canvas::WindowPtr& window);
|
void ungrabPointer(const simgear::canvas::WindowPtr& window);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* specify the osgViewer::View which contains the GUI.
|
* specify the osgViewer::View and Camera
|
||||||
*/
|
*/
|
||||||
void setGUIView(osgViewer::View* view);
|
void setGUIViewAndCamera(osgViewer::View* view, osg::Camera* cam);
|
||||||
protected:
|
protected:
|
||||||
simgear::canvas::GroupPtr _desktop;
|
simgear::canvas::GroupPtr _desktop;
|
||||||
osg::ref_ptr<GUIEventHandler> _event_handler;
|
osg::ref_ptr<GUIEventHandler> _event_handler;
|
||||||
osg::ref_ptr<osgViewer::View> _viewerView;;
|
osg::ref_ptr<osgViewer::View> _viewerView;
|
||||||
|
osg::ref_ptr<osg::Camera> _camera;
|
||||||
|
|
||||||
simgear::canvas::Placements
|
simgear::canvas::Placements
|
||||||
addWindowPlacement( SGPropertyNode* placement,
|
addWindowPlacement( SGPropertyNode* placement,
|
||||||
|
|
|
@ -1106,7 +1106,8 @@ void fgCreateSubsystems(bool duringReset) {
|
||||||
|
|
||||||
auto canvasGui = new GUIMgr;
|
auto canvasGui = new GUIMgr;
|
||||||
globals->add_subsystem("CanvasGUI", canvasGui, SGSubsystemMgr::DISPLAY);
|
globals->add_subsystem("CanvasGUI", canvasGui, SGSubsystemMgr::DISPLAY);
|
||||||
canvasGui->setGUIView(globals->get_renderer()->getView());
|
auto guiCamera = flightgear::getGUICamera(flightgear::CameraGroup::getDefault());
|
||||||
|
canvasGui->setGUIViewAndCamera(globals->get_renderer()->getView(), guiCamera);
|
||||||
|
|
||||||
#ifdef ENABLE_AUDIO_SUPPORT
|
#ifdef ENABLE_AUDIO_SUPPORT
|
||||||
globals->add_subsystem("voice", new FGVoiceMgr, SGSubsystemMgr::DISPLAY);
|
globals->add_subsystem("voice", new FGVoiceMgr, SGSubsystemMgr::DISPLAY);
|
||||||
|
|
Loading…
Reference in a new issue