void key_callback( GLFWwindow* window, int key, int scancode, int action, int mods ) { if (action != GLFW_PRESS) return; if (key == GLFW_KEY_ESCAPE && mods == 0) glfwSetWindowShouldClose(window, GLFW_TRUE); if ((key == GLFW_KEY_ENTER && mods == GLFW_MOD_ALT) || (key == GLFW_KEY_F11 && mods == GLFW_MOD_ALT)) { if (glfwGetWindowMonitor(window)) { glfwSetWindowMonitor(window, NULL, windowed_xpos, windowed_ypos, windowed_width, windowed_height, 0); } else { GLFWmonitor* monitor = glfwGetPrimaryMonitor(); if (monitor) { const GLFWvidmode* mode = glfwGetVideoMode(monitor); glfwGetWindowPos(window, &windowed_xpos, &windowed_ypos); glfwGetWindowSize(window, &windowed_width, &windowed_height); glfwSetWindowMonitor(window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate); } } } }
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) { if (action != GLFW_PRESS) return; switch (key) { case GLFW_KEY_UP: { if (swap_interval + 1 > swap_interval) set_swap_interval(window, swap_interval + 1); break; } case GLFW_KEY_DOWN: { if (swap_tear) { if (swap_interval - 1 < swap_interval) set_swap_interval(window, swap_interval - 1); } else { if (swap_interval - 1 >= 0) set_swap_interval(window, swap_interval - 1); } break; } case GLFW_KEY_ESCAPE: glfwSetWindowShouldClose(window, 1); break; case GLFW_KEY_F11: case GLFW_KEY_ENTER: { static int x, y, width, height; if (mods != GLFW_MOD_ALT) return; if (glfwGetWindowMonitor(window)) glfwSetWindowMonitor(window, NULL, x, y, width, height, 0); else { GLFWmonitor* monitor = glfwGetPrimaryMonitor(); const GLFWvidmode* mode = glfwGetVideoMode(monitor); glfwGetWindowPos(window, &x, &y); glfwGetWindowSize(window, &width, &height); glfwSetWindowMonitor(window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate); } break; } } }
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) { printf("%0.2f Key %s\n", glfwGetTime(), action == GLFW_PRESS ? "pressed" : "released"); if (action != GLFW_PRESS) return; switch (key) { case GLFW_KEY_I: glfwIconifyWindow(window); break; case GLFW_KEY_M: glfwMaximizeWindow(window); break; case GLFW_KEY_R: glfwRestoreWindow(window); break; case GLFW_KEY_ESCAPE: glfwSetWindowShouldClose(window, GLFW_TRUE); break; case GLFW_KEY_F11: case GLFW_KEY_ENTER: { if (mods != GLFW_MOD_ALT) return; if (glfwGetWindowMonitor(window)) { glfwSetWindowMonitor(window, NULL, windowed_xpos, windowed_ypos, windowed_width, windowed_height, 0); } else { GLFWmonitor* monitor = glfwGetPrimaryMonitor(); if (monitor) { const GLFWvidmode* mode = glfwGetVideoMode(monitor); glfwGetWindowPos(window, &windowed_xpos, &windowed_ypos); glfwGetWindowSize(window, &windowed_width, &windowed_height); glfwSetWindowMonitor(window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate); } } break; } } }
static void glfw_key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) { if (action == GLFW_PRESS) { if (key == GLFW_KEY_ESCAPE) { glfwSetWindowShouldClose(window, GLFW_TRUE); } else if (key == GLFW_KEY_F11 || key == GLFW_KEY_ENTER && mods == GLFW_MOD_ALT) { static int last_window_xpos, last_window_ypos; static int last_window_width, last_window_height; VK_CHECK(vkDeviceWaitIdle(vk.device)); GLFWmonitor* monitor = glfwGetWindowMonitor(window); if (monitor == nullptr) { glfwGetWindowPos(window, &last_window_xpos, &last_window_ypos); last_window_width = window_width; last_window_height = window_height; monitor = glfwGetPrimaryMonitor(); const GLFWvidmode* mode = glfwGetVideoMode(monitor); glfwSetWindowMonitor(window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate); } else { glfwSetWindowMonitor(window, nullptr, last_window_xpos, last_window_ypos, last_window_width, last_window_height, 0); } } } }
void Screen::fullscreen(bool full) { if ( full ) { batb->log << "batb->screen->fullscreen( true )" << std::endl; // save this before going fullscreen glfwGetWindowSize( glfw_window, &nonfullscreen_wth_, &nonfullscreen_hth_ ); glfwGetWindowPos( glfw_window, &nonfullscreen_xpos_, &nonfullscreen_ypos_ ); // full screen on glfw_monitor = glfwGetPrimaryMonitor(); auto mode = glfwGetVideoMode( glfw_monitor ); glfwSetWindowMonitor( glfw_window, glfw_monitor, 0, 0, mode->width, mode->height, mode->refreshRate); } else { batb->log << "batb->screen->fullscreen( false )" << std::endl; // back to window with previos pos and size glfw_monitor = nullptr; glfwSetWindowMonitor( glfw_window, glfw_monitor, nonfullscreen_xpos_, nonfullscreen_ypos_, nonfullscreen_wth_, nonfullscreen_hth_, 0 ); } }