diff --git a/v3.3/glfw/input.c b/v3.3/glfw/input.c index 27e00cb4..6ec3e630 100644 --- a/v3.3/glfw/input.c +++ b/v3.3/glfw/input.c @@ -20,8 +20,9 @@ void glfwSetMouseButtonCallbackCB(GLFWwindow *window) { glfwSetMouseButtonCallback(window, (GLFWmousebuttonfun)goMouseButtonCB); } -void glfwSetCursorPosCallbackCB(GLFWwindow *window) { - glfwSetCursorPosCallback(window, (GLFWcursorposfun)goCursorPosCB); +void goCursorPosCB_call(GLFWcursorposfun cbfun, GLFWwindow *window, double xpos, double ypos) +{ + cbfun(window, xpos, ypos); } void glfwSetCursorEnterCallbackCB(GLFWwindow *window) { diff --git a/v3.3/glfw/input.go b/v3.3/glfw/input.go index 53640d3c..21958389 100644 --- a/v3.3/glfw/input.go +++ b/v3.3/glfw/input.go @@ -3,12 +3,15 @@ package glfw //#include //#define GLFW_INCLUDE_NONE //#include "glfw/include/GLFW/glfw3.h" +// +//void goCursorPosCB(GLFWwindow* window, double xpos, double ypos); +// //void glfwSetJoystickCallbackCB(); //void glfwSetKeyCallbackCB(GLFWwindow *window); //void glfwSetCharCallbackCB(GLFWwindow *window); //void glfwSetCharModsCallbackCB(GLFWwindow *window); //void glfwSetMouseButtonCallbackCB(GLFWwindow *window); -//void glfwSetCursorPosCallbackCB(GLFWwindow *window); +//void goCursorPosCB_call(GLFWcursorposfun cbfun, GLFWwindow *window, double xpos, double ypos); //void glfwSetCursorEnterCallbackCB(GLFWwindow *window); //void glfwSetScrollCallbackCB(GLFWwindow *window); //void glfwSetDropCallbackCB(GLFWwindow *window); @@ -335,8 +338,8 @@ func goMouseButtonCB(window unsafe.Pointer, button, action, mods C.int) { } //export goCursorPosCB -func goCursorPosCB(window unsafe.Pointer, xpos, ypos C.double) { - w := windows.get((*C.GLFWwindow)(window)) +func goCursorPosCB(window *C.GLFWwindow, xpos, ypos C.double) { + w := windows.get(window) w.fCursorPosHolder(w, float64(xpos), float64(ypos)) } @@ -685,13 +688,22 @@ type CursorPosCallback func(w *Window, xpos float64, ypos float64) func (w *Window) SetCursorPosCallback(cbfun CursorPosCallback) (previous CursorPosCallback) { previous = w.fCursorPosHolder w.fCursorPosHolder = cbfun + var previousC C.GLFWcursorposfun if cbfun == nil { - C.glfwSetCursorPosCallback(w.data, nil) + previousC = C.glfwSetCursorPosCallback(w.data, nil) } else { - C.glfwSetCursorPosCallbackCB(w.data) + previousC = C.glfwSetCursorPosCallback(w.data, (C.GLFWcursorposfun)(C.goCursorPosCB)) } panicError() - return previous + if previousC == nil { + return nil + } + if previousC == (C.GLFWcursorposfun)(C.goCursorPosCB) { + return previous + } + return func(w2 *Window, xpos2 float64, ypos2 float64) { + C.goCursorPosCB_call(previousC, w2.data, C.double(xpos2), C.double(ypos2)) + } } // CursorEnterCallback is the cursor boundary crossing callback.