diff options
-rw-r--r-- | spnav.py | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/spnav.py b/spnav.py deleted file mode 100644 index 4f1ff6b..0000000 --- a/spnav.py +++ /dev/null @@ -1,100 +0,0 @@ -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') - -SPNAV_EVENT_ANY = 0 -SPNAV_EVENT_MOTION = 1 -SPNAV_EVENT_BUTTON = 2 - -class spnav_event_motion(Structure): - _fields_ = [('type', c_int), - ('x', c_int), - ('y', c_int), - ('z', c_int), - ('rx', c_int), - ('ry', c_int), - ('rz', c_int), - ('period', c_uint), - ('data', c_void_p)] - -class spnav_event_button(Structure): - _fields_ = [('type', c_int), - ('press', c_int), - ('bnum', c_int)] - -class spnav_event(Union): - _fields_ = [('type', c_int), - ('motion', spnav_event_motion), - ('button', spnav_event_button) ] - - def __str__(self): - if self.type == SPNAV_EVENT_ANY: - return 'SPNAV_EVENT_ANY' - elif self.type == SPNAV_EVENT_MOTION: - m = self.motion - return 'SPNAV_EVENT_MOTION t(%d,%d,%d) r(%d,%d,%d)' % (m.x, m.y, m.z, m.rx, m.ry, m.rz) - elif self.type == SPNAV_EVENT_BUTTON: - if self.button.press: - state = 'down' - else: - state = 'up' - return 'SPNAV_EVENT_BUTTON %d %s' % (self.button.bnum, state) - -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) - if libspnav.spnav_x11_open(display_ptr, window) == -1: - raise Exception('failed to connect to the space navigator daemon') - -def spnav_x11_window(window): - libspnav.spnav_x11_window(window) - -def spnav_close(): - libspnav.spnav_close() - -def spnav_fd(): - return libspnav.spnav_fd() - -def spnav_wait_event(): - ev = spnav_event() - ret = libspnav.spnav_wait_event(byref(ev)) - if ret: - return ev - else: - raise Exception('non-zero return code from spnav_wait_event()') - -def spnav_poll_event(): - ev = spnav_event() - ret = libspnav.spnav_poll_event(byref(ev)) - if ret == 0: - return None - else: - return ev - -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: - while True: - ev = spnav_wait_event() - print ev - finally: - spnav_close() - |