#include "CameraGroup.hxx"
#include "FGEventHandler.hxx"
#include "WindowSystemAdapter.hxx"
+#include "renderer.hxx"
#if !defined(X_DISPLAY_MISSING)
#define X_DOUBLE_SCROLL_BUG 1
FGEventHandler::FGEventHandler() :
idleHandler(0),
- drawHandler(0),
- windowResizeHandler(0),
keyHandler(0),
mouseClickHandler(0),
mouseMotionHandler(0),
return true;
case osgGA::GUIEventAdapter::RESIZE:
CameraGroup::getDefault()->resized();
- if (resizable && windowResizeHandler)
- (*windowResizeHandler)(ea.getWindowWidth(), ea.getWindowHeight());
+ if (resizable)
+ globals->get_renderer()->resize(ea.getWindowWidth(), ea.getWindowHeight());
return true;
case osgGA::GUIEventAdapter::CLOSE_WINDOW:
case osgGA::GUIEventAdapter::QUIT_APPLICATION:
return idleHandler;
}
- void setDrawHandler(fgDrawHandler drawHandler)
- {
- this->drawHandler = drawHandler;
- }
-
- fgDrawHandler getDrawHandler() const
- {
- return drawHandler;
- }
-
- void setWindowResizeHandler(fgWindowResizeHandler windowResizeHandler)
- {
- this->windowResizeHandler = windowResizeHandler;
- }
-
- fgWindowResizeHandler getWindowResizeHandler() const
- {
- return windowResizeHandler;
- }
-
void setKeyHandler(fgKeyHandler keyHandler)
{
this->keyHandler = keyHandler;
protected:
osg::ref_ptr<osg::Node> _node;
fgIdleHandler idleHandler;
- fgDrawHandler drawHandler;
- fgWindowResizeHandler windowResizeHandler;
fgKeyHandler keyHandler;
fgMouseClickHandler mouseClickHandler;
fgMouseMotionHandler mouseMotionHandler;
globals->get_renderer()->getEventHandler()->setIdleHandler(func);
}
-void fgRegisterDrawHandler(fgDrawHandler func)
-{
- globals->get_renderer()->getEventHandler()->setDrawHandler(func);
-}
-
-void fgRegisterWindowResizeHandler(fgWindowResizeHandler func)
-{
- globals->get_renderer()->getEventHandler()->setWindowResizeHandler(func);
-}
-
void fgRegisterKeyHandler(fgKeyHandler func)
{
globals->get_renderer()->getEventHandler()->setKeyHandler(func);
viewer->realize();
while (!viewer->done()) {
fgIdleHandler idleFunc = manipulator->getIdleHandler();
- fgDrawHandler drawFunc = manipulator->getDrawHandler();
if (idleFunc)
(*idleFunc)();
- if (drawFunc)
- (*drawFunc)();
+ globals->get_renderer()->update(true);
viewer->frame();
}
}
}
-static void fgWinResizeFunction(int width, int height)
-{
- globals->get_renderer()->resize(width, height);
-}
-
static void upper_case_property(const char *name)
{
using namespace simgear;
fgOSInit(&argc, argv);
_bootstrap_OSInit++;
- fgRegisterWindowResizeHandler( &fgWinResizeFunction );
fgRegisterIdleHandler( &fgIdleFunction );
- fgRegisterDrawHandler( &FGRenderer::update );
// Initialize sockets (WinSock needs this)
simgear::Socket::initSockets();
stateSet->setAttributeAndModes(new osg::Program, osg::StateAttribute::ON);
}
-void
-FGRenderer::update()
-{
- globals->get_renderer()->update(true);
-}
-
// Update all Visuals (redraws anything graphics related)
void
FGRenderer::update( bool refresh_camera_settings ) {
// touch window or camera settings. This is useful for the tiled
// renderer which needs to set the view frustum itself.
void update( bool refresh_camera_settings);
- static void update();
-
+
/** Just pick into the scene and return the pick callbacks on the way ...
*/
bool pick( std::vector<SGSceneryPick>& pickList,