Examples: Added a bunch of comments/referencs related to io.WantCaptureMouse, io.WantCaptureKeyboard (#1262, #1237, #1219, #635, #1058, #1051, #912, #533, #703, #446, #459, #364, #213, #52, and more)

This commit is contained in:
omar 2017-11-01 14:24:09 +01:00
parent 59323b54da
commit fba704bf5d
21 changed files with 137 additions and 67 deletions

View File

@ -204,6 +204,10 @@ void ImGui_ImplA5_Shutdown()
ImGui::Shutdown(); ImGui::Shutdown();
} }
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
bool ImGui_ImplA5_ProcessEvent(ALLEGRO_EVENT *ev) bool ImGui_ImplA5_ProcessEvent(ALLEGRO_EVENT *ev)
{ {
ImGuiIO &io = ImGui::GetIO(); ImGuiIO &io = ImGui::GetIO();
@ -227,7 +231,6 @@ bool ImGui_ImplA5_ProcessEvent(ALLEGRO_EVENT *ev)
return false; return false;
} }
void ImGui_ImplA5_NewFrame() void ImGui_ImplA5_NewFrame()
{ {
if (!g_Texture) if (!g_Texture)
@ -290,6 +293,6 @@ void ImGui_ImplA5_NewFrame()
al_set_system_mouse_cursor(g_Display, cursor_id); al_set_system_mouse_cursor(g_Display, cursor_id);
} }
// Start the frame // 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.
ImGui::NewFrame(); ImGui::NewFrame();
} }

View File

@ -49,11 +49,16 @@ int main(int, char**)
bool running = true; bool running = true;
while (running) while (running)
{ {
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
ALLEGRO_EVENT ev; ALLEGRO_EVENT ev;
while (al_get_next_event(queue, &ev)) while (al_get_next_event(queue, &ev))
{ {
ImGui_ImplA5_ProcessEvent(&ev); ImGui_ImplA5_ProcessEvent(&ev);
if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) running = false; if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
running = false;
if (ev.type == ALLEGRO_EVENT_DISPLAY_RESIZE) if (ev.type == ALLEGRO_EVENT_DISPLAY_RESIZE)
{ {
ImGui_ImplA5_InvalidateDeviceObjects(); ImGui_ImplA5_InvalidateDeviceObjects();
@ -63,8 +68,8 @@ int main(int, char**)
} }
ImGui_ImplA5_NewFrame(); ImGui_ImplA5_NewFrame();
// 1. Show a simple window // 1. Show a simple window.
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug".
{ {
static float f; static float f;
ImGui::Text("Hello, world!"); ImGui::Text("Hello, world!");
@ -75,7 +80,7 @@ int main(int, char**)
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f/ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f/ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
} }
// 2. Show another simple window, this time using an explicit Begin/End pair // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window.
if (show_another_window) if (show_another_window)
{ {
ImGui::Begin("Another Window", &show_another_window); ImGui::Begin("Another Window", &show_another_window);
@ -83,7 +88,7 @@ int main(int, char**)
ImGui::End(); ImGui::End();
} }
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() // 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow().
if (show_test_window) if (show_test_window)
{ {
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver);

View File

@ -234,7 +234,12 @@ static bool IsAnyMouseButtonDown()
return false; return false;
} }
// We use the Win32 capture API (GetCapture/SetCapture/ReleaseCapture) to be able to read mouse coordinations when dragging mouse outside of our window bounds. // Process Win32 mouse/keyboard inputs.
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
// PS: In this Win32 handler, we use the capture API (GetCapture/SetCapture/ReleaseCapture) to be able to read mouse coordinations when dragging mouse outside of our window bounds.
IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
@ -604,6 +609,6 @@ void ImGui_ImplDX10_NewFrame()
if (io.MouseDrawCursor) if (io.MouseDrawCursor)
SetCursor(NULL); SetCursor(NULL);
// Start the frame // 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.
ImGui::NewFrame(); ImGui::NewFrame();
} }

View File

@ -150,6 +150,10 @@ int main(int, char**)
ZeroMemory(&msg, sizeof(msg)); ZeroMemory(&msg, sizeof(msg));
while (msg.message != WM_QUIT) while (msg.message != WM_QUIT)
{ {
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{ {
TranslateMessage(&msg); TranslateMessage(&msg);
@ -158,8 +162,8 @@ int main(int, char**)
} }
ImGui_ImplDX10_NewFrame(); ImGui_ImplDX10_NewFrame();
// 1. Show a simple window // 1. Show a simple window.
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug".
{ {
static float f = 0.0f; static float f = 0.0f;
ImGui::Text("Hello, world!"); ImGui::Text("Hello, world!");
@ -170,7 +174,7 @@ int main(int, char**)
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
} }
// 2. Show another simple window, this time using an explicit Begin/End pair // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window.
if (show_another_window) if (show_another_window)
{ {
ImGui::Begin("Another Window", &show_another_window); ImGui::Begin("Another Window", &show_another_window);
@ -178,7 +182,7 @@ int main(int, char**)
ImGui::End(); ImGui::End();
} }
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() // 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow().
if (show_test_window) if (show_test_window)
{ {
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); // Normally user code doesn't need/want to call it because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); // Normally user code doesn't need/want to call it because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly!

View File

@ -241,7 +241,12 @@ static bool IsAnyMouseButtonDown()
return false; return false;
} }
// We use the Win32 capture API (GetCapture/SetCapture/ReleaseCapture) to be able to read mouse coordinations when dragging mouse outside of our window bounds. // Process Win32 mouse/keyboard inputs.
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
// PS: In this Win32 handler, we use the capture API (GetCapture/SetCapture/ReleaseCapture) to be able to read mouse coordinations when dragging mouse outside of our window bounds.
IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
@ -607,6 +612,6 @@ void ImGui_ImplDX11_NewFrame()
if (io.MouseDrawCursor) if (io.MouseDrawCursor)
SetCursor(NULL); SetCursor(NULL);
// Start the frame // 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.
ImGui::NewFrame(); ImGui::NewFrame();
} }

View File

@ -153,6 +153,10 @@ int main(int, char**)
ZeroMemory(&msg, sizeof(msg)); ZeroMemory(&msg, sizeof(msg));
while (msg.message != WM_QUIT) while (msg.message != WM_QUIT)
{ {
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{ {
TranslateMessage(&msg); TranslateMessage(&msg);
@ -161,8 +165,8 @@ int main(int, char**)
} }
ImGui_ImplDX11_NewFrame(); ImGui_ImplDX11_NewFrame();
// 1. Show a simple window // 1. Show a simple window.
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug".
{ {
static float f = 0.0f; static float f = 0.0f;
ImGui::Text("Hello, world!"); ImGui::Text("Hello, world!");
@ -173,7 +177,7 @@ int main(int, char**)
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
} }
// 2. Show another simple window, this time using an explicit Begin/End pair // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window.
if (show_another_window) if (show_another_window)
{ {
ImGui::Begin("Another Window", &show_another_window); ImGui::Begin("Another Window", &show_another_window);
@ -181,7 +185,7 @@ int main(int, char**)
ImGui::End(); ImGui::End();
} }
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() // 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow().
if (show_test_window) if (show_test_window)
{ {
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); // Normally user code doesn't need/want to call it because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); // Normally user code doesn't need/want to call it because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly!

View File

@ -180,7 +180,12 @@ static bool IsAnyMouseButtonDown()
return false; return false;
} }
// We use the Win32 capture API (GetCapture/SetCapture/ReleaseCapture) to be able to read mouse coordinations when dragging mouse outside of our window bounds. // Process Win32 mouse/keyboard inputs.
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
// PS: In this Win32 handler, we use the capture API (GetCapture/SetCapture/ReleaseCapture) to be able to read mouse coordinations when dragging mouse outside of our window bounds.
IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
@ -381,6 +386,6 @@ void ImGui_ImplDX9_NewFrame()
if (io.MouseDrawCursor) if (io.MouseDrawCursor)
SetCursor(NULL); SetCursor(NULL);
// Start the frame // 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.
ImGui::NewFrame(); ImGui::NewFrame();
} }

View File

@ -104,6 +104,10 @@ int main(int, char**)
UpdateWindow(hwnd); UpdateWindow(hwnd);
while (msg.message != WM_QUIT) while (msg.message != WM_QUIT)
{ {
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{ {
TranslateMessage(&msg); TranslateMessage(&msg);
@ -112,8 +116,8 @@ int main(int, char**)
} }
ImGui_ImplDX9_NewFrame(); ImGui_ImplDX9_NewFrame();
// 1. Show a simple window // 1. Show a simple window.
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug".
{ {
static float f = 0.0f; static float f = 0.0f;
ImGui::Text("Hello, world!"); ImGui::Text("Hello, world!");
@ -124,7 +128,7 @@ int main(int, char**)
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
} }
// 2. Show another simple window, this time using an explicit Begin/End pair // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window.
if (show_another_window) if (show_another_window)
{ {
ImGui::Begin("Another Window", &show_another_window); ImGui::Begin("Another Window", &show_another_window);
@ -132,7 +136,7 @@ int main(int, char**)
ImGui::End(); ImGui::End();
} }
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() // 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow().
if (show_test_window) if (show_test_window)
{ {
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver);

View File

@ -27,7 +27,7 @@ static char* g_ClipboardText = NULL;
static bool g_osdKeyboardEnabled = false; static bool g_osdKeyboardEnabled = false;
// use this setting to scale the interface - e.g. on device you could use 2 or 3 scale factor // use this setting to scale the interface - e.g. on device you could use 2 or 3 scale factor
static ImVec2 g_scale = ImVec2(1.0f,1.0f); static ImVec2 g_RenderScale = ImVec2(1.0f,1.0f);
// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
void ImGui_Marmalade_RenderDrawLists(ImDrawData* draw_data) void ImGui_Marmalade_RenderDrawLists(ImDrawData* draw_data)
@ -48,9 +48,9 @@ void ImGui_Marmalade_RenderDrawLists(ImDrawData* draw_data)
for( int i=0; i < nVert; i++ ) for( int i=0; i < nVert; i++ )
{ {
// TODO: optimize multiplication on gpu using vertex shader // TODO: optimize multiplication on gpu using vertex shader/projection matrix.
pVertStream[i].x = cmd_list->VtxBuffer[i].pos.x * g_scale.x; pVertStream[i].x = cmd_list->VtxBuffer[i].pos.x * g_RenderScale.x;
pVertStream[i].y = cmd_list->VtxBuffer[i].pos.y * g_scale.y; pVertStream[i].y = cmd_list->VtxBuffer[i].pos.y * g_RenderScale.y;
pUVStream[i].x = cmd_list->VtxBuffer[i].uv.x; pUVStream[i].x = cmd_list->VtxBuffer[i].uv.x;
pUVStream[i].y = cmd_list->VtxBuffer[i].uv.y; pUVStream[i].y = cmd_list->VtxBuffer[i].uv.y;
pColStream[i] = cmd_list->VtxBuffer[i].col; pColStream[i] = cmd_list->VtxBuffer[i].col;
@ -287,7 +287,7 @@ void ImGui_Marmalade_NewFrame()
// TODO: Hide OS mouse cursor if ImGui is drawing it // TODO: Hide OS mouse cursor if ImGui is drawing it
// s3ePointerSetInt(S3E_POINTER_HIDE_CURSOR,(io.MouseDrawCursor ? 0 : 1)); // s3ePointerSetInt(S3E_POINTER_HIDE_CURSOR,(io.MouseDrawCursor ? 0 : 1));
// Start the frame // 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.
ImGui::NewFrame(); ImGui::NewFrame();
// Show/hide OSD keyboard // Show/hide OSD keyboard

View File

@ -43,12 +43,16 @@ int main(int, char**)
if (s3eDeviceCheckQuitRequest()) if (s3eDeviceCheckQuitRequest())
break; break;
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
s3eKeyboardUpdate(); s3eKeyboardUpdate();
s3ePointerUpdate(); s3ePointerUpdate();
ImGui_Marmalade_NewFrame(); ImGui_Marmalade_NewFrame();
// 1. Show a simple window // 1. Show a simple window.
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug".
{ {
static float f = 0.0f; static float f = 0.0f;
ImGui::Text("Hello, world!"); ImGui::Text("Hello, world!");
@ -59,7 +63,7 @@ int main(int, char**)
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
} }
// 2. Show another simple window, this time using an explicit Begin/End pair // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window.
if (show_another_window) if (show_another_window)
{ {
ImGui::Begin("Another Window", &show_another_window); ImGui::Begin("Another Window", &show_another_window);
@ -67,7 +71,7 @@ int main(int, char**)
ImGui::End(); ImGui::End();
} }
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() // 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow().
if (show_test_window) if (show_test_window)
{ {
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver);

View File

@ -137,7 +137,7 @@ void ImGui_ImplGlfwGL2_MouseButtonCallback(GLFWwindow*, int button, int action,
void ImGui_ImplGlfwGL2_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset) void ImGui_ImplGlfwGL2_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset)
{ {
g_MouseWheel += (float)yoffset; // Use fractional mouse wheel, 1.0 unit 5 lines. g_MouseWheel += (float)yoffset; // Use fractional mouse wheel.
} }
void ImGui_ImplGlfwGL2_KeyCallback(GLFWwindow*, int key, int, int action, int mods) void ImGui_ImplGlfwGL2_KeyCallback(GLFWwindow*, int key, int, int action, int mods)
@ -301,6 +301,6 @@ void ImGui_ImplGlfwGL2_NewFrame()
// Hide OS mouse cursor if ImGui is drawing it // Hide OS mouse cursor if ImGui is drawing it
glfwSetInputMode(g_Window, GLFW_CURSOR, io.MouseDrawCursor ? GLFW_CURSOR_HIDDEN : GLFW_CURSOR_NORMAL); glfwSetInputMode(g_Window, GLFW_CURSOR, io.MouseDrawCursor ? GLFW_CURSOR_HIDDEN : GLFW_CURSOR_NORMAL);
// Start the frame // 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.
ImGui::NewFrame(); ImGui::NewFrame();
} }

View File

@ -51,11 +51,15 @@ int main(int, char**)
// Main loop // Main loop
while (!glfwWindowShouldClose(window)) while (!glfwWindowShouldClose(window))
{ {
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
glfwPollEvents(); glfwPollEvents();
ImGui_ImplGlfwGL2_NewFrame(); ImGui_ImplGlfwGL2_NewFrame();
// 1. Show a simple window // 1. Show a simple window.
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug".
{ {
static float f = 0.0f; static float f = 0.0f;
ImGui::Text("Hello, world!"); ImGui::Text("Hello, world!");
@ -66,7 +70,7 @@ int main(int, char**)
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
} }
// 2. Show another simple window, this time using an explicit Begin/End pair // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window.
if (show_another_window) if (show_another_window)
{ {
ImGui::Begin("Another Window", &show_another_window); ImGui::Begin("Another Window", &show_another_window);
@ -74,7 +78,7 @@ int main(int, char**)
ImGui::End(); ImGui::End();
} }
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() // 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow().
if (show_test_window) if (show_test_window)
{ {
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver);
@ -87,7 +91,7 @@ int main(int, char**)
glViewport(0, 0, display_w, display_h); glViewport(0, 0, display_w, display_h);
glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w);
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
//glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound //glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound, but prefer using the GL3+ code.
ImGui::Render(); ImGui::Render();
glfwSwapBuffers(window); glfwSwapBuffers(window);
} }

View File

@ -157,7 +157,7 @@ void ImGui_ImplGlfwGL3_MouseButtonCallback(GLFWwindow*, int button, int action,
void ImGui_ImplGlfwGL3_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset) void ImGui_ImplGlfwGL3_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset)
{ {
g_MouseWheel += (float)yoffset; // Use fractional mouse wheel, 1.0 unit 5 lines. g_MouseWheel += (float)yoffset; // Use fractional mouse wheel.
} }
void ImGui_ImplGlfwGL3_KeyCallback(GLFWwindow*, int key, int, int action, int mods) void ImGui_ImplGlfwGL3_KeyCallback(GLFWwindow*, int key, int, int action, int mods)
@ -414,6 +414,6 @@ void ImGui_ImplGlfwGL3_NewFrame()
// Hide OS mouse cursor if ImGui is drawing it // Hide OS mouse cursor if ImGui is drawing it
glfwSetInputMode(g_Window, GLFW_CURSOR, io.MouseDrawCursor ? GLFW_CURSOR_HIDDEN : GLFW_CURSOR_NORMAL); glfwSetInputMode(g_Window, GLFW_CURSOR, io.MouseDrawCursor ? GLFW_CURSOR_HIDDEN : GLFW_CURSOR_NORMAL);
// Start the frame // 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.
ImGui::NewFrame(); ImGui::NewFrame();
} }

View File

@ -57,11 +57,15 @@ int main(int, char**)
// Main loop // Main loop
while (!glfwWindowShouldClose(window)) while (!glfwWindowShouldClose(window))
{ {
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
glfwPollEvents(); glfwPollEvents();
ImGui_ImplGlfwGL3_NewFrame(); ImGui_ImplGlfwGL3_NewFrame();
// 1. Show a simple window // 1. Show a simple window.
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug".
{ {
static float f = 0.0f; static float f = 0.0f;
ImGui::Text("Hello, world!"); ImGui::Text("Hello, world!");
@ -72,7 +76,7 @@ int main(int, char**)
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
} }
// 2. Show another simple window, this time using an explicit Begin/End pair // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window.
if (show_another_window) if (show_another_window)
{ {
ImGui::Begin("Another Window", &show_another_window); ImGui::Begin("Another Window", &show_another_window);
@ -80,7 +84,7 @@ int main(int, char**)
ImGui::End(); ImGui::End();
} }
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() // 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow().
if (show_test_window) if (show_test_window)
{ {
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver);

View File

@ -122,6 +122,10 @@ static void ImGui_ImplSdl_SetClipboardText(void*, const char* text)
SDL_SetClipboardText(text); SDL_SetClipboardText(text);
} }
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
bool ImGui_ImplSdlGL2_ProcessEvent(SDL_Event* event) bool ImGui_ImplSdlGL2_ProcessEvent(SDL_Event* event)
{ {
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
@ -286,6 +290,6 @@ void ImGui_ImplSdlGL2_NewFrame(SDL_Window *window)
// Hide OS mouse cursor if ImGui is drawing it // Hide OS mouse cursor if ImGui is drawing it
SDL_ShowCursor(io.MouseDrawCursor ? 0 : 1); SDL_ShowCursor(io.MouseDrawCursor ? 0 : 1);
// Start the frame // 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.
ImGui::NewFrame(); ImGui::NewFrame();
} }

View File

@ -2,6 +2,9 @@
// If you are new to ImGui, see examples/README.txt and documentation at the top of imgui.cpp. // If you are new to ImGui, see examples/README.txt and documentation at the top of imgui.cpp.
// (SDL is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.) // (SDL is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.)
// *DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL*
// See imgui_impl_sdl.cpp for details.
#include <imgui.h> #include <imgui.h>
#include "imgui_impl_sdl.h" #include "imgui_impl_sdl.h"
#include <stdio.h> #include <stdio.h>
@ -55,6 +58,10 @@ int main(int, char**)
bool done = false; bool done = false;
while (!done) while (!done)
{ {
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
SDL_Event event; SDL_Event event;
while (SDL_PollEvent(&event)) while (SDL_PollEvent(&event))
{ {
@ -65,7 +72,7 @@ int main(int, char**)
ImGui_ImplSdlGL2_NewFrame(window); ImGui_ImplSdlGL2_NewFrame(window);
// 1. Show a simple window // 1. Show a simple window
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug".
{ {
static float f = 0.0f; static float f = 0.0f;
ImGui::Text("Hello, world!"); ImGui::Text("Hello, world!");
@ -76,7 +83,7 @@ int main(int, char**)
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
} }
// 2. Show another simple window, this time using an explicit Begin/End pair // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window.
if (show_another_window) if (show_another_window)
{ {
ImGui::Begin("Another Window", &show_another_window); ImGui::Begin("Another Window", &show_another_window);
@ -84,7 +91,7 @@ int main(int, char**)
ImGui::End(); ImGui::End();
} }
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() // 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow().
if (show_test_window) if (show_test_window)
{ {
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver);

View File

@ -143,6 +143,10 @@ static void ImGui_ImplSdlGL3_SetClipboardText(void*, const char* text)
SDL_SetClipboardText(text); SDL_SetClipboardText(text);
} }
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
bool ImGui_ImplSdlGL3_ProcessEvent(SDL_Event* event) bool ImGui_ImplSdlGL3_ProcessEvent(SDL_Event* event)
{ {
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
@ -398,6 +402,6 @@ void ImGui_ImplSdlGL3_NewFrame(SDL_Window* window)
// Hide OS mouse cursor if ImGui is drawing it // Hide OS mouse cursor if ImGui is drawing it
SDL_ShowCursor(io.MouseDrawCursor ? 0 : 1); SDL_ShowCursor(io.MouseDrawCursor ? 0 : 1);
// Start the frame // 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.
ImGui::NewFrame(); ImGui::NewFrame();
} }

View File

@ -59,6 +59,10 @@ int main(int, char**)
bool done = false; bool done = false;
while (!done) while (!done)
{ {
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
SDL_Event event; SDL_Event event;
while (SDL_PollEvent(&event)) while (SDL_PollEvent(&event))
{ {
@ -68,8 +72,8 @@ int main(int, char**)
} }
ImGui_ImplSdlGL3_NewFrame(window); ImGui_ImplSdlGL3_NewFrame(window);
// 1. Show a simple window // 1. Show a simple window.
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug".
{ {
static float f = 0.0f; static float f = 0.0f;
ImGui::Text("Hello, world!"); ImGui::Text("Hello, world!");
@ -80,7 +84,7 @@ int main(int, char**)
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
} }
// 2. Show another simple window, this time using an explicit Begin/End pair // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window.
if (show_another_window) if (show_another_window)
{ {
ImGui::Begin("Another Window", &show_another_window); ImGui::Begin("Another Window", &show_another_window);
@ -88,7 +92,7 @@ int main(int, char**)
ImGui::End(); ImGui::End();
} }
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() // 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow().
if (show_test_window) if (show_test_window)
{ {
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver);

View File

@ -332,7 +332,7 @@ void ImGui_ImplGlfwVulkan_MouseButtonCallback(GLFWwindow*, int button, int actio
void ImGui_ImplGlfwVulkan_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset) void ImGui_ImplGlfwVulkan_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset)
{ {
g_MouseWheel += (float)yoffset; // Use fractional mouse wheel, 1.0 unit 5 lines. g_MouseWheel += (float)yoffset; // Use fractional mouse wheel.
} }
void ImGui_ImplGlfwVulkan_KeyCallback(GLFWwindow*, int key, int, int action, int mods) void ImGui_ImplGlfwVulkan_KeyCallback(GLFWwindow*, int key, int, int action, int mods)
@ -830,7 +830,7 @@ void ImGui_ImplGlfwVulkan_NewFrame()
// Hide OS mouse cursor if ImGui is drawing it // Hide OS mouse cursor if ImGui is drawing it
glfwSetInputMode(g_Window, GLFW_CURSOR, io.MouseDrawCursor ? GLFW_CURSOR_HIDDEN : GLFW_CURSOR_NORMAL); glfwSetInputMode(g_Window, GLFW_CURSOR, io.MouseDrawCursor ? GLFW_CURSOR_HIDDEN : GLFW_CURSOR_NORMAL);
// Start the frame // 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.
ImGui::NewFrame(); ImGui::NewFrame();
} }

View File

@ -686,11 +686,15 @@ int main(int, char**)
// Main loop // Main loop
while (!glfwWindowShouldClose(window)) while (!glfwWindowShouldClose(window))
{ {
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
glfwPollEvents(); glfwPollEvents();
ImGui_ImplGlfwVulkan_NewFrame(); ImGui_ImplGlfwVulkan_NewFrame();
// 1. Show a simple window // 1. Show a simple window.
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug".
{ {
static float f = 0.0f; static float f = 0.0f;
ImGui::Text("Hello, world!"); ImGui::Text("Hello, world!");
@ -701,7 +705,7 @@ int main(int, char**)
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
} }
// 2. Show another simple window, this time using an explicit Begin/End pair // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window.
if (show_another_window) if (show_another_window)
{ {
ImGui::Begin("Another Window", &show_another_window); ImGui::Begin("Another Window", &show_another_window);
@ -709,7 +713,7 @@ int main(int, char**)
ImGui::End(); ImGui::End();
} }
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() // 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow().
if (show_test_window) if (show_test_window)
{ {
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver);

10
imgui.h
View File

@ -854,16 +854,16 @@ struct ImGuiIO
// Output - Retrieve after calling NewFrame() // Output - Retrieve after calling NewFrame()
//------------------------------------------------------------------ //------------------------------------------------------------------
bool WantCaptureMouse; // Mouse is hovering a window or widget is active (= ImGui will use your mouse input). Use to hide mouse from the rest of your application bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active).
bool WantCaptureKeyboard; // Widget is active (= ImGui will use your keyboard input). Use to hide keyboard from the rest of your application bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs.
bool WantTextInput; // Some text input widget is active, which will read input characters from the InputCharacters array. Use to activate on screen keyboard if your system needs one bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active).
bool WantMoveMouse; // [BETA-NAV] MousePos has been altered. back-end should reposition mouse on next frame. used only if 'NavMovesMouse=true'. bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'.
float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames
int MetricsAllocs; // Number of active memory allocations int MetricsAllocs; // Number of active memory allocations
int MetricsRenderVertices; // Vertices output during last call to Render() int MetricsRenderVertices; // Vertices output during last call to Render()
int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3
int MetricsActiveWindows; // Number of visible root windows (exclude child windows) int MetricsActiveWindows; // Number of visible root windows (exclude child windows)
ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are negative, so a disappearing/reappearing mouse won't have a huge delta for one frame. ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
//------------------------------------------------------------------ //------------------------------------------------------------------
// [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed!