]> git.mxchange.org Git - simgear.git/commitdiff
Canvas: simplify code by using new nasal function conversion.
authorThomas Geymayer <tomgey@gmail.com>
Tue, 15 Oct 2013 15:42:49 +0000 (17:42 +0200)
committerThomas Geymayer <tomgey@gmail.com>
Tue, 15 Oct 2013 15:46:42 +0000 (17:46 +0200)
simgear/canvas/CMakeLists.txt
simgear/canvas/Canvas.cxx
simgear/canvas/Canvas.hxx
simgear/canvas/CanvasEventListener.cxx [deleted file]
simgear/canvas/CanvasEventListener.hxx [deleted file]
simgear/canvas/CanvasEventManager.cxx
simgear/canvas/CanvasSystemAdapter.hxx
simgear/canvas/elements/CanvasElement.cxx
simgear/canvas/elements/CanvasElement.hxx

index 644f62afe285f9bb7a2fecc75d516130d1d6d4f3..086c83cb32d7563f2accb43bb0fe4e5f515ad472 100644 (file)
@@ -4,7 +4,6 @@ set(HEADERS
   canvas_fwd.hxx
   Canvas.hxx
   CanvasEvent.hxx
-  CanvasEventListener.hxx
   CanvasEventManager.hxx
   CanvasEventTypes.hxx
   CanvasEventVisitor.hxx
@@ -20,7 +19,6 @@ set(HEADERS
 set(SOURCES
   Canvas.cxx
   CanvasEvent.cxx
-  CanvasEventListener.cxx
   CanvasEventManager.cxx
   CanvasEventVisitor.cxx
   CanvasMgr.cxx
index 390c3ea0d1ab2dd7d762958f43c460bd05d453b4..a95964d6fd349fe0676af3be4326cf7dbd4568f7 100644 (file)
@@ -329,15 +329,6 @@ namespace canvas
     return _root_group->addEventListener(type, cb);
   }
 
-  //----------------------------------------------------------------------------
-  bool Canvas::addNasalEventListener(const std::string& type, naRef code)
-  {
-    if( !_root_group.get() )
-      throw std::runtime_error("Canvas::AddNasalEventListener: no root group!");
-
-    return _root_group->addNasalEventListener(type, code);
-  }
-
   //----------------------------------------------------------------------------
   void Canvas::setSizeX(int sx)
   {
index 481179b1940be71cb1e70e15bc21cc8c51449446..dba28863ba50caad18840ca9e75a3df23c6ba355 100644 (file)
@@ -133,7 +133,6 @@ namespace canvas
       void update(double delta_time_sec);
 
       bool addEventListener(const std::string& type, const EventListener& cb);
-      bool addNasalEventListener(const std::string& type, naRef code);
 
       void setSizeX(int sx);
       void setSizeY(int sy);
diff --git a/simgear/canvas/CanvasEventListener.cxx b/simgear/canvas/CanvasEventListener.cxx
deleted file mode 100644 (file)
index 5dcfab5..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-// Listener for canvas (GUI) events being passed to a Nasal function/code
-//
-// Copyright (C) 2012  Thomas Geymayer <tomgey@gmail.com>
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
-
-#include "CanvasEvent.hxx"
-#include "CanvasEventListener.hxx"
-#include "CanvasSystemAdapter.hxx"
-
-#include <simgear/nasal/cppbind/Ghost.hxx>
-
-namespace simgear
-{
-namespace canvas
-{
-
-  //----------------------------------------------------------------------------
-  NasalEventListener::NasalEventListener( naRef code,
-                                          const SystemAdapterPtr& sys_adapter ):
-    _code(code),
-    _gc_key(-1),
-    _sys(sys_adapter)
-  {
-    assert( sys_adapter );
-    if(    !naIsCode(code)
-        && !naIsCCode(code)
-        && !naIsFunc(code) )
-      throw std::runtime_error
-      (
-        "canvas::NasalEventListener: invalid function argument"
-      );
-
-    _gc_key = naGCSave(_code);
-  }
-
-  //----------------------------------------------------------------------------
-  NasalEventListener::~NasalEventListener()
-  {
-    naGCRelease(_gc_key);
-  }
-
-  //----------------------------------------------------------------------------
-  void NasalEventListener::operator()(const canvas::EventPtr& event) const
-  {
-    SystemAdapterPtr sys = _sys.lock();
-    if( !sys )
-      return;
-
-    naRef args[] = {
-      nasal::Ghost<EventPtr>::create(sys->getNasalContext(), event)
-    };
-    const int num_args = sizeof(args)/sizeof(args[0]);
-
-    sys->callMethod(_code, naNil(), num_args, args, naNil());
-  }
-
-} // namespace canvas
-} // namespace simgear
diff --git a/simgear/canvas/CanvasEventListener.hxx b/simgear/canvas/CanvasEventListener.hxx
deleted file mode 100644 (file)
index 6879345..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-// Listener for canvas (GUI) events being passed to a Nasal function/code
-//
-// Copyright (C) 2012  Thomas Geymayer <tomgey@gmail.com>
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
-
-#ifndef CANVAS_EVENT_LISTENER_HXX_
-#define CANVAS_EVENT_LISTENER_HXX_
-
-#include "canvas_fwd.hxx"
-#include <simgear/nasal/naref.h>
-
-namespace simgear
-{
-namespace canvas
-{
-
-  class NasalEventListener:
-    public SGReferenced
-  {
-    public:
-      NasalEventListener( naRef code,
-                          const SystemAdapterPtr& sys_adapter );
-      ~NasalEventListener();
-
-      void operator()(const canvas::EventPtr& event) const;
-
-    protected:
-      naRef _code;
-      int _gc_key;
-      SystemAdapterWeakPtr _sys;
-  };
-
-} // namespace canvas
-} // namespace simgear
-
-#endif /* CANVAS_EVENT_LISTENER_HXX_ */
index 50e8c49f189ae9c404392ddca87b1bc7c839aa6d..bac9d76995097614b7493b4d017c1c6cdc90f6e9 100644 (file)
@@ -19,6 +19,7 @@
 #include "CanvasEventManager.hxx"
 #include "MouseEvent.hxx"
 #include <simgear/canvas/elements/CanvasElement.hxx>
+#include <cmath>
 
 namespace simgear
 {
index 6a250f4da4dea8b6dcfdb727217d47a5351dbd51..91fc27400e370c0d121bafe953a70ebedf3a55d4 100644 (file)
@@ -20,7 +20,6 @@
 #define SG_CANVAS_SYSTEM_ADAPTER_HXX_
 
 #include "canvas_fwd.hxx"
-#include <simgear/nasal/nasal.h>
 
 namespace simgear
 {
@@ -36,17 +35,6 @@ namespace canvas
       virtual void addCamera(osg::Camera* camera) const = 0;
       virtual void removeCamera(osg::Camera* camera) const = 0;
       virtual osg::Image* getImage(const std::string& path) const = 0;
-
-      virtual naContext getNasalContext() const = 0;
-
-      /**
-       * Call a Nasal function with the given environment and arguments.
-       */
-      virtual naRef callMethod( naRef code,
-                                naRef self,
-                                int argc,
-                                naRef* args,
-                                naRef locals ) = 0;
   };
 
 } // namespace canvas
index 5ffde2a293e63c86c330a820c249c6633a46e31e..3692bf90bef5d0584b98471caf09bbe6949908cc 100644 (file)
@@ -18,7 +18,6 @@
 
 #include "CanvasElement.hxx"
 #include <simgear/canvas/Canvas.hxx>
-#include <simgear/canvas/CanvasEventListener.hxx>
 #include <simgear/canvas/CanvasEventVisitor.hxx>
 #include <simgear/canvas/MouseEvent.hxx>
 #include <simgear/math/SGMisc.hxx>
@@ -178,7 +177,7 @@ namespace canvas
   {
     SG_LOG
     (
-      SG_NASAL,
+      SG_GENERAL,
       SG_INFO,
       "addEventListener(" << _node->getPath() << ", " << type_str << ")"
     );
@@ -186,7 +185,7 @@ namespace canvas
     Event::Type type = Event::strToType(type_str);
     if( type == Event::UNKNOWN )
     {
-      SG_LOG( SG_NASAL,
+      SG_LOG( SG_GENERAL,
               SG_WARN,
               "addEventListener: Unknown event type " << type_str );
       return false;
@@ -197,19 +196,6 @@ namespace canvas
     return true;
   }
 
-  //----------------------------------------------------------------------------
-  bool Element::addNasalEventListener(const std::string& type, naRef code)
-  {
-    SGSharedPtr<NasalEventListener> listener =
-      new NasalEventListener(code, _canvas.lock()->getSystemAdapter());
-
-    return addEventListener
-    (
-      type,
-      boost::bind(&NasalEventListener::operator(), listener, _1)
-    );
-  }
-
   //----------------------------------------------------------------------------
   void Element::clearEventListener()
   {
index c7191984681378124f622cea54b6fe41e72de264..f44bee43bedef270722ef820c91ec73e41139115 100644 (file)
 #include <simgear/canvas/CanvasEvent.hxx>
 #include <simgear/props/PropertyBasedElement.hxx>
 #include <simgear/misc/stdint.hxx> // for uint32_t
-#include <simgear/nasal/cppbind/Ghost.hxx>
 
 #include <osg/BoundingBox>
 #include <osg/MatrixTransform>
 
 #include <boost/bind.hpp>
 #include <boost/function.hpp>
+#include <boost/type_traits/is_base_of.hpp>
 
 namespace osg
 {
@@ -93,8 +93,6 @@ namespace canvas
       virtual void update(double dt);
 
       bool addEventListener(const std::string& type, const EventListener& cb);
-      bool addNasalEventListener(const std::string& type, naRef code);
-
       virtual void clearEventListener();
 
       virtual bool accept(EventVisitor& visitor);