From acffe2bdad8a4540987195583ec0a7bab77e7c01 Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Wed, 17 Apr 2013 01:45:13 -0700 Subject: [PATCH] Wrap mouse functions --- glut.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/glut.rs b/glut.rs index 680a431..e1fa9f1 100644 --- a/glut.rs +++ b/glut.rs @@ -9,7 +9,7 @@ /* automatically generated by rust-bindgen */ -use glut::bindgen::{glutCreateWindow, glutDestroyWindow, glutDisplayFunc, glutGet, glutGetWindow}; +use glut::bindgen::{glutCreateWindow, glutDestroyWindow, glutDisplayFunc, glutMouseFunc, glutMotionFunc, glutPassiveMotionFunc, glutGet, glutGetWindow}; use glut::bindgen::{glutInit, glutInitDisplayMode, glutPostRedisplay, glutReshapeFunc}; use glut::bindgen::{glutReshapeWindow, glutSetWindow, glutSwapBuffers, glutTimerFunc}; use core::libc::*; @@ -111,6 +111,60 @@ pub fn display_func(callback: @fn()) { } } +pub fn mouse_callback_tls_key(_callback: @@fn(button: c_int, state: c_int, x: c_int, y: c_int)) { + // Empty. +} + +pub extern fn mouse_callback(button: c_int, state: c_int, x: c_int, y: c_int) { + unsafe { + let callback = local_data_get(mouse_callback_tls_key).get(); + (*callback)(button, state, x, y); + } +} + +pub fn mouse_func(callback: @fn(button: c_int, state: c_int, x: c_int, y: c_int)) { + unsafe { + local_data_set(mouse_callback_tls_key, @callback); + glutMouseFunc(mouse_callback); + } +} + +pub fn motion_callback_tls_key(_callback: @@fn(x: c_int, y: c_int)) { + // Empty. +} + +pub extern fn motion_callback(x: c_int, y: c_int) { + unsafe { + let callback = local_data_get(motion_callback_tls_key).get(); + (*callback)(x, y); + } +} + +pub fn motion_func(callback: @fn(x: c_int, y: c_int)) { + unsafe { + local_data_set(motion_callback_tls_key, @callback); + glutMotionFunc(motion_callback); + } +} + +pub fn passive_motion_callback_tls_key(_callback: @@fn(x: c_int, y: c_int)) { + // Empty. +} + +pub extern fn passive_motion_callback(x: c_int, y: c_int) { + unsafe { + let callback = local_data_get(passive_motion_callback_tls_key).get(); + (*callback)(x, y); + } +} + +pub fn passive_motion_func(callback: @fn(x: c_int, y: c_int)) { + unsafe { + local_data_set(passive_motion_callback_tls_key, @callback); + glutPassiveMotionFunc(passive_motion_callback); + } +} + pub fn timer_callback_tls_key(_callback: @~[@fn()]) { // Empty. }