mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Merge branch 'master' into navigation
This commit is contained in:
		@@ -225,49 +225,66 @@ void ImGui_ImplDX10_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    ctx->IASetInputLayout(old.InputLayout); if (old.InputLayout) old.InputLayout->Release();
 | 
					    ctx->IASetInputLayout(old.InputLayout); if (old.InputLayout) old.InputLayout->Release();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IMGUI_API LRESULT ImGui_ImplDX10_WndProcHandler(HWND, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
					static bool IsAnyMouseButtonDown()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
 | 
					    for (int n = 0; n < ARRAYSIZE(io.MouseDown); n++)
 | 
				
			||||||
 | 
					        if (io.MouseDown[n])
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
    switch (msg)
 | 
					    switch (msg)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    case WM_LBUTTONDOWN:
 | 
					    case WM_LBUTTONDOWN:
 | 
				
			||||||
 | 
					        if (!IsAnyMouseButtonDown()) ::SetCapture(hwnd);
 | 
				
			||||||
        io.MouseDown[0] = true;
 | 
					        io.MouseDown[0] = true;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
 | 
					    case WM_RBUTTONDOWN:
 | 
				
			||||||
 | 
					        if (!IsAnyMouseButtonDown()) ::SetCapture(hwnd);
 | 
				
			||||||
 | 
					        io.MouseDown[1] = true;
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    case WM_MBUTTONDOWN:
 | 
				
			||||||
 | 
					        if (!IsAnyMouseButtonDown()) ::SetCapture(hwnd);
 | 
				
			||||||
 | 
					        io.MouseDown[2] = true;
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
    case WM_LBUTTONUP:
 | 
					    case WM_LBUTTONUP:
 | 
				
			||||||
        io.MouseDown[0] = false;
 | 
					        io.MouseDown[0] = false;
 | 
				
			||||||
        return true;
 | 
					        if (!IsAnyMouseButtonDown()) ::ReleaseCapture();
 | 
				
			||||||
    case WM_RBUTTONDOWN:
 | 
					        return 0;
 | 
				
			||||||
        io.MouseDown[1] = true;
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    case WM_RBUTTONUP:
 | 
					    case WM_RBUTTONUP:
 | 
				
			||||||
        io.MouseDown[1] = false;
 | 
					        io.MouseDown[1] = false;
 | 
				
			||||||
        return true;
 | 
					        if (!IsAnyMouseButtonDown()) ::ReleaseCapture();
 | 
				
			||||||
    case WM_MBUTTONDOWN:
 | 
					        return 0;
 | 
				
			||||||
        io.MouseDown[2] = true;
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    case WM_MBUTTONUP:
 | 
					    case WM_MBUTTONUP:
 | 
				
			||||||
        io.MouseDown[2] = false;
 | 
					        io.MouseDown[2] = false;
 | 
				
			||||||
        return true;
 | 
					        if (!IsAnyMouseButtonDown()) ::ReleaseCapture();
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
    case WM_MOUSEWHEEL:
 | 
					    case WM_MOUSEWHEEL:
 | 
				
			||||||
        io.MouseWheel += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f;
 | 
					        io.MouseWheel += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_MOUSEMOVE:
 | 
					    case WM_MOUSEMOVE:
 | 
				
			||||||
        io.MousePos.x = (signed short)(lParam);
 | 
					        io.MousePos.x = (signed short)(lParam);
 | 
				
			||||||
        io.MousePos.y = (signed short)(lParam >> 16);
 | 
					        io.MousePos.y = (signed short)(lParam >> 16);
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_KEYDOWN:
 | 
					    case WM_KEYDOWN:
 | 
				
			||||||
 | 
					    case WM_SYSKEYDOWN:
 | 
				
			||||||
        if (wParam < 256)
 | 
					        if (wParam < 256)
 | 
				
			||||||
            io.KeysDown[wParam] = 1;
 | 
					            io.KeysDown[wParam] = 1;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_KEYUP:
 | 
					    case WM_KEYUP:
 | 
				
			||||||
 | 
					    case WM_SYSKEYUP:
 | 
				
			||||||
        if (wParam < 256)
 | 
					        if (wParam < 256)
 | 
				
			||||||
            io.KeysDown[wParam] = 0;
 | 
					            io.KeysDown[wParam] = 0;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_CHAR:
 | 
					    case WM_CHAR:
 | 
				
			||||||
        // You can also use ToAscii()+GetKeyboardState() to retrieve characters.
 | 
					        // You can also use ToAscii()+GetKeyboardState() to retrieve characters.
 | 
				
			||||||
        if (wParam > 0 && wParam < 0x10000)
 | 
					        if (wParam > 0 && wParam < 0x10000)
 | 
				
			||||||
            io.AddInputCharacter((unsigned short)wParam);
 | 
					            io.AddInputCharacter((unsigned short)wParam);
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,10 +74,10 @@ void CleanupDeviceD3D()
 | 
				
			|||||||
    if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; }
 | 
					    if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern LRESULT ImGui_ImplDX10_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
 | 
					extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
 | 
				
			||||||
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
					LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (ImGui_ImplDX10_WndProcHandler(hWnd, msg, wParam, lParam))
 | 
					    if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (msg)
 | 
					    switch (msg)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -232,49 +232,66 @@ void ImGui_ImplDX11_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    ctx->IASetInputLayout(old.InputLayout); if (old.InputLayout) old.InputLayout->Release();
 | 
					    ctx->IASetInputLayout(old.InputLayout); if (old.InputLayout) old.InputLayout->Release();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IMGUI_API LRESULT ImGui_ImplDX11_WndProcHandler(HWND, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
					static bool IsAnyMouseButtonDown()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
 | 
					    for (int n = 0; n < ARRAYSIZE(io.MouseDown); n++)
 | 
				
			||||||
 | 
					        if (io.MouseDown[n])
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
    switch (msg)
 | 
					    switch (msg)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    case WM_LBUTTONDOWN:
 | 
					    case WM_LBUTTONDOWN:
 | 
				
			||||||
 | 
					        if (!IsAnyMouseButtonDown()) ::SetCapture(hwnd);
 | 
				
			||||||
        io.MouseDown[0] = true;
 | 
					        io.MouseDown[0] = true;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
 | 
					    case WM_RBUTTONDOWN:
 | 
				
			||||||
 | 
					        if (!IsAnyMouseButtonDown()) ::SetCapture(hwnd);
 | 
				
			||||||
 | 
					        io.MouseDown[1] = true;
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    case WM_MBUTTONDOWN:
 | 
				
			||||||
 | 
					        if (!IsAnyMouseButtonDown()) ::SetCapture(hwnd);
 | 
				
			||||||
 | 
					        io.MouseDown[2] = true;
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
    case WM_LBUTTONUP:
 | 
					    case WM_LBUTTONUP:
 | 
				
			||||||
        io.MouseDown[0] = false;
 | 
					        io.MouseDown[0] = false;
 | 
				
			||||||
        return true;
 | 
					        if (!IsAnyMouseButtonDown()) ::ReleaseCapture();
 | 
				
			||||||
    case WM_RBUTTONDOWN:
 | 
					        return 0;
 | 
				
			||||||
        io.MouseDown[1] = true;
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    case WM_RBUTTONUP:
 | 
					    case WM_RBUTTONUP:
 | 
				
			||||||
        io.MouseDown[1] = false;
 | 
					        io.MouseDown[1] = false;
 | 
				
			||||||
        return true;
 | 
					        if (!IsAnyMouseButtonDown()) ::ReleaseCapture();
 | 
				
			||||||
    case WM_MBUTTONDOWN:
 | 
					        return 0;
 | 
				
			||||||
        io.MouseDown[2] = true;
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    case WM_MBUTTONUP:
 | 
					    case WM_MBUTTONUP:
 | 
				
			||||||
        io.MouseDown[2] = false;
 | 
					        io.MouseDown[2] = false;
 | 
				
			||||||
        return true;
 | 
					        if (!IsAnyMouseButtonDown()) ::ReleaseCapture();
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
    case WM_MOUSEWHEEL:
 | 
					    case WM_MOUSEWHEEL:
 | 
				
			||||||
        io.MouseWheel += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f;
 | 
					        io.MouseWheel += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_MOUSEMOVE:
 | 
					    case WM_MOUSEMOVE:
 | 
				
			||||||
        io.MousePos.x = (signed short)(lParam);
 | 
					        io.MousePos.x = (signed short)(lParam);
 | 
				
			||||||
        io.MousePos.y = (signed short)(lParam >> 16);
 | 
					        io.MousePos.y = (signed short)(lParam >> 16);
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_KEYDOWN:
 | 
					    case WM_KEYDOWN:
 | 
				
			||||||
 | 
					    case WM_SYSKEYDOWN:
 | 
				
			||||||
        if (wParam < 256)
 | 
					        if (wParam < 256)
 | 
				
			||||||
            io.KeysDown[wParam] = 1;
 | 
					            io.KeysDown[wParam] = 1;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_KEYUP:
 | 
					    case WM_KEYUP:
 | 
				
			||||||
 | 
					    case WM_SYSKEYUP:
 | 
				
			||||||
        if (wParam < 256)
 | 
					        if (wParam < 256)
 | 
				
			||||||
            io.KeysDown[wParam] = 0;
 | 
					            io.KeysDown[wParam] = 0;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_CHAR:
 | 
					    case WM_CHAR:
 | 
				
			||||||
        // You can also use ToAscii()+GetKeyboardState() to retrieve characters.
 | 
					        // You can also use ToAscii()+GetKeyboardState() to retrieve characters.
 | 
				
			||||||
        if (wParam > 0 && wParam < 0x10000)
 | 
					        if (wParam > 0 && wParam < 0x10000)
 | 
				
			||||||
            io.AddInputCharacter((unsigned short)wParam);
 | 
					            io.AddInputCharacter((unsigned short)wParam);
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,10 +77,10 @@ void CleanupDeviceD3D()
 | 
				
			|||||||
    if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; }
 | 
					    if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern LRESULT ImGui_ImplDX11_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
 | 
					extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
 | 
				
			||||||
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
					LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (ImGui_ImplDX11_WndProcHandler(hWnd, msg, wParam, lParam))
 | 
					    if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (msg)
 | 
					    switch (msg)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -171,49 +171,67 @@ void ImGui_ImplDX9_RenderDrawLists(ImDrawData* draw_data)
 | 
				
			|||||||
    d3d9_state_block->Release();
 | 
					    d3d9_state_block->Release();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IMGUI_API LRESULT ImGui_ImplDX9_WndProcHandler(HWND, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
					static bool IsAnyMouseButtonDown()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
 | 
					    for (int n = 0; n < ARRAYSIZE(io.MouseDown); n++)
 | 
				
			||||||
 | 
					        if (io.MouseDown[n])
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// We use Win32 SetCapture/ReleaseCapture() API to enable reading the mouse outside our Windows bounds.
 | 
				
			||||||
 | 
					IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
    switch (msg)
 | 
					    switch (msg)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    case WM_LBUTTONDOWN:
 | 
					    case WM_LBUTTONDOWN:
 | 
				
			||||||
 | 
					        if (!IsAnyMouseButtonDown()) ::SetCapture(hwnd);
 | 
				
			||||||
        io.MouseDown[0] = true;
 | 
					        io.MouseDown[0] = true;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
 | 
					    case WM_RBUTTONDOWN:
 | 
				
			||||||
 | 
					        if (!IsAnyMouseButtonDown()) ::SetCapture(hwnd);
 | 
				
			||||||
 | 
					        io.MouseDown[1] = true;
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    case WM_MBUTTONDOWN:
 | 
				
			||||||
 | 
					        if (!IsAnyMouseButtonDown()) ::SetCapture(hwnd);
 | 
				
			||||||
 | 
					        io.MouseDown[2] = true;
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
    case WM_LBUTTONUP:
 | 
					    case WM_LBUTTONUP:
 | 
				
			||||||
        io.MouseDown[0] = false;
 | 
					        io.MouseDown[0] = false;
 | 
				
			||||||
        return true;
 | 
					        if (!IsAnyMouseButtonDown()) ::ReleaseCapture();
 | 
				
			||||||
    case WM_RBUTTONDOWN:
 | 
					        return 0;
 | 
				
			||||||
        io.MouseDown[1] = true;
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    case WM_RBUTTONUP:
 | 
					    case WM_RBUTTONUP:
 | 
				
			||||||
        io.MouseDown[1] = false;
 | 
					        io.MouseDown[1] = false;
 | 
				
			||||||
        return true;
 | 
					        if (!IsAnyMouseButtonDown()) ::ReleaseCapture();
 | 
				
			||||||
    case WM_MBUTTONDOWN:
 | 
					        return 0;
 | 
				
			||||||
        io.MouseDown[2] = true;
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    case WM_MBUTTONUP:
 | 
					    case WM_MBUTTONUP:
 | 
				
			||||||
        io.MouseDown[2] = false;
 | 
					        io.MouseDown[2] = false;
 | 
				
			||||||
        return true;
 | 
					        if (!IsAnyMouseButtonDown()) ::ReleaseCapture();
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
    case WM_MOUSEWHEEL:
 | 
					    case WM_MOUSEWHEEL:
 | 
				
			||||||
        io.MouseWheel += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f;
 | 
					        io.MouseWheel += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_MOUSEMOVE:
 | 
					    case WM_MOUSEMOVE:
 | 
				
			||||||
        io.MousePos.x = (signed short)(lParam);
 | 
					        io.MousePos.x = (signed short)(lParam);
 | 
				
			||||||
        io.MousePos.y = (signed short)(lParam >> 16);
 | 
					        io.MousePos.y = (signed short)(lParam >> 16);
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_KEYDOWN:
 | 
					    case WM_KEYDOWN:
 | 
				
			||||||
 | 
					    case WM_SYSKEYDOWN:
 | 
				
			||||||
        if (wParam < 256)
 | 
					        if (wParam < 256)
 | 
				
			||||||
            io.KeysDown[wParam] = 1;
 | 
					            io.KeysDown[wParam] = 1;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_KEYUP:
 | 
					    case WM_KEYUP:
 | 
				
			||||||
 | 
					    case WM_SYSKEYUP:
 | 
				
			||||||
        if (wParam < 256)
 | 
					        if (wParam < 256)
 | 
				
			||||||
            io.KeysDown[wParam] = 0;
 | 
					            io.KeysDown[wParam] = 0;
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    case WM_CHAR:
 | 
					    case WM_CHAR:
 | 
				
			||||||
        // You can also use ToAscii()+GetKeyboardState() to retrieve characters.
 | 
					        // You can also use ToAscii()+GetKeyboardState() to retrieve characters.
 | 
				
			||||||
        if (wParam > 0 && wParam < 0x10000)
 | 
					        if (wParam > 0 && wParam < 0x10000)
 | 
				
			||||||
            io.AddInputCharacter((unsigned short)wParam);
 | 
					            io.AddInputCharacter((unsigned short)wParam);
 | 
				
			||||||
        return true;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,10 +12,10 @@
 | 
				
			|||||||
static LPDIRECT3DDEVICE9        g_pd3dDevice = NULL;
 | 
					static LPDIRECT3DDEVICE9        g_pd3dDevice = NULL;
 | 
				
			||||||
static D3DPRESENT_PARAMETERS    g_d3dpp;
 | 
					static D3DPRESENT_PARAMETERS    g_d3dpp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern LRESULT ImGui_ImplDX9_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
 | 
					extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
 | 
				
			||||||
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
					LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (ImGui_ImplDX9_WndProcHandler(hWnd, msg, wParam, lParam))
 | 
					    if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (msg)
 | 
					    switch (msg)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@
 | 
				
			|||||||
// Data
 | 
					// Data
 | 
				
			||||||
static GLFWwindow*  g_Window = NULL;
 | 
					static GLFWwindow*  g_Window = NULL;
 | 
				
			||||||
static double       g_Time = 0.0f;
 | 
					static double       g_Time = 0.0f;
 | 
				
			||||||
static bool         g_MousePressed[3] = { false, false, false };
 | 
					static bool         g_MouseJustPressed[3] = { false, false, false };
 | 
				
			||||||
static float        g_MouseWheel = 0.0f;
 | 
					static float        g_MouseWheel = 0.0f;
 | 
				
			||||||
static GLuint       g_FontTexture = 0;
 | 
					static GLuint       g_FontTexture = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -129,7 +129,7 @@ static void ImGui_ImplGlfwGL2_SetClipboardText(void* user_data, const char* text
 | 
				
			|||||||
void ImGui_ImplGlfwGL2_MouseButtonCallback(GLFWwindow*, int button, int action, int /*mods*/)
 | 
					void ImGui_ImplGlfwGL2_MouseButtonCallback(GLFWwindow*, int button, int action, int /*mods*/)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (action == GLFW_PRESS && button >= 0 && button < 3)
 | 
					    if (action == GLFW_PRESS && button >= 0 && button < 3)
 | 
				
			||||||
        g_MousePressed[button] = true;
 | 
					        g_MouseJustPressed[button] = true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui_ImplGlfwGL2_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset)
 | 
					void ImGui_ImplGlfwGL2_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset)
 | 
				
			||||||
@@ -287,8 +287,9 @@ void ImGui_ImplGlfwGL2_NewFrame()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    for (int i = 0; i < 3; i++)
 | 
					    for (int i = 0; i < 3; i++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        io.MouseDown[i] = g_MousePressed[i] || glfwGetMouseButton(g_Window, i) != 0;    // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame.
 | 
					        // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame.
 | 
				
			||||||
        g_MousePressed[i] = false;
 | 
					        io.MouseDown[i] = g_MouseJustPressed[i] || glfwGetMouseButton(g_Window, i) != 0;
 | 
				
			||||||
 | 
					        g_MouseJustPressed[i] = false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    io.MouseWheel = g_MouseWheel;
 | 
					    io.MouseWheel = g_MouseWheel;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@
 | 
				
			|||||||
// Data
 | 
					// Data
 | 
				
			||||||
static GLFWwindow*  g_Window = NULL;
 | 
					static GLFWwindow*  g_Window = NULL;
 | 
				
			||||||
static double       g_Time = 0.0f;
 | 
					static double       g_Time = 0.0f;
 | 
				
			||||||
static bool         g_MousePressed[3] = { false, false, false };
 | 
					static bool         g_MouseJustPressed[3] = { false, false, false };
 | 
				
			||||||
static float        g_MouseWheel = 0.0f;
 | 
					static float        g_MouseWheel = 0.0f;
 | 
				
			||||||
static GLuint       g_FontTexture = 0;
 | 
					static GLuint       g_FontTexture = 0;
 | 
				
			||||||
static int          g_ShaderHandle = 0, g_VertHandle = 0, g_FragHandle = 0;
 | 
					static int          g_ShaderHandle = 0, g_VertHandle = 0, g_FragHandle = 0;
 | 
				
			||||||
@@ -150,7 +150,7 @@ static void ImGui_ImplGlfwGL3_SetClipboardText(void* user_data, const char* text
 | 
				
			|||||||
void ImGui_ImplGlfwGL3_MouseButtonCallback(GLFWwindow*, int button, int action, int /*mods*/)
 | 
					void ImGui_ImplGlfwGL3_MouseButtonCallback(GLFWwindow*, int button, int action, int /*mods*/)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (action == GLFW_PRESS && button >= 0 && button < 3)
 | 
					    if (action == GLFW_PRESS && button >= 0 && button < 3)
 | 
				
			||||||
        g_MousePressed[button] = true;
 | 
					        g_MouseJustPressed[button] = true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui_ImplGlfwGL3_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset)
 | 
					void ImGui_ImplGlfwGL3_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset)
 | 
				
			||||||
@@ -401,8 +401,9 @@ void ImGui_ImplGlfwGL3_NewFrame()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    for (int i = 0; i < 3; i++)
 | 
					    for (int i = 0; i < 3; i++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        io.MouseDown[i] = g_MousePressed[i] || glfwGetMouseButton(g_Window, i) != 0;    // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame.
 | 
					        // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame.
 | 
				
			||||||
        g_MousePressed[i] = false;
 | 
					        io.MouseDown[i] = g_MouseJustPressed[i] || glfwGetMouseButton(g_Window, i) != 0;
 | 
				
			||||||
 | 
					        g_MouseJustPressed[i] = false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    io.MouseWheel = g_MouseWheel;
 | 
					    io.MouseWheel = g_MouseWheel;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										23
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -10208,23 +10208,38 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo
 | 
				
			|||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
 | 
					    ImGuiStyle& style = g.Style;
 | 
				
			||||||
    ImVec2 pos = window->DC.CursorPos;
 | 
					    ImVec2 pos = window->DC.CursorPos;
 | 
				
			||||||
    ImVec2 label_size = CalcTextSize(label, NULL, true);
 | 
					    ImVec2 label_size = CalcTextSize(label, NULL, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ImGuiSelectableFlags flags = ImGuiSelectableFlags_MenuItem | (enabled ? 0 : ImGuiSelectableFlags_Disabled);
 | 
				
			||||||
 | 
					    bool pressed;
 | 
				
			||||||
 | 
					    if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Mimic the exact layout spacing of BeginMenu() to allow MenuItem() inside a menu bar, which is a little misleading but may be useful
 | 
				
			||||||
 | 
					        // Note that in this situation we render neither the shortcut neither the selected tick mark
 | 
				
			||||||
 | 
					        float w = label_size.x;
 | 
				
			||||||
 | 
					        window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * 0.5f);
 | 
				
			||||||
 | 
					        PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing * 2.0f);
 | 
				
			||||||
 | 
					        pressed = Selectable(label, false, flags, ImVec2(w, 0.0f));
 | 
				
			||||||
 | 
					        PopStyleVar();
 | 
				
			||||||
 | 
					        window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        ImVec2 shortcut_size = shortcut ? CalcTextSize(shortcut, NULL) : ImVec2(0.0f, 0.0f);
 | 
					        ImVec2 shortcut_size = shortcut ? CalcTextSize(shortcut, NULL) : ImVec2(0.0f, 0.0f);
 | 
				
			||||||
        float w = window->MenuColumns.DeclColumns(label_size.x, shortcut_size.x, (float)(int)(g.FontSize * 1.20f)); // Feedback for next frame
 | 
					        float w = window->MenuColumns.DeclColumns(label_size.x, shortcut_size.x, (float)(int)(g.FontSize * 1.20f)); // Feedback for next frame
 | 
				
			||||||
        float extra_w = ImMax(0.0f, GetContentRegionAvail().x - w);
 | 
					        float extra_w = ImMax(0.0f, GetContentRegionAvail().x - w);
 | 
				
			||||||
 | 
					        pressed = Selectable(label, false, flags | ImGuiSelectableFlags_DrawFillAvailWidth, ImVec2(w, 0.0f));
 | 
				
			||||||
    bool pressed = Selectable(label, false, ImGuiSelectableFlags_MenuItem | ImGuiSelectableFlags_DrawFillAvailWidth | (enabled ? 0 : ImGuiSelectableFlags_Disabled), ImVec2(w, 0.0f));
 | 
					 | 
				
			||||||
        if (shortcut_size.x > 0.0f)
 | 
					        if (shortcut_size.x > 0.0f)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
 | 
					            PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
 | 
				
			||||||
            RenderText(pos + ImVec2(window->MenuColumns.Pos[1] + extra_w, 0.0f), shortcut, NULL, false);
 | 
					            RenderText(pos + ImVec2(window->MenuColumns.Pos[1] + extra_w, 0.0f), shortcut, NULL, false);
 | 
				
			||||||
            PopStyleColor();
 | 
					            PopStyleColor();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (selected)
 | 
					        if (selected)
 | 
				
			||||||
            RenderCheckMark(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * (0.20f+0.200f), g.FontSize * 0.134f * 0.5f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize  * 0.866f);
 | 
					            RenderCheckMark(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * (0.20f+0.200f), g.FontSize * 0.134f * 0.5f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize  * 0.866f);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    return pressed;
 | 
					    return pressed;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							@@ -1548,7 +1548,7 @@ struct ImFont
 | 
				
			|||||||
    // Methods
 | 
					    // Methods
 | 
				
			||||||
    IMGUI_API ImFont();
 | 
					    IMGUI_API ImFont();
 | 
				
			||||||
    IMGUI_API ~ImFont();
 | 
					    IMGUI_API ~ImFont();
 | 
				
			||||||
    IMGUI_API void              Clear();
 | 
					    IMGUI_API void              ClearOutputData();
 | 
				
			||||||
    IMGUI_API void              BuildLookupTable();
 | 
					    IMGUI_API void              BuildLookupTable();
 | 
				
			||||||
    IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
 | 
					    IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
 | 
				
			||||||
    IMGUI_API void              SetFallbackChar(ImWchar c);
 | 
					    IMGUI_API void              SetFallbackChar(ImWchar c);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1989,6 +1989,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
 | 
				
			|||||||
        for (int i = 0; i < atlas->Fonts.Size; i++)
 | 
					        for (int i = 0; i < atlas->Fonts.Size; i++)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImFont* font = atlas->Fonts[i];
 | 
					            ImFont* font = atlas->Fonts[i];
 | 
				
			||||||
 | 
					            ImGui::PushID(font);
 | 
				
			||||||
            bool font_details_opened = ImGui::TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size);
 | 
					            bool font_details_opened = ImGui::TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size);
 | 
				
			||||||
            ImGui::SameLine(); if (ImGui::SmallButton("Set as default")) ImGui::GetIO().FontDefault = font;
 | 
					            ImGui::SameLine(); if (ImGui::SmallButton("Set as default")) ImGui::GetIO().FontDefault = font;
 | 
				
			||||||
            if (font_details_opened)
 | 
					            if (font_details_opened)
 | 
				
			||||||
@@ -2049,6 +2050,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                ImGui::TreePop();
 | 
					                ImGui::TreePop();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            ImGui::PopID();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        static float window_scale = 1.0f;
 | 
					        static float window_scale = 1.0f;
 | 
				
			||||||
        ImGui::DragFloat("this window scale", &window_scale, 0.005f, 0.3f, 2.0f, "%.1f");              // scale only this window
 | 
					        ImGui::DragFloat("this window scale", &window_scale, 0.005f, 0.3f, 2.0f, "%.1f");              // scale only this window
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1577,7 +1577,6 @@ bool    ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
 | 
				
			|||||||
        const float off_x = cfg.GlyphOffset.x;
 | 
					        const float off_x = cfg.GlyphOffset.x;
 | 
				
			||||||
        const float off_y = cfg.GlyphOffset.y + (float)(int)(dst_font->Ascent + 0.5f);
 | 
					        const float off_y = cfg.GlyphOffset.y + (float)(int)(dst_font->Ascent + 0.5f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        dst_font->FallbackGlyph = NULL; // Always clear fallback so FindGlyph can return NULL. It will be set again in BuildLookupTable()
 | 
					 | 
				
			||||||
        for (int i = 0; i < tmp.RangesCount; i++)
 | 
					        for (int i = 0; i < tmp.RangesCount; i++)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            stbtt_pack_range& range = tmp.Ranges[i];
 | 
					            stbtt_pack_range& range = tmp.Ranges[i];
 | 
				
			||||||
@@ -1619,14 +1618,12 @@ void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* f
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    if (!font_config->MergeMode)
 | 
					    if (!font_config->MergeMode)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        font->ContainerAtlas = atlas;
 | 
					        font->ClearOutputData();
 | 
				
			||||||
        font->ConfigData = font_config;
 | 
					 | 
				
			||||||
        font->ConfigDataCount = 0;
 | 
					 | 
				
			||||||
        font->FontSize = font_config->SizePixels;
 | 
					        font->FontSize = font_config->SizePixels;
 | 
				
			||||||
 | 
					        font->ConfigData = font_config;
 | 
				
			||||||
 | 
					        font->ContainerAtlas = atlas;
 | 
				
			||||||
        font->Ascent = ascent;
 | 
					        font->Ascent = ascent;
 | 
				
			||||||
        font->Descent = descent;
 | 
					        font->Descent = descent;
 | 
				
			||||||
        font->Glyphs.resize(0);
 | 
					 | 
				
			||||||
        font->MetricsTotalSurface = 0;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    font->ConfigDataCount++;
 | 
					    font->ConfigDataCount++;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1903,7 +1900,8 @@ ImFont::ImFont()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    Scale = 1.0f;
 | 
					    Scale = 1.0f;
 | 
				
			||||||
    FallbackChar = (ImWchar)'?';
 | 
					    FallbackChar = (ImWchar)'?';
 | 
				
			||||||
    Clear();
 | 
					    DisplayOffset = ImVec2(0.0f, 1.0f);
 | 
				
			||||||
 | 
					    ClearOutputData();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ImFont::~ImFont()
 | 
					ImFont::~ImFont()
 | 
				
			||||||
@@ -1916,13 +1914,12 @@ ImFont::~ImFont()
 | 
				
			|||||||
    if (g.Font == this)
 | 
					    if (g.Font == this)
 | 
				
			||||||
        g.Font = NULL;
 | 
					        g.Font = NULL;
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
    Clear();
 | 
					    ClearOutputData();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void    ImFont::Clear()
 | 
					void    ImFont::ClearOutputData()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    FontSize = 0.0f;
 | 
					    FontSize = 0.0f;
 | 
				
			||||||
    DisplayOffset = ImVec2(0.0f, 1.0f);
 | 
					 | 
				
			||||||
    Glyphs.clear();
 | 
					    Glyphs.clear();
 | 
				
			||||||
    IndexAdvanceX.clear();
 | 
					    IndexAdvanceX.clear();
 | 
				
			||||||
    IndexLookup.clear();
 | 
					    IndexLookup.clear();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user