mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	IO: Added ImGuiConfigFlags_NoSetMouseCursors. Added ImGuiBackendFlags_HasMouseCursors, ImGuiBackendFlags_HasSetMousePos. (#787, #1495, #1202)
This commit is contained in:
		| @@ -91,6 +91,8 @@ Other Changes: | |||||||
| - Context: Removed allocator parameters from CreateContext(), they are now setup with SetAllocatorFunctions() and shared by all contexts. (#1565, #586, #992, #1007, #1558) | - Context: Removed allocator parameters from CreateContext(), they are now setup with SetAllocatorFunctions() and shared by all contexts. (#1565, #586, #992, #1007, #1558) | ||||||
| - Context: You may pass a ImFontAtlas to CreateContext() to specify a font atlas to share. Shared font atlas are not owned by the context and not destroyed along with it. | - Context: You may pass a ImFontAtlas to CreateContext() to specify a font atlas to share. Shared font atlas are not owned by the context and not destroyed along with it. | ||||||
| - Context: Added IMGUI_DISABLE_DEFAULT_ALLOCATORS to disable linking with malloc/free. (#1565, #586, #992, #1007, #1558) | - Context: Added IMGUI_DISABLE_DEFAULT_ALLOCATORS to disable linking with malloc/free. (#1565, #586, #992, #1007, #1558) | ||||||
|  | - IO: Added io.ConfigFlags for user application to store settings for imgui and for the back-end (currently: _NavEnableKeyboard, _NavEnableGamepad, _NavEnableSetMousePos, _NoSetMouseCursor). | ||||||
|  | - IO: Added io.BackendFlags for back-end to store its capabilities (currently: _HasGamepad, _HasMouseCursors, _HasSetMousePos). This will be used more in the next version. | ||||||
| - IO: Added ImGuiKey_Insert, ImGuiKey_Space keys. Setup in all example bindings. (#1541) | - IO: Added ImGuiKey_Insert, ImGuiKey_Space keys. Setup in all example bindings. (#1541) | ||||||
| - IO: Added Horizontal Mouse Wheel support for horizontal scrolling. (#1463) [@tseeker] | - IO: Added Horizontal Mouse Wheel support for horizontal scrolling. (#1463) [@tseeker] | ||||||
| - IO: Added IsAnyMouseDown() helper which is helpful for bindings to handle mouse capturing. | - IO: Added IsAnyMouseDown() helper which is helpful for bindings to handle mouse capturing. | ||||||
| @@ -159,6 +161,7 @@ Other Changes: | |||||||
| - Examples: Files in examples/ now include their own changelog so it is easier to occasionally update your bindings if needed. | - Examples: Files in examples/ now include their own changelog so it is easier to occasionally update your bindings if needed. | ||||||
| - Examples: Using Dark theme by default. (#707). Tweaked demo code. | - Examples: Using Dark theme by default. (#707). Tweaked demo code. | ||||||
| - Examples: Added support for horizontal mouse wheel for API that allows it. (#1463) [@tseeker] | - Examples: Added support for horizontal mouse wheel for API that allows it. (#1463) [@tseeker] | ||||||
|  | - Examples: All examples now setup the io.BackendFlags to signify they can honor mouse cursors, gamepad, etc. | ||||||
| - Examples: DirectX12: Added DirectX 12 example. (#301) [@jdm3] | - Examples: DirectX12: Added DirectX 12 example. (#301) [@jdm3] | ||||||
| - Examples: OpenGL3+GLFW,SDL: Changed GLSL shader version from 330 to 150. (#1466, #1504) | - Examples: OpenGL3+GLFW,SDL: Changed GLSL shader version from 330 to 150. (#1466, #1504) | ||||||
| - Examples: OpenGL3+GLFW,SDL: Added a way to override the GLSL version string in the Init function. (#1466, #1504). | - Examples: OpenGL3+GLFW,SDL: Added a way to override the GLSL version string in the Init function. (#1466, #1504). | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG  | // CHANGELOG  | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors and ImGuiBackendFlags_HasSetMousePos flags + honor ImGuiConfigFlags_NoSetMouseCursor flag. | ||||||
| //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | ||||||
| //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX10_RenderDrawData() in the .h file so you can call it yourself. | //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX10_RenderDrawData() in the .h file so you can call it yourself. | ||||||
| //  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. | //  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. | ||||||
| @@ -243,9 +244,12 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data) | |||||||
|     ctx->IASetInputLayout(old.InputLayout); if (old.InputLayout) old.InputLayout->Release(); |     ctx->IASetInputLayout(old.InputLayout); if (old.InputLayout) old.InputLayout->Release(); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void ImGui_ImplWin32_UpdateMouseCursor() | static bool ImGui_ImplWin32_UpdateMouseCursor() | ||||||
| { | { | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |     if (io.ConfigFlags & ImGuiConfigFlags_NoSetMouseCursor) | ||||||
|  |         return false; | ||||||
|  |  | ||||||
|     ImGuiMouseCursor imgui_cursor = io.MouseDrawCursor ? ImGuiMouseCursor_None : ImGui::GetMouseCursor(); |     ImGuiMouseCursor imgui_cursor = io.MouseDrawCursor ? ImGuiMouseCursor_None : ImGui::GetMouseCursor(); | ||||||
|     if (imgui_cursor == ImGuiMouseCursor_None) |     if (imgui_cursor == ImGuiMouseCursor_None) | ||||||
|     { |     { | ||||||
| @@ -268,6 +272,7 @@ static void ImGui_ImplWin32_UpdateMouseCursor() | |||||||
|         } |         } | ||||||
|         ::SetCursor(::LoadCursor(NULL, win32_cursor)); |         ::SetCursor(::LoadCursor(NULL, win32_cursor)); | ||||||
|     } |     } | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| // Process Win32 mouse/keyboard inputs.  | // Process Win32 mouse/keyboard inputs.  | ||||||
| @@ -337,11 +342,8 @@ IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wPa | |||||||
|             io.AddInputCharacter((unsigned short)wParam); |             io.AddInputCharacter((unsigned short)wParam); | ||||||
|         return 0; |         return 0; | ||||||
|     case WM_SETCURSOR: |     case WM_SETCURSOR: | ||||||
|         if (LOWORD(lParam) == HTCLIENT) |         if (LOWORD(lParam) == HTCLIENT && ImGui_ImplWin32_UpdateMouseCursor()) | ||||||
|         { |  | ||||||
|             ImGui_ImplWin32_UpdateMouseCursor(); |  | ||||||
|             return 1; |             return 1; | ||||||
|         } |  | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|     return 0; |     return 0; | ||||||
| @@ -584,8 +586,13 @@ bool    ImGui_ImplDX10_Init(void* hwnd, ID3D10Device* device) | |||||||
|     if (!QueryPerformanceCounter((LARGE_INTEGER *)&g_Time)) |     if (!QueryPerformanceCounter((LARGE_INTEGER *)&g_Time)) | ||||||
|         return false; |         return false; | ||||||
|  |  | ||||||
|  |     // Setup back-end capabilities flags | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|     io.KeyMap[ImGuiKey_Tab] = VK_TAB;                       // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array that we will update during the application lifetime. |     io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;   // We can honor GetMouseCursor() values | ||||||
|  |     io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;    // We can honor io.WantSetMousePos requests (optional, rarely used) | ||||||
|  |  | ||||||
|  |     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array that we will update during the application lifetime. | ||||||
|  |     io.KeyMap[ImGuiKey_Tab] = VK_TAB; | ||||||
|     io.KeyMap[ImGuiKey_LeftArrow] = VK_LEFT; |     io.KeyMap[ImGuiKey_LeftArrow] = VK_LEFT; | ||||||
|     io.KeyMap[ImGuiKey_RightArrow] = VK_RIGHT; |     io.KeyMap[ImGuiKey_RightArrow] = VK_RIGHT; | ||||||
|     io.KeyMap[ImGuiKey_UpArrow] = VK_UP; |     io.KeyMap[ImGuiKey_UpArrow] = VK_UP; | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors and ImGuiBackendFlags_HasSetMousePos flags + honor ImGuiConfigFlags_NoSetMouseCursor flag. | ||||||
| //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | ||||||
| //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX11_RenderDrawData() in the .h file so you can call it yourself. | //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX11_RenderDrawData() in the .h file so you can call it yourself. | ||||||
| //  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. | //  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. | ||||||
| @@ -250,9 +251,12 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data) | |||||||
|     ctx->IASetInputLayout(old.InputLayout); if (old.InputLayout) old.InputLayout->Release(); |     ctx->IASetInputLayout(old.InputLayout); if (old.InputLayout) old.InputLayout->Release(); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void ImGui_ImplWin32_UpdateMouseCursor() | static bool ImGui_ImplWin32_UpdateMouseCursor() | ||||||
| { | { | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |     if (io.ConfigFlags & ImGuiConfigFlags_NoSetMouseCursor) | ||||||
|  |         return false; | ||||||
|  |  | ||||||
|     ImGuiMouseCursor imgui_cursor = io.MouseDrawCursor ? ImGuiMouseCursor_None : ImGui::GetMouseCursor(); |     ImGuiMouseCursor imgui_cursor = io.MouseDrawCursor ? ImGuiMouseCursor_None : ImGui::GetMouseCursor(); | ||||||
|     if (imgui_cursor == ImGuiMouseCursor_None) |     if (imgui_cursor == ImGuiMouseCursor_None) | ||||||
|     { |     { | ||||||
| @@ -275,6 +279,7 @@ static void ImGui_ImplWin32_UpdateMouseCursor() | |||||||
|         } |         } | ||||||
|         ::SetCursor(::LoadCursor(NULL, win32_cursor)); |         ::SetCursor(::LoadCursor(NULL, win32_cursor)); | ||||||
|     } |     } | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| // Process Win32 mouse/keyboard inputs.  | // Process Win32 mouse/keyboard inputs.  | ||||||
| @@ -344,11 +349,8 @@ IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wPa | |||||||
|             io.AddInputCharacter((unsigned short)wParam); |             io.AddInputCharacter((unsigned short)wParam); | ||||||
|         return 0; |         return 0; | ||||||
|     case WM_SETCURSOR: |     case WM_SETCURSOR: | ||||||
|         if (LOWORD(lParam) == HTCLIENT) |         if (LOWORD(lParam) == HTCLIENT && ImGui_ImplWin32_UpdateMouseCursor()) | ||||||
|         { |  | ||||||
|             ImGui_ImplWin32_UpdateMouseCursor(); |  | ||||||
|             return 1; |             return 1; | ||||||
|         } |  | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|     return 0; |     return 0; | ||||||
| @@ -586,8 +588,13 @@ bool    ImGui_ImplDX11_Init(void* hwnd, ID3D11Device* device, ID3D11DeviceContex | |||||||
|     if (!QueryPerformanceCounter((LARGE_INTEGER *)&g_Time)) |     if (!QueryPerformanceCounter((LARGE_INTEGER *)&g_Time)) | ||||||
|         return false; |         return false; | ||||||
|  |  | ||||||
|  |     // Setup back-end capabilities flags | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|     io.KeyMap[ImGuiKey_Tab] = VK_TAB;                       // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array that we will update during the application lifetime. |     io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;   // We can honor GetMouseCursor() values (optional) | ||||||
|  |     io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;    // We can honor io.WantSetMousePos requests (optional, rarely used) | ||||||
|  |  | ||||||
|  |     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array that we will update during the application lifetime. | ||||||
|  |     io.KeyMap[ImGuiKey_Tab] = VK_TAB; | ||||||
|     io.KeyMap[ImGuiKey_LeftArrow] = VK_LEFT; |     io.KeyMap[ImGuiKey_LeftArrow] = VK_LEFT; | ||||||
|     io.KeyMap[ImGuiKey_RightArrow] = VK_RIGHT; |     io.KeyMap[ImGuiKey_RightArrow] = VK_RIGHT; | ||||||
|     io.KeyMap[ImGuiKey_UpArrow] = VK_UP; |     io.KeyMap[ImGuiKey_UpArrow] = VK_UP; | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors and ImGuiBackendFlags_HasSetMousePos flags + honor ImGuiConfigFlags_NoSetMouseCursor flag. | ||||||
| //  2018-02-22: Merged into master with all Win32 code synchronized to other examples. | //  2018-02-22: Merged into master with all Win32 code synchronized to other examples. | ||||||
|  |  | ||||||
| #include "imgui.h" | #include "imgui.h" | ||||||
| @@ -221,9 +222,12 @@ void ImGui_ImplDX12_RenderDrawData(ImDrawData* draw_data) | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| static void ImGui_ImplWin32_UpdateMouseCursor() | static bool ImGui_ImplWin32_UpdateMouseCursor() | ||||||
| { | { | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |     if (io.ConfigFlags & ImGuiConfigFlags_NoSetMouseCursor) | ||||||
|  |         return false; | ||||||
|  |  | ||||||
|     ImGuiMouseCursor imgui_cursor = io.MouseDrawCursor ? ImGuiMouseCursor_None : ImGui::GetMouseCursor(); |     ImGuiMouseCursor imgui_cursor = io.MouseDrawCursor ? ImGuiMouseCursor_None : ImGui::GetMouseCursor(); | ||||||
|     if (imgui_cursor == ImGuiMouseCursor_None) |     if (imgui_cursor == ImGuiMouseCursor_None) | ||||||
|     { |     { | ||||||
| @@ -246,6 +250,7 @@ static void ImGui_ImplWin32_UpdateMouseCursor() | |||||||
|         } |         } | ||||||
|         ::SetCursor(::LoadCursor(NULL, win32_cursor)); |         ::SetCursor(::LoadCursor(NULL, win32_cursor)); | ||||||
|     } |     } | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| // Process Win32 mouse/keyboard inputs.  | // Process Win32 mouse/keyboard inputs.  | ||||||
| @@ -315,11 +320,8 @@ IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wPa | |||||||
|             io.AddInputCharacter((unsigned short)wParam); |             io.AddInputCharacter((unsigned short)wParam); | ||||||
|         return 0; |         return 0; | ||||||
|     case WM_SETCURSOR: |     case WM_SETCURSOR: | ||||||
|         if (LOWORD(lParam) == HTCLIENT) |         if (LOWORD(lParam) == HTCLIENT && ImGui_ImplWin32_UpdateMouseCursor()) | ||||||
|         { |  | ||||||
|             ImGui_ImplWin32_UpdateMouseCursor(); |  | ||||||
|             return 1; |             return 1; | ||||||
|         } |  | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|     return 0; |     return 0; | ||||||
| @@ -718,8 +720,13 @@ bool    ImGui_ImplDX12_Init(void* hwnd, int num_frames_in_flight, | |||||||
|     if (!QueryPerformanceCounter((LARGE_INTEGER *)&g_Time)) |     if (!QueryPerformanceCounter((LARGE_INTEGER *)&g_Time)) | ||||||
|         return false; |         return false; | ||||||
|  |  | ||||||
|  |     // Setup back-end capabilities flags | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|     io.KeyMap[ImGuiKey_Tab] = VK_TAB;                       // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array that we will update during the application lifetime. |     io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;   // We can honor GetMouseCursor() values (optional) | ||||||
|  |     io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;    // We can honor io.WantSetMousePos requests (optional, rarely used) | ||||||
|  |  | ||||||
|  |     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array that we will update during the application lifetime. | ||||||
|  |     io.KeyMap[ImGuiKey_Tab] = VK_TAB; | ||||||
|     io.KeyMap[ImGuiKey_LeftArrow] = VK_LEFT; |     io.KeyMap[ImGuiKey_LeftArrow] = VK_LEFT; | ||||||
|     io.KeyMap[ImGuiKey_RightArrow] = VK_RIGHT; |     io.KeyMap[ImGuiKey_RightArrow] = VK_RIGHT; | ||||||
|     io.KeyMap[ImGuiKey_UpArrow] = VK_UP; |     io.KeyMap[ImGuiKey_UpArrow] = VK_UP; | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG  | // CHANGELOG  | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors and ImGuiBackendFlags_HasSetMousePos flags + honor ImGuiConfigFlags_NoSetMouseCursor flag. | ||||||
| //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | ||||||
| //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX9_RenderDrawData() in the .h file so you can call it yourself. | //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX9_RenderDrawData() in the .h file so you can call it yourself. | ||||||
| //  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. | //  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. | ||||||
| @@ -183,9 +184,12 @@ void ImGui_ImplDX9_RenderDrawData(ImDrawData* draw_data) | |||||||
|     d3d9_state_block->Release(); |     d3d9_state_block->Release(); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void ImGui_ImplWin32_UpdateMouseCursor() | static bool ImGui_ImplWin32_UpdateMouseCursor() | ||||||
| { | { | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |     if (io.ConfigFlags & ImGuiConfigFlags_NoSetMouseCursor) | ||||||
|  |         return false; | ||||||
|  |  | ||||||
|     ImGuiMouseCursor imgui_cursor = io.MouseDrawCursor ? ImGuiMouseCursor_None : ImGui::GetMouseCursor(); |     ImGuiMouseCursor imgui_cursor = io.MouseDrawCursor ? ImGuiMouseCursor_None : ImGui::GetMouseCursor(); | ||||||
|     if (imgui_cursor == ImGuiMouseCursor_None) |     if (imgui_cursor == ImGuiMouseCursor_None) | ||||||
|     { |     { | ||||||
| @@ -208,6 +212,7 @@ static void ImGui_ImplWin32_UpdateMouseCursor() | |||||||
|         } |         } | ||||||
|         ::SetCursor(::LoadCursor(NULL, win32_cursor)); |         ::SetCursor(::LoadCursor(NULL, win32_cursor)); | ||||||
|     } |     } | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| // Process Win32 mouse/keyboard inputs.  | // Process Win32 mouse/keyboard inputs.  | ||||||
| @@ -277,11 +282,8 @@ IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wPa | |||||||
|             io.AddInputCharacter((unsigned short)wParam); |             io.AddInputCharacter((unsigned short)wParam); | ||||||
|         return 0; |         return 0; | ||||||
|     case WM_SETCURSOR: |     case WM_SETCURSOR: | ||||||
|         if (LOWORD(lParam) == HTCLIENT) |         if (LOWORD(lParam) == HTCLIENT && ImGui_ImplWin32_UpdateMouseCursor()) | ||||||
|         { |  | ||||||
|             ImGui_ImplWin32_UpdateMouseCursor(); |  | ||||||
|             return 1; |             return 1; | ||||||
|         } |  | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|     return 0; |     return 0; | ||||||
| @@ -297,8 +299,13 @@ bool    ImGui_ImplDX9_Init(void* hwnd, IDirect3DDevice9* device) | |||||||
|     if (!QueryPerformanceCounter((LARGE_INTEGER *)&g_Time)) |     if (!QueryPerformanceCounter((LARGE_INTEGER *)&g_Time)) | ||||||
|         return false; |         return false; | ||||||
|  |  | ||||||
|  |     // Setup back-end capabilities flags | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|     io.KeyMap[ImGuiKey_Tab] = VK_TAB;                       // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array that we will update during the application lifetime. |     io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;   // We can honor GetMouseCursor() values (optional) | ||||||
|  |     io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;    // We can honor io.WantSetMousePos requests (optional, rarely used) | ||||||
|  |  | ||||||
|  |     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array that we will update during the application lifetime. | ||||||
|  |     io.KeyMap[ImGuiKey_Tab] = VK_TAB; | ||||||
|     io.KeyMap[ImGuiKey_LeftArrow] = VK_LEFT; |     io.KeyMap[ImGuiKey_LeftArrow] = VK_LEFT; | ||||||
|     io.KeyMap[ImGuiKey_RightArrow] = VK_RIGHT; |     io.KeyMap[ImGuiKey_RightArrow] = VK_RIGHT; | ||||||
|     io.KeyMap[ImGuiKey_UpArrow] = VK_UP; |     io.KeyMap[ImGuiKey_UpArrow] = VK_UP; | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors and ImGuiBackendFlags_HasSetMousePos flags + honor ImGuiConfigFlags_NoSetMouseCursor flag. | ||||||
| //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | ||||||
| //  2018-02-20: Inputs: Renamed GLFW callbacks exposed in .h to not include GL2 in their name. | //  2018-02-20: Inputs: Renamed GLFW callbacks exposed in .h to not include GL2 in their name. | ||||||
| //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplGlfwGL2_RenderDrawData() in the .h file so you can call it yourself. | //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplGlfwGL2_RenderDrawData() in the .h file so you can call it yourself. | ||||||
| @@ -233,8 +234,13 @@ bool    ImGui_ImplGlfwGL2_Init(GLFWwindow* window, bool install_callbacks) | |||||||
| { | { | ||||||
|     g_Window = window; |     g_Window = window; | ||||||
|  |  | ||||||
|  |     // Setup back-end capabilities flags | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|     io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB;                     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. |     io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;   // We can honor GetMouseCursor() values (optional) | ||||||
|  |     io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;    // We can honor io.WantSetMousePos requests (optional, rarely used) | ||||||
|  |  | ||||||
|  |     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. | ||||||
|  |     io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB; | ||||||
|     io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT; |     io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT; | ||||||
|     io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT; |     io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT; | ||||||
|     io.KeyMap[ImGuiKey_UpArrow] = GLFW_KEY_UP; |     io.KeyMap[ImGuiKey_UpArrow] = GLFW_KEY_UP; | ||||||
| @@ -339,15 +345,18 @@ void ImGui_ImplGlfwGL2_NewFrame() | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor |     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor | ||||||
|     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); |     if ((io.ConfigFlags & ImGuiConfigFlags_NoSetMouseCursor) == 0) | ||||||
|     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) |  | ||||||
|     { |     { | ||||||
|         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); |         ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); | ||||||
|     } |         if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) | ||||||
|     else |         { | ||||||
|     { |             glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); | ||||||
|         glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); |         } | ||||||
|         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); |         else | ||||||
|  |         { | ||||||
|  |             glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); | ||||||
|  |             glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. |     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. | ||||||
|   | |||||||
| @@ -13,6 +13,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors and ImGuiBackendFlags_HasSetMousePos flags + honor ImGuiConfigFlags_NoSetMouseCursor flag. | ||||||
| //  2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplGlfwGL3_Init() so user can override the GLSL version e.g. "#version 150". | //  2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplGlfwGL3_Init() so user can override the GLSL version e.g. "#version 150". | ||||||
| //  2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context. | //  2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context. | ||||||
| //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | ||||||
| @@ -365,8 +366,12 @@ bool    ImGui_ImplGlfwGL3_Init(GLFWwindow* window, bool install_callbacks, const | |||||||
|     strcpy(g_GlslVersion, glsl_version); |     strcpy(g_GlslVersion, glsl_version); | ||||||
|     strcat(g_GlslVersion, "\n"); |     strcat(g_GlslVersion, "\n"); | ||||||
|  |  | ||||||
|     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. |     // Setup back-end capabilities flags | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |     io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;   // We can honor GetMouseCursor() values (optional) | ||||||
|  |     io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;    // We can honor io.WantSetMousePos requests (optional, rarely used) | ||||||
|  |  | ||||||
|  |     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. | ||||||
|     io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB; |     io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB; | ||||||
|     io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT; |     io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT; | ||||||
|     io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT; |     io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT; | ||||||
| @@ -472,15 +477,18 @@ void ImGui_ImplGlfwGL3_NewFrame() | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor |     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor | ||||||
|     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); |     if ((io.ConfigFlags & ImGuiConfigFlags_NoSetMouseCursor) == 0) | ||||||
|     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) |  | ||||||
|     { |     { | ||||||
|         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); |         ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); | ||||||
|     } |         if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) | ||||||
|     else |         { | ||||||
|     { |             glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); | ||||||
|         glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); |         } | ||||||
|         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); |         else | ||||||
|  |         { | ||||||
|  |             glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); | ||||||
|  |             glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Gamepad navigation mapping [BETA] |     // Gamepad navigation mapping [BETA] | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoSetMouseCursor flag. | ||||||
| //  2018-02-16: Inputs: Added support for mouse cursors, honoring ImGui::GetMouseCursor() value. | //  2018-02-16: Inputs: Added support for mouse cursors, honoring ImGui::GetMouseCursor() value. | ||||||
| //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplSdlGL2_RenderDrawData() in the .h file so you can call it yourself. | //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplSdlGL2_RenderDrawData() in the .h file so you can call it yourself. | ||||||
| //  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. | //  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. | ||||||
| @@ -224,8 +225,11 @@ void    ImGui_ImplSdlGL2_InvalidateDeviceObjects() | |||||||
|  |  | ||||||
| bool    ImGui_ImplSdlGL2_Init(SDL_Window* window) | bool    ImGui_ImplSdlGL2_Init(SDL_Window* window) | ||||||
| { | { | ||||||
|     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. |     // Setup back-end capabilities flags | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |     io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;   // We can honor GetMouseCursor() values (optional) | ||||||
|  |  | ||||||
|  |     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. | ||||||
|     io.KeyMap[ImGuiKey_Tab] = SDL_SCANCODE_TAB; |     io.KeyMap[ImGuiKey_Tab] = SDL_SCANCODE_TAB; | ||||||
|     io.KeyMap[ImGuiKey_LeftArrow] = SDL_SCANCODE_LEFT; |     io.KeyMap[ImGuiKey_LeftArrow] = SDL_SCANCODE_LEFT; | ||||||
|     io.KeyMap[ImGuiKey_RightArrow] = SDL_SCANCODE_RIGHT; |     io.KeyMap[ImGuiKey_RightArrow] = SDL_SCANCODE_RIGHT; | ||||||
| @@ -330,15 +334,18 @@ void ImGui_ImplSdlGL2_NewFrame(SDL_Window *window) | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
|     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor |     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor | ||||||
|     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); |     if ((io.ConfigFlags & ImGuiConfigFlags_NoSetMouseCursor) == 0) | ||||||
|     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) |  | ||||||
|     { |     { | ||||||
|         SDL_ShowCursor(0); |         ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); | ||||||
|     } |         if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) | ||||||
|     else |         { | ||||||
|     { |             SDL_ShowCursor(0); | ||||||
|         SDL_SetCursor(g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); |         } | ||||||
|         SDL_ShowCursor(1); |         else | ||||||
|  |         { | ||||||
|  |             SDL_SetCursor(g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); | ||||||
|  |             SDL_ShowCursor(1); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. |     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. | ||||||
|   | |||||||
| @@ -12,6 +12,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoSetMouseCursor flag. | ||||||
| //  2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplSdlGL3_Init() so user can override the GLSL version e.g. "#version 150". | //  2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplSdlGL3_Init() so user can override the GLSL version e.g. "#version 150". | ||||||
| //  2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context. | //  2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context. | ||||||
| //  2018-02-16: Inputs: Added support for mouse cursors, honoring ImGui::GetMouseCursor() value. | //  2018-02-16: Inputs: Added support for mouse cursors, honoring ImGui::GetMouseCursor() value. | ||||||
| @@ -357,8 +358,11 @@ bool    ImGui_ImplSdlGL3_Init(SDL_Window* window, const char* glsl_version) | |||||||
|     strcpy(g_GlslVersion, glsl_version); |     strcpy(g_GlslVersion, glsl_version); | ||||||
|     strcat(g_GlslVersion, "\n"); |     strcat(g_GlslVersion, "\n"); | ||||||
|  |  | ||||||
|     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. |     // Setup back-end capabilities flags | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |     io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;   // We can honor GetMouseCursor() values (optional) | ||||||
|  |  | ||||||
|  |     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. | ||||||
|     io.KeyMap[ImGuiKey_Tab] = SDL_SCANCODE_TAB; |     io.KeyMap[ImGuiKey_Tab] = SDL_SCANCODE_TAB; | ||||||
|     io.KeyMap[ImGuiKey_LeftArrow] = SDL_SCANCODE_LEFT; |     io.KeyMap[ImGuiKey_LeftArrow] = SDL_SCANCODE_LEFT; | ||||||
|     io.KeyMap[ImGuiKey_RightArrow] = SDL_SCANCODE_RIGHT; |     io.KeyMap[ImGuiKey_RightArrow] = SDL_SCANCODE_RIGHT; | ||||||
| @@ -463,15 +467,18 @@ void ImGui_ImplSdlGL3_NewFrame(SDL_Window* window) | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
|     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor |     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor | ||||||
|     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); |     if ((io.ConfigFlags & ImGuiConfigFlags_NoSetMouseCursor) == 0) | ||||||
|     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) |  | ||||||
|     { |     { | ||||||
|         SDL_ShowCursor(0); |         ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); | ||||||
|     } |         if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) | ||||||
|     else |         { | ||||||
|     { |             SDL_ShowCursor(0); | ||||||
|         SDL_SetCursor(g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); |         } | ||||||
|         SDL_ShowCursor(1); |         else | ||||||
|  |         { | ||||||
|  |             SDL_SetCursor(g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); | ||||||
|  |             SDL_ShowCursor(1); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. |     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoSetMouseCursor flag. | ||||||
| //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | //  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). | ||||||
| //  2018-02-20: Inputs: Renamed GLFW callbacks exposed in .h to not include Vulkan in their name. | //  2018-02-20: Inputs: Renamed GLFW callbacks exposed in .h to not include Vulkan in their name. | ||||||
| //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback, ImGui_ImplGlfwVulkan_Render() calls ImGui_ImplGlfwVulkan_RenderDrawData() itself. | //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback, ImGui_ImplGlfwVulkan_Render() calls ImGui_ImplGlfwVulkan_RenderDrawData() itself. | ||||||
| @@ -769,8 +770,12 @@ bool    ImGui_ImplGlfwVulkan_Init(GLFWwindow* window, bool install_callbacks, Im | |||||||
|  |  | ||||||
|     g_Window = window; |     g_Window = window; | ||||||
|  |  | ||||||
|  |     // Setup back-end capabilities flags | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|     io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB;                         // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. |     io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;   // We can honor GetMouseCursor() values (optional) | ||||||
|  |  | ||||||
|  |     // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. | ||||||
|  |     io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB; | ||||||
|     io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT; |     io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT; | ||||||
|     io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT; |     io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT; | ||||||
|     io.KeyMap[ImGuiKey_UpArrow] = GLFW_KEY_UP; |     io.KeyMap[ImGuiKey_UpArrow] = GLFW_KEY_UP; | ||||||
| @@ -865,15 +870,18 @@ void ImGui_ImplGlfwVulkan_NewFrame() | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor |     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor | ||||||
|     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); |     if ((io.ConfigFlags & ImGuiConfigFlags_NoSetMouseCursor) == 0) | ||||||
|     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) |  | ||||||
|     { |     { | ||||||
|         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); |         ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); | ||||||
|     } |         if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) | ||||||
|     else |         { | ||||||
|     { |             glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); | ||||||
|         glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); |         } | ||||||
|         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); |         else | ||||||
|  |         { | ||||||
|  |             glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); | ||||||
|  |             glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. |     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. | ||||||
|   | |||||||
| @@ -237,7 +237,7 @@ | |||||||
|     - PS4 users: Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback. |     - PS4 users: Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback. | ||||||
|     - Consoles/Tablet/Phone users: Consider using a Synergy 1.x server (on your PC) + uSynergy.c (on your console/tablet/phone app) to share your PC mouse/keyboard. |     - Consoles/Tablet/Phone users: Consider using a Synergy 1.x server (on your PC) + uSynergy.c (on your console/tablet/phone app) to share your PC mouse/keyboard. | ||||||
|     - On a TV/console system where readability may be lower or mouse inputs may be awkward, you may want to set the ImGuiConfigFlags_NavEnableSetMousePos flag. |     - On a TV/console system where readability may be lower or mouse inputs may be awkward, you may want to set the ImGuiConfigFlags_NavEnableSetMousePos flag. | ||||||
|       Enabling ImGuiConfigFlags_NavEnableSetMousePos instructs dear imgui to move your mouse cursor along with navigation movements. |       Enabling ImGuiConfigFlags_NavEnableSetMousePos + ImGuiBackendFlags_HasSetMousePos instructs dear imgui to move your mouse cursor along with navigation movements. | ||||||
|       When enabled, the NewFrame() function may alter 'io.MousePos' and set 'io.WantSetMousePos' to notify you that it wants the mouse cursor to be moved. |       When enabled, the NewFrame() function may alter 'io.MousePos' and set 'io.WantSetMousePos' to notify you that it wants the mouse cursor to be moved. | ||||||
|       When that happens your back-end NEEDS to move the OS or underlying mouse cursor on the next frame. Some of the binding in examples/ do that. |       When that happens your back-end NEEDS to move the OS or underlying mouse cursor on the next frame. Some of the binding in examples/ do that. | ||||||
|       (If you set the NavEnableSetMousePos flag but don't honor 'io.WantSetMousePos' properly, imgui will misbehave as it will see your mouse as moving back and forth!) |       (If you set the NavEnableSetMousePos flag but don't honor 'io.WantSetMousePos' properly, imgui will misbehave as it will see your mouse as moving back and forth!) | ||||||
| @@ -3037,7 +3037,7 @@ static void ImGui::NavUpdate() | |||||||
|     if (g.NavMousePosDirty && g.NavIdIsAlive) |     if (g.NavMousePosDirty && g.NavIdIsAlive) | ||||||
|     { |     { | ||||||
|         // Set mouse position given our knowledge of the nav widget position from last frame |         // Set mouse position given our knowledge of the nav widget position from last frame | ||||||
|         if (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) |         if ((g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) && (g.IO.BackendFlags & ImGuiBackendFlags_HasSetMousePos)) | ||||||
|         { |         { | ||||||
|             g.IO.MousePos = g.IO.MousePosPrev = NavCalcPreferredMousePos(); |             g.IO.MousePos = g.IO.MousePosPrev = NavCalcPreferredMousePos(); | ||||||
|             g.IO.WantSetMousePos = true; |             g.IO.WantSetMousePos = true; | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -777,6 +777,7 @@ enum ImGuiConfigFlags_ | |||||||
|     ImGuiConfigFlags_NavEnableGamepad       = 1 << 1,   // Master gamepad navigation enable flag. This is mostly to instruct your imgui back-end to fill io.NavInputs[]. Back-end also needs to set ImGuiBackendFlags_HasGamepad. |     ImGuiConfigFlags_NavEnableGamepad       = 1 << 1,   // Master gamepad navigation enable flag. This is mostly to instruct your imgui back-end to fill io.NavInputs[]. Back-end also needs to set ImGuiBackendFlags_HasGamepad. | ||||||
|     ImGuiConfigFlags_NavEnableSetMousePos   = 1 << 2,   // Request navigation to allow moving the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is awkward. Will update io.MousePos and set io.WantSetMousePos=true. If enabled you MUST honor io.WantSetMousePos requests in your binding, otherwise ImGui will react as if the mouse is jumping around back and forth. |     ImGuiConfigFlags_NavEnableSetMousePos   = 1 << 2,   // Request navigation to allow moving the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is awkward. Will update io.MousePos and set io.WantSetMousePos=true. If enabled you MUST honor io.WantSetMousePos requests in your binding, otherwise ImGui will react as if the mouse is jumping around back and forth. | ||||||
|     ImGuiConfigFlags_NavNoCaptureKeyboard   = 1 << 3,   // Do not set the io.WantCaptureKeyboard flag with io.NavActive is set.  |     ImGuiConfigFlags_NavNoCaptureKeyboard   = 1 << 3,   // Do not set the io.WantCaptureKeyboard flag with io.NavActive is set.  | ||||||
|  |     ImGuiConfigFlags_NoSetMouseCursor       = 1 << 4,   // Request back-end to not alter mouse cursor configuration. | ||||||
|  |  | ||||||
|     // User storage (to allow your back-end/engine to communicate to code that may be shared between multiple projects. Those flags are not used by core ImGui) |     // User storage (to allow your back-end/engine to communicate to code that may be shared between multiple projects. Those flags are not used by core ImGui) | ||||||
|     ImGuiConfigFlags_IsSRGB                 = 1 << 20,  // Application is SRGB-aware. |     ImGuiConfigFlags_IsSRGB                 = 1 << 20,  // Application is SRGB-aware. | ||||||
| @@ -786,7 +787,9 @@ enum ImGuiConfigFlags_ | |||||||
| // Back-end capabilities flags stored in io.BackendFlags. Set by imgui_impl_xxx or custom back-end. | // Back-end capabilities flags stored in io.BackendFlags. Set by imgui_impl_xxx or custom back-end. | ||||||
| enum ImGuiBackendFlags_ | enum ImGuiBackendFlags_ | ||||||
| { | { | ||||||
|     ImGuiBackendFlags_HasGamepad            = 1 << 0    // Back-end has a connected gamepad |     ImGuiBackendFlags_HasGamepad            = 1 << 0,   // Back-end has a connected gamepad. | ||||||
|  |     ImGuiBackendFlags_HasMouseCursors       = 1 << 1,   // Back-end can honor GetMouseCursor() values and change the OS cursor shape. | ||||||
|  |     ImGuiBackendFlags_HasSetMousePos        = 1 << 2    // Back-end can honor io.WantSetMousePos and reposition the mouse (only used if ImGuiConfigFlags_NavEnableSetMousePos is set). | ||||||
| }; | }; | ||||||
|  |  | ||||||
| // Enumeration for PushStyleColor() / PopStyleColor() | // Enumeration for PushStyleColor() / PopStyleColor() | ||||||
|   | |||||||
| @@ -1849,6 +1849,7 @@ void ImGui::ShowDemoWindow(bool* p_open) | |||||||
|         ImGui::CheckboxFlags("io.ConfigFlags: NavEnableGamepad", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableGamepad); |         ImGui::CheckboxFlags("io.ConfigFlags: NavEnableGamepad", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableGamepad); | ||||||
|         ImGui::CheckboxFlags("io.ConfigFlags: NavEnableKeyboard", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableKeyboard); |         ImGui::CheckboxFlags("io.ConfigFlags: NavEnableKeyboard", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableKeyboard); | ||||||
|         ImGui::CheckboxFlags("io.ConfigFlags: NavEnableSetMousePos", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableSetMousePos); |         ImGui::CheckboxFlags("io.ConfigFlags: NavEnableSetMousePos", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableSetMousePos); | ||||||
|  |         ImGui::CheckboxFlags("io.ConfigFlags: NoSetMouseCursor", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NoSetMouseCursor); | ||||||
|         ImGui::SameLine(); ShowHelpMarker("Request ImGui to move your move cursor when using gamepad/keyboard navigation. NewFrame() will change io.MousePos and set the io.WantSetMousePos flag, your backend will need to apply the new mouse position."); |         ImGui::SameLine(); ShowHelpMarker("Request ImGui to move your move cursor when using gamepad/keyboard navigation. NewFrame() will change io.MousePos and set the io.WantSetMousePos flag, your backend will need to apply the new mouse position."); | ||||||
|  |  | ||||||
|         if (ImGui::TreeNode("Keyboard, Mouse & Navigation State")) |         if (ImGui::TreeNode("Keyboard, Mouse & Navigation State")) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user