|
|
|
@ -36,10 +36,17 @@ |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
// Data
|
|
|
|
|
static GLFWwindow* g_Window = NULL; |
|
|
|
|
static double g_Time = 0.0f; |
|
|
|
|
static bool g_MouseJustPressed[5] = { false, false, false, false, false }; |
|
|
|
|
static GLFWcursor* g_MouseCursors[ImGuiMouseCursor_Count_] = { 0 }; |
|
|
|
|
enum GlfwClientApi |
|
|
|
|
{ |
|
|
|
|
GlfwClientApi_Unknown, |
|
|
|
|
GlfwClientApi_OpenGL, |
|
|
|
|
GlfwClientApi_Vulkan |
|
|
|
|
}; |
|
|
|
|
static GLFWwindow* g_Window = NULL; |
|
|
|
|
static GlfwClientApi g_ClientApi = GlfwClientApi_Unknown; |
|
|
|
|
static double g_Time = 0.0f; |
|
|
|
|
static bool g_MouseJustPressed[5] = { false, false, false, false, false }; |
|
|
|
|
static GLFWcursor* g_MouseCursors[ImGuiMouseCursor_Count_] = { 0 }; |
|
|
|
|
|
|
|
|
|
// Forward Declarations
|
|
|
|
|
static void ImGui_ImplGlfw_InitPlatformInterface(); |
|
|
|
@ -98,7 +105,7 @@ void ImGui_ImplGlfw_InstallCallbacks(GLFWwindow* window) |
|
|
|
|
glfwSetCharCallback(window, ImGui_ImplGlfw_CharCallback); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks) |
|
|
|
|
bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks) |
|
|
|
|
{ |
|
|
|
|
g_Window = window; |
|
|
|
|
|
|
|
|
@ -149,6 +156,15 @@ bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks) |
|
|
|
|
if (io.ConfigFlags & ImGuiConfigFlags_MultiViewports) |
|
|
|
|
ImGui_ImplGlfw_InitPlatformInterface(); |
|
|
|
|
|
|
|
|
|
g_ClientApi = GlfwClientApi_OpenGL; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool ImGui_ImplGlfw_InitForVulkan(GLFWwindow* window, bool install_callbacks) |
|
|
|
|
{ |
|
|
|
|
if (!ImGui_ImplGlfw_Init(window, install_callbacks)) |
|
|
|
|
return false; |
|
|
|
|
g_ClientApi = GlfwClientApi_Vulkan; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -161,6 +177,7 @@ void ImGui_ImplGlfw_Shutdown() |
|
|
|
|
glfwDestroyCursor(g_MouseCursors[cursor_n]); |
|
|
|
|
g_MouseCursors[cursor_n] = NULL; |
|
|
|
|
} |
|
|
|
|
g_ClientApi = GlfwClientApi_Unknown; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void ImGui_ImplGlfw_UpdateMouse() |
|
|
|
@ -176,7 +193,6 @@ static void ImGui_ImplGlfw_UpdateMouse() |
|
|
|
|
io.MouseHoveredViewport = 0; |
|
|
|
|
|
|
|
|
|
// Update buttons
|
|
|
|
|
ImGuiIO& io = ImGui::GetIO(); |
|
|
|
|
for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) |
|
|
|
|
{ |
|
|
|
|
// If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame.
|
|
|
|
@ -296,7 +312,8 @@ static void ImGui_ImplGlfw_CreateViewport(ImGuiViewport* viewport) |
|
|
|
|
glfwWindowHint(GLFW_VISIBLE, false); |
|
|
|
|
glfwWindowHint(GLFW_FOCUSED, false); |
|
|
|
|
glfwWindowHint(GLFW_DECORATED, (viewport->Flags & ImGuiViewportFlags_NoDecoration) ? false : true); |
|
|
|
|
data->Window = glfwCreateWindow((int)viewport->Size.x, (int)viewport->Size.y, "No Title Yet", NULL, g_Window); |
|
|
|
|
GLFWwindow* share_window = (g_ClientApi == GlfwClientApi_OpenGL) ? g_Window : NULL; |
|
|
|
|
data->Window = glfwCreateWindow((int)viewport->Size.x, (int)viewport->Size.y, "No Title Yet", NULL, share_window); |
|
|
|
|
data->WindowOwned = true; |
|
|
|
|
viewport->PlatformHandle = (void*)data->Window; |
|
|
|
|
viewport->Name = NULL; |
|
|
|
@ -405,7 +422,8 @@ static void ImGui_ImplGlfw_SetWindowTitle(ImGuiViewport* viewport, const char* t |
|
|
|
|
static void ImGui_ImplGlfw_RenderViewport(ImGuiViewport* viewport) |
|
|
|
|
{ |
|
|
|
|
ImGuiPlatformDataGlfw* data = (ImGuiPlatformDataGlfw*)viewport->PlatformUserData; |
|
|
|
|
glfwMakeContextCurrent(data->Window); |
|
|
|
|
if (g_ClientApi == GlfwClientApi_OpenGL) |
|
|
|
|
glfwMakeContextCurrent(data->Window); |
|
|
|
|
|
|
|
|
|
if (glfwWindowShouldClose(data->Window)) |
|
|
|
|
viewport->PlatformRequestClose = true; |
|
|
|
@ -414,7 +432,8 @@ static void ImGui_ImplGlfw_RenderViewport(ImGuiViewport* viewport) |
|
|
|
|
static void ImGui_ImplGlfw_SwapBuffers(ImGuiViewport* viewport) |
|
|
|
|
{ |
|
|
|
|
ImGuiPlatformDataGlfw* data = (ImGuiPlatformDataGlfw*)viewport->PlatformUserData; |
|
|
|
|
glfwSwapBuffers(data->Window); |
|
|
|
|
if (g_ClientApi == GlfwClientApi_OpenGL) |
|
|
|
|
glfwSwapBuffers(data->Window); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void ImGui_ImplGlfw_InitPlatformInterface() |
|
|
|
|