[:en]AntTweakBar & GLFW 3[:]
[:en]Yes, I am still using AntTweakBar. As you might know, the development of AntTweakBar is discontinued. At some point in the future, I will switch. Currently, I consider imgui the best successor. But I haven’t had time to look into imgui. So, when I resurrected an old small tool of mine, it still used ATB, and I did not want to recode all of this. But out of „because-I-can,“ I decided to update all dependencies to their newest versions. As a result the ATB integration with GLFW 3 did not work any longer. A couple of callback functions where changed between GLFW 2 and GLFW 3. I ended up rewriting my glue code between those two libraries.
Here it is, if any of you ever come across the same issue. First the callbacks:
static void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) { #ifdef HAS_ANTTWEAK_BAR if (action == GLFW_PRESS || action == GLFW_REPEAT) { int twMod = 0; bool ctrl; if (mods & GLFW_MOD_SHIFT) twMod |= TW_KMOD_SHIFT; if (ctrl = (mods & GLFW_MOD_CONTROL)) twMod |= TW_KMOD_CTRL; if (mods & GLFW_MOD_ALT) twMod |= TW_KMOD_ALT; int twKey = 0; switch (key) { case GLFW_KEY_BACKSPACE: twKey = TW_KEY_BACKSPACE; break; case GLFW_KEY_TAB: twKey = TW_KEY_TAB; break; //case GLFW_KEY_???: twKey = TW_KEY_CLEAR; break; case GLFW_KEY_ENTER: twKey = TW_KEY_RETURN; break; case GLFW_KEY_PAUSE: twKey = TW_KEY_PAUSE; break; case GLFW_KEY_ESCAPE: twKey = TW_KEY_ESCAPE; break; case GLFW_KEY_SPACE: twKey = TW_KEY_SPACE; break; case GLFW_KEY_DELETE: twKey = TW_KEY_DELETE; break; case GLFW_KEY_UP: twKey = TW_KEY_UP; break; case GLFW_KEY_DOWN: twKey = TW_KEY_DOWN; break; case GLFW_KEY_RIGHT: twKey = TW_KEY_RIGHT; break; case GLFW_KEY_LEFT: twKey = TW_KEY_LEFT; break; case GLFW_KEY_INSERT: twKey = TW_KEY_INSERT; break; case GLFW_KEY_HOME: twKey = TW_KEY_HOME; break; case GLFW_KEY_END: twKey = TW_KEY_END; break; case GLFW_KEY_PAGE_UP: twKey = TW_KEY_PAGE_UP; break; case GLFW_KEY_PAGE_DOWN: twKey = TW_KEY_PAGE_DOWN; break; case GLFW_KEY_F1: twKey = TW_KEY_F1; break; case GLFW_KEY_F2: twKey = TW_KEY_F2; break; case GLFW_KEY_F3: twKey = TW_KEY_F3; break; case GLFW_KEY_F4: twKey = TW_KEY_F4; break; case GLFW_KEY_F5: twKey = TW_KEY_F5; break; case GLFW_KEY_F6: twKey = TW_KEY_F6; break; case GLFW_KEY_F7: twKey = TW_KEY_F7; break; case GLFW_KEY_F8: twKey = TW_KEY_F8; break; case GLFW_KEY_F9: twKey = TW_KEY_F9; break; case GLFW_KEY_F10: twKey = TW_KEY_F10; break; case GLFW_KEY_F11: twKey = TW_KEY_F11; break; case GLFW_KEY_F12: twKey = TW_KEY_F12; break; case GLFW_KEY_F13: twKey = TW_KEY_F13; break; case GLFW_KEY_F14: twKey = TW_KEY_F14; break; case GLFW_KEY_F15: twKey = TW_KEY_F15; break; } if (twKey == 0 && ctrl && key < 128) { twKey = key; } if (twKey != 0) { if (::TwKeyPressed(twKey, twMod)) return; } } #endif } static void charCallback(GLFWwindow* window, unsigned int key) { #ifdef HAS_ANTTWEAK_BAR if (::TwKeyPressed(key, 0)) return; #endif } static void mousebuttonCallback(GLFWwindow* window, int button, int action, int mods) { #ifdef HAS_ANTTWEAK_BAR if (::TwEventMouseButtonGLFW(button, action)) return; #endif } static void mousePosCallback(GLFWwindow* window, double xpos, double ypos) { #ifdef HAS_ANTTWEAK_BAR if (::TwEventMousePosGLFW((int)xpos, (int)ypos)) return; #endif } static void mouseScrollCallback(GLFWwindow* window, double xoffset, double yoffset) { #ifdef HAS_ANTTWEAK_BAR static double pos = 0; pos += yoffset; if (::TwEventMouseWheelGLFW((int)pos)) return; #endif } static void resizeCallback(GLFWwindow* window, int width, int height) { #ifdef HAS_ANTTWEAK_BAR ::TwWindowSize(width, height); #endif }
Of course, you can omit the #ifdefs if you don’t care. Add your own codes to the functions after ATB has been handled.
Then, it’s just your typical initialization of GLFW callbacks:
::glfwSetKeyCallback(window, keyCallback); ::glfwSetCharCallback(window, charCallback); ::glfwSetMouseButtonCallback(window, mousebuttonCallback); ::glfwSetCursorPosCallback(window, mousePosCallback); ::glfwSetScrollCallback(window, mouseScrollCallback); ::glfwSetWindowSizeCallback(window, resizeCallback);
[:]
I still use it as well..