]> git.mxchange.org Git - flightgear.git/commitdiff
Canvas/GUI: add/remove placement factories on init/shutdown.
authorThomas Geymayer <tomgey@gmail.com>
Sun, 24 Nov 2013 14:50:44 +0000 (15:50 +0100)
committerThomas Geymayer <tomgey@gmail.com>
Sun, 24 Nov 2013 14:50:44 +0000 (15:50 +0100)
src/Canvas/canvas_mgr.cxx
src/Canvas/canvas_mgr.hxx
src/Canvas/gui_mgr.cxx
src/Canvas/gui_mgr.hxx

index 29a1228bcbbaaf152792e36330e16985c95790a9..113da4f0cf878f660c5aecceb78b7671c72809d6 100644 (file)
@@ -68,6 +68,12 @@ CanvasMgr::CanvasMgr():
     &CanvasMgr::handleModelReinit,
     fgGetNode("/sim/signals/model-reinit", true)
   )
+{
+
+}
+
+//----------------------------------------------------------------------------
+void CanvasMgr::init()
 {
   sc::Canvas::addPlacementFactory
   (
@@ -81,8 +87,18 @@ CanvasMgr::CanvasMgr():
       _2
     )
   );
-
   sc::Canvas::addPlacementFactory("scenery-object", &addSceneObjectPlacement);
+
+  simgear::canvas::CanvasMgr::init();
+}
+
+//----------------------------------------------------------------------------
+void CanvasMgr::shutdown()
+{
+  simgear::canvas::CanvasMgr::shutdown();
+
+  sc::Canvas::removePlacementFactory("object");
+  sc::Canvas::removePlacementFactory("scenery-object");
 }
 
 //------------------------------------------------------------------------------
index c1bf7e7858f1639615513ac0f1a6d78725211693..4bc712bd9e44c014f7d80c9fb332d2d41c56212e 100644 (file)
@@ -28,6 +28,9 @@ class CanvasMgr:
   public:
     CanvasMgr();
 
+    virtual void init();
+    virtual void shutdown();
+
     /**
      * Get OpenGL texture name for given canvas
      *
index b501a2a4065107b3b7709b2ab4e23254c0c0b0b2..9346e06dee9be4ef03b56193f81976353b77395a 100644 (file)
@@ -136,27 +136,6 @@ class DesktopGroup:
 
       return Group::getChildFactory(type);
     }
-
-    /**
-     *
-     */
-    simgear::canvas::Placements
-    addPlacement(SGPropertyNode* node, simgear::canvas::CanvasPtr canvas)
-    {
-      const std::string& id = node->getStringValue("id");
-
-      simgear::canvas::Placements placements;
-      canvas::WindowPtr window = getChild<canvas::Window>(id);
-      if( window )
-      {
-        window->setCanvasContent(canvas);
-        placements.push_back(
-          simgear::canvas::PlacementPtr(
-            new WindowPlacement(node, window, canvas)
-        ));
-      }
-      return placements;
-    }
 };
 
 //------------------------------------------------------------------------------
@@ -199,13 +178,6 @@ DesktopGroup::DesktopGroup():
   assert(camera);
   camera->addChild( getMatrixTransform() );
 
-  simgear::canvas::Canvas::addPlacementFactory
-  (
-    "window",
-    boost::bind(&DesktopGroup::addPlacement, this, _1, _2)
-  );
-
-
   osg::StateSet* stateSet = _transform->getOrCreateStateSet();
   stateSet->setDataVariance(osg::Object::STATIC);
   stateSet->setRenderBinDetails(1000, "RenderBin");
@@ -548,6 +520,12 @@ void GUIMgr::init()
          // GUI is on top of everything so lets install as first event handler
          .push_front( _event_handler );
 
+
+  simgear::canvas::Canvas::addPlacementFactory
+  (
+    "window",
+    boost::bind(&GUIMgr::addWindowPlacement, this, _1, _2)
+  );
   _desktop->getProps()->addChangeListener(_desktop.get());
   _desktop->getProps()->fireCreatedRecursive();
 }
@@ -556,6 +534,7 @@ void GUIMgr::init()
 void GUIMgr::shutdown()
 {
   _desktop->getProps()->removeChangeListener(_desktop.get());
+  simgear::canvas::Canvas::removePlacementFactory("window");
 
   globals->get_renderer()
          ->getViewer()
@@ -573,3 +552,23 @@ simgear::canvas::GroupPtr GUIMgr::getDesktop()
 {
   return _desktop;
 }
+
+//------------------------------------------------------------------------------
+simgear::canvas::Placements
+GUIMgr::addWindowPlacement( SGPropertyNode* placement,
+                            simgear::canvas::CanvasPtr canvas )
+{
+  const std::string& id = placement->getStringValue("id");
+
+  simgear::canvas::Placements placements;
+  canvas::WindowPtr window = _desktop->getChild<canvas::Window>(id);
+  if( window )
+  {
+    window->setCanvasContent(canvas);
+    placements.push_back(
+      simgear::canvas::PlacementPtr(
+        new WindowPlacement(placement, window, canvas)
+    ));
+  }
+  return placements;
+}
index 0b1287af3b2904a0c0d855b0b860e6306e903cba..770c8077cd8bda8947c3ad635acc5db07eedecba 100644 (file)
@@ -58,6 +58,10 @@ class GUIMgr:
 
     simgear::canvas::GroupPtr           _desktop;
     osg::ref_ptr<GUIEventHandler>       _event_handler;
+
+    simgear::canvas::Placements
+    addWindowPlacement( SGPropertyNode* placement,
+                        simgear::canvas::CanvasPtr canvas );
 };
 
 #endif /* CANVAS_GUI_MGR_HXX_ */