(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
using namespace irr;
SCM
-IEventRecevier_make (SCM proc_on_event)
+IEventReceiver_make (SCM proc_on_event)
{
class CustomReceiver : public IEventReceiver
{
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
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);
#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)