mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 21:21:06 +01:00 
			
		
		
		
	Merge branch 'viewport' into docking
# Conflicts: # examples/example_glfw_opengl2/main.cpp # examples/example_glfw_opengl3/main.cpp # examples/example_glfw_vulkan/main.cpp # examples/example_sdl_opengl2/main.cpp # examples/example_sdl_opengl3/main.cpp # examples/example_sdl_vulkan/main.cpp # examples/example_win32_directx10/main.cpp # examples/example_win32_directx11/main.cpp # examples/example_win32_directx12/main.cpp # examples/example_win32_directx9/main.cpp
This commit is contained in:
		| @@ -40,6 +40,9 @@ int main(int, char**) | ||||
|     ImGuiIO& io = ImGui::GetIO(); (void)io; | ||||
|     io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;       // Enable Keyboard Controls | ||||
|     io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;           // Enable Docking | ||||
|     io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;         // Enable Multi-Viewport / Platform Windows | ||||
|     //io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoTaskBarIcons; | ||||
|     //io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoMerge; | ||||
|  | ||||
|     ImGui_ImplSDL2_InitForOpenGL(window, gl_context); | ||||
|     ImGui_ImplOpenGL2_Init(); | ||||
|   | ||||
| @@ -292,7 +292,7 @@ int main(int, char**) | ||||
|     ImGuiIO& io = ImGui::GetIO(); (void)io; | ||||
|     io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;       // Enable Keyboard Controls | ||||
|     io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;           // Enable Docking | ||||
|     io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;         // Enable Multi-Viewport / Platform Windows | ||||
|     //io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;       // Enable Multi-Viewport / Platform Windows (FIXME: Currently broken in DX12 back-end, need some work!) | ||||
|     //io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoTaskBarIcons; | ||||
|     //io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoMerge; | ||||
|  | ||||
|   | ||||
| @@ -81,6 +81,9 @@ int main(int, char**) | ||||
|     ImGuiIO& io = ImGui::GetIO(); (void)io; | ||||
|     io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;       // Enable Keyboard Controls | ||||
|     io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;           // Enable Docking | ||||
|     io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;         // Enable Multi-Viewport / Platform Windows | ||||
|     //io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoTaskBarIcons; | ||||
|     //io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoMerge; | ||||
|  | ||||
|     ImGui_ImplWin32_Init(hwnd); | ||||
|     ImGui_ImplDX9_Init(g_pd3dDevice); | ||||
|   | ||||
| @@ -45,6 +45,7 @@ | ||||
| #define GLFW_HAS_WINDOW_ALPHA       (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwSetWindowOpacity | ||||
| #define GLFW_HAS_PER_MONITOR_DPI    (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwGetMonitorContentScale | ||||
| #define GLFW_HAS_VULKAN             (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ glfwCreateWindowSurface | ||||
| #define GLFW_HAS_FOCUS_WINDOW       (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ glfwFocusWindow | ||||
|  | ||||
| // Data | ||||
| enum GlfwClientApi | ||||
| @@ -505,8 +506,13 @@ static void ImGui_ImplGlfw_SetWindowTitle(ImGuiViewport* viewport, const char* t | ||||
|  | ||||
| static void ImGui_ImplGlfw_SetWindowFocus(ImGuiViewport* viewport) | ||||
| { | ||||
| #if GLFW_HAS_FOCUS_WINDOW | ||||
|     ImGuiViewportDataGlfw* data = (ImGuiViewportDataGlfw*)viewport->PlatformUserData; | ||||
|     glfwFocusWindow(data->Window); | ||||
| #else | ||||
|     // FIXME: What are the effect of not having this function? At the moment imgui doesn't actually call SetWindowFocus - we set that up ahead, will answer that question later. | ||||
|     (void)viewport; | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static bool ImGui_ImplGlfw_GetWindowFocus(ImGuiViewport* viewport) | ||||
|   | ||||
| @@ -8813,6 +8813,7 @@ static void ImGui::NavUpdateWindowing() | ||||
|     // Apply final focus | ||||
|     if (apply_focus_window && (g.NavWindow == NULL || apply_focus_window != g.NavWindow->RootWindowDockStop)) | ||||
|     { | ||||
|         ImGuiViewport* previous_viewport = g.NavWindow ? g.NavWindow->Viewport : NULL; | ||||
|         g.NavDisableHighlight = false; | ||||
|         g.NavDisableMouseHover = true; | ||||
|         apply_focus_window = NavRestoreLastChildNavWindow(apply_focus_window); | ||||
| @@ -8824,6 +8825,10 @@ static void ImGui::NavUpdateWindowing() | ||||
|         // If the window only has a menu layer, select it directly | ||||
|         if (apply_focus_window->DC.NavLayerActiveMask == (1 << 1)) | ||||
|             g.NavLayer = 1; | ||||
|  | ||||
|         // Request OS level focus | ||||
|         if (apply_focus_window->Viewport != previous_viewport && g.PlatformIO.Platform_SetWindowFocus) | ||||
|             g.PlatformIO.Platform_SetWindowFocus(apply_focus_window->Viewport); | ||||
|     } | ||||
|     if (apply_focus_window) | ||||
|         g.NavWindowingTarget = NULL; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user