GLUSvoid _glusOsPollEvents() { if (g_keyFileDescriptor >= 0) { static GLUSboolean LEFT_CTRL = GLUS_FALSE; static GLUSboolean RIGHT_CTRL = GLUS_FALSE; struct input_event keyEvent; ssize_t numBytes; do { numBytes = read(g_keyFileDescriptor, &keyEvent, sizeof(struct input_event)); if (numBytes > 0 && keyEvent.type == EV_KEY) { switch (keyEvent.value) { case 1: // Pressed { // CTRL-C if (keyEvent.code == 46 && (LEFT_CTRL || RIGHT_CTRL)) { _glusWindowInternalClose(); return; } else { if (keyEvent.code == 29) { LEFT_CTRL = GLUS_TRUE; } else if (keyEvent.code == 97) { RIGHT_CTRL = GLUS_TRUE; } _glusWindowInternalKey(glusOsTranslateKey(keyEvent.code), GLFW_PRESS); } } break; case 0: // Released { if (keyEvent.code == 29) { LEFT_CTRL = GLUS_FALSE; } else if (keyEvent.code == 97) { RIGHT_CTRL = GLUS_FALSE; } _glusWindowInternalKey(glusOsTranslateKey(keyEvent.code), GLFW_RELEASE); } break; } } } while (numBytes > 0); } if (g_touchFileDescriptor >= 0) { struct input_event touchEvent; ssize_t numBytes; int pressed = -1; int moved = 0; do { numBytes = read(g_touchFileDescriptor, &touchEvent, sizeof(struct input_event)); if (numBytes > 0) { if (touchEvent.type == EV_ABS) { if (touchEvent.code == 48) { if (touchEvent.value == 1 && !g_pressed) { pressed = 1; g_pressed = pressed; } else if (touchEvent.value == 0 && g_pressed) { pressed = 0; g_pressed = pressed; } } else if (touchEvent.code == 53) { g_currentX = g_displayWidth * touchEvent.value / ((1 << 15) - 1); moved = 1; } else if (touchEvent.code == 54) { g_currentY = g_displayHeight * touchEvent.value / ((1 << 15) - 1); moved = 1; } } else if (touchEvent.type == EV_SYN) { if (moved) { _glusWindowInternalMouseMove(g_currentX, g_currentY); } if (pressed == 1) { _glusWindowInternalMouse(GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS); } else if (pressed == 0) { _glusWindowInternalMouse(GLFW_MOUSE_BUTTON_LEFT, GLFW_RELEASE); } pressed = -1; moved = 0; } } } while (numBytes > 0); } }
GLUSvoid _glusOsPollEvents() { if (g_keyFileDescriptor >= 0) { static GLUSboolean LEFT_CTRL = GLUS_FALSE; static GLUSboolean RIGHT_CTRL = GLUS_FALSE; struct input_event keyEvent; ssize_t numBytes; do { numBytes = read(g_keyFileDescriptor, &keyEvent, sizeof(struct input_event)); if (numBytes > 0 && keyEvent.type == EV_KEY) { switch (keyEvent.value) { case 1: // Pressed { // CTRL-C if (keyEvent.code == 46 && (LEFT_CTRL || RIGHT_CTRL)) { _glusWindowInternalClose(); return; } else { if (keyEvent.code == 29) { LEFT_CTRL = GLUS_TRUE; } else if (keyEvent.code == 97) { RIGHT_CTRL = GLUS_TRUE; } _glusWindowInternalKey(glusOsTranslateKey(keyEvent.code), GLFW_PRESS); } } break; case 0: // Released { if (keyEvent.code == 29) { LEFT_CTRL = GLUS_FALSE; } else if (keyEvent.code == 97) { RIGHT_CTRL = GLUS_FALSE; } _glusWindowInternalKey(glusOsTranslateKey(keyEvent.code), GLFW_RELEASE); } break; } } } while (numBytes > 0); } if (g_touchFileDescriptor >= 0) { struct input_event touchEvent; ssize_t numBytes; int submitPosition = 0; do { numBytes = read(g_touchFileDescriptor, &touchEvent, sizeof(struct input_event)); if (numBytes > 0) { if (touchEvent.type == 1) { if (touchEvent.code == 330) { if (touchEvent.value == 1) { if (submitPosition) { _glusWindowInternalMouseMove(g_currentX, g_currentY); submitPosition = 0; } _glusWindowInternalMouse(GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS); } else if (touchEvent.value == 0) { _glusWindowInternalMouse(GLFW_MOUSE_BUTTON_LEFT, GLFW_RELEASE); } } } else if (touchEvent.type == 3) { if (touchEvent.code == 53) { g_currentX = g_displayWidth * touchEvent.value / ((1 << 15) - 1); submitPosition = 1; } else if (touchEvent.code == 54) { g_currentY = g_displayHeight * touchEvent.value / ((1 << 15) - 1); submitPosition = 1; } else if ((touchEvent.code == 0 || touchEvent.code == 1) && submitPosition) { _glusWindowInternalMouseMove(g_currentX, g_currentY); submitPosition = 0; } } } } while (numBytes > 0); } if (g_powermateFileDescriptor >= 0) { struct input_event powermateEvent; ssize_t numBytes; do { numBytes = read(g_powermateFileDescriptor, &powermateEvent, sizeof(struct input_event)); if (numBytes > 0) { if (powermateEvent.type == 1) { if (powermateEvent.code == 256) { if (powermateEvent.value == 1) { _glusWindowInternalMouse(GLFW_MOUSE_BUTTON_MIDDLE, GLFW_PRESS); } else if (powermateEvent.value == 0) { _glusWindowInternalMouse(GLFW_MOUSE_BUTTON_MIDDLE, GLFW_RELEASE); } } } else if (powermateEvent.type == 2) { if (powermateEvent.code == 7) { static int mouseWheel = 0; mouseWheel += powermateEvent.value; _glusWindowInternalMouseWheel(mouseWheel); } } } } while (numBytes > 0); } }