]> git.jsancho.org Git - guile-irrlicht.git/commitdiff
make-event-receiver get-event-type
authorJavier Sancho <jsf@jsancho.org>
Wed, 20 May 2020 07:24:50 +0000 (09:24 +0200)
committerJavier Sancho <jsf@jsancho.org>
Wed, 20 May 2020 07:24:50 +0000 (09:24 +0200)
irrlicht.scm
irrlicht/irr.scm
src/event-receiver.cpp
src/wrapped.cpp
src/wrapped.h

index c9bbd68b0dc57f1b1361a5e74654d377ea5b531e..3c54b18e66a8f9bb4508a68be05ad624ef5b10fd 100644 (file)
@@ -46,6 +46,7 @@
                end-scene
                get-absolute-transformation
                get-cursor-control
+               get-event-type
                get-file-system
                get-fps
                get-gui-environment
@@ -58,6 +59,7 @@
                get-video-driver
                is-window-active?
                make-box3d
+               make-event-receiver
                make-material
                make-vertex3d
                reset-box3d!
index 2c883583d341008a4e814631d53fd66094d33d2f..56bc6fa7b44afce40bc53c7c76acaed5c7bdaddb 100644 (file)
 (export <reference-counted> drop!)
 
 
+;; SEvent
+(define-class <event> (<irrlicht-base>)
+  (irr-class #:init-value "SEvent"))
+
+(define-method (get-event-type (event <event>))
+  (let ((SEvent_EventType (get-irrlicht-proc "EventType" event)))
+    (SEvent_EventType event)))
+
+(export <event> get-event-type)
+
+
 ;; IEventReceiver
 (define-class <event-receiver> (<irrlicht-base>)
   (irr-class #:init-value "IEventReceiver"))
 
-(export <event-receiver>)
+(define (make-event-receiver proc-on-event)
+  (let ((IEventReceiver_make (get-irrlicht-proc "IEventReceiver_make")))
+    (IEventReceiver_make proc-on-event)))
+
+(export <event-receiver> make-event-receiver)
 
 
 ;; SKeyMap
index 12ff718059404c901409f46f62a0a0e1518cac8b..f8f8a5572c822c8e21386eb1e58b7e42869399bf 100644 (file)
@@ -29,7 +29,7 @@
 using namespace irr;
 
 SCM
-IEventRecevier_make (SCM proc_on_event)
+IEventReceiver_make (SCM proc_on_event)
 {
   class CustomReceiver : public IEventReceiver
   {
@@ -43,12 +43,13 @@ IEventRecevier_make (SCM proc_on_event)
 
     virtual bool OnEvent (const SEvent& event)
     {
-      return scm_to_bool (scm_call_1 (scm_on_event, scm_from_pointer ((void*)&event, NULL)));
+      SCM wrapped_event = scm_from_irr_pointer ("irrlicht irr", "<event>", (void*) &event);
+      return scm_to_bool (scm_call_1 (scm_on_event, wrapped_event));
     }
   };
 
   CustomReceiver* receiver = new CustomReceiver (proc_on_event);
-  return scm_from_pointer ((void*)receiver, NULL);
+  return scm_from_irr_pointer ("irrlicht irr", "<event-receiver>", (void*) receiver);
 }
 
 SCM
@@ -90,7 +91,7 @@ SEvent_SKeyInput_PressedDown (SCM event)
 void
 init_event_receiver (void)
 {
-  DEFINE_GSUBR ("IEventRecevier_make", 1, 0, 0, IEventRecevier_make);
+  DEFINE_GSUBR ("IEventReceiver_make", 1, 0, 0, IEventReceiver_make);
   DEFINE_GSUBR ("SEvent_EventType", 1, 0, 0, SEvent_EventType);
   DEFINE_GSUBR ("SEvent_SGUIEvent_Caller", 1, 0, 0, SEvent_SGUIEvent_Caller);
   DEFINE_GSUBR ("SEvent_SGUIEvent_EventType", 1, 0, 0, SEvent_SGUIEvent_EventType);
index 81d413015d57397f4b451545689da85f2722d0dd..6da7adf5063ef7cce71dbd1539ceb8fca7993a5c 100644 (file)
 #include <libguile.h>
 #include "wrapped.h"
 
+/* Make a GOOPS instance from a C++ object pointer */
+SCM
+scm_from_irr_pointer (const char* module, const char* class_name, void* pointer)
+{
+  SCM scm_class = scm_variable_ref (scm_c_public_lookup (module, class_name));
+  SCM k_pointer = scm_from_utf8_keyword ("irr-pointer");
+  SCM scm_pointer = scm_from_pointer (pointer, NULL);
+  return scm_make (scm_list_3 (scm_class, k_pointer, scm_pointer));
+}
+
 /* Extract C++ irrlicht object pointer from Guile object */
 void*
 scm_to_irr_pointer (SCM obj)
index 136a6cd329b5f252cdc05cbadfe45e5f44da9b6e..21f080ef0de9b55f85ae897d5d0d2228a3e5954b 100644 (file)
@@ -24,6 +24,9 @@
 
 #include <libguile.h>
 
+SCM
+scm_from_irr_pointer (const char* module, const char* class_name, void* pointer);
+
 void*
 scm_to_irr_pointer (SCM obj);