From 57b7eb0f16e47ed673cd5a80ac064634436baecd Mon Sep 17 00:00:00 2001 From: Stan Seibert Date: Tue, 9 Aug 2011 12:40:53 -0400 Subject: Update spnav ctypes wrapper to support X11-based communication. --- spnav.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'spnav.py') diff --git a/spnav.py b/spnav.py index 9079114..05ffe6d 100644 --- a/spnav.py +++ b/spnav.py @@ -1,4 +1,8 @@ -from ctypes import cdll, c_int, c_uint, c_void_p, byref, Structure, Union +from ctypes import cdll, c_int, c_uint, c_void_p, py_object, byref, Structure, Union, pythonapi + +# OMG CALLING CPYTHON FUNCTIONS FROM INSIDE PYTHON +pythonapi.PyCObject_AsVoidPtr.restype = c_void_p +pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] libspnav = cdll.LoadLibrary('libspnav.so') @@ -44,6 +48,13 @@ def spnav_open(): if libspnav.spnav_open() == -1: raise Exception('failed to connect to the space navigator daemon') +def spnav_x11_open(display, window): + display_ptr = pythonapi.PyCObject_AsVoidPtr(display) + libspnav.spnav_x11_open(display_ptr, window) + +def spnav_x11_window(window): + libspnav.spnav_x11_window(window) + def spnav_close(): libspnav.spnav_close() @@ -69,6 +80,14 @@ def spnav_poll_event(): def spnav_remove_events(event_type): return libspnav.spnav_remove_events(event_type) +def spnav_x11_event(xevent): + ev = spnav_event() + ret = libspnav.spnav_x11_event(xevent, byref(ev)) + if ret == 0: + return None + else: + return ev + if __name__ == '__main__': spnav_open() try: -- cgit