mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	This commit is contained in:
		
							
								
								
									
										29
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -1246,6 +1246,7 @@ ImGuiIO::ImGuiIO()
 | 
			
		||||
    // Input (NB: we already have memset zero the entire structure!)
 | 
			
		||||
    MousePos = ImVec2(-FLT_MAX, -FLT_MAX);
 | 
			
		||||
    MousePosPrev = ImVec2(-FLT_MAX, -FLT_MAX);
 | 
			
		||||
    MouseSource = ImGuiMouseSource_Mouse;
 | 
			
		||||
    MouseDragThreshold = 6.0f;
 | 
			
		||||
    for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++) MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f;
 | 
			
		||||
    for (int i = 0; i < IM_ARRAYSIZE(KeysData); i++) { KeysData[i].DownDuration = KeysData[i].DownDurationPrev = -1.0f; }
 | 
			
		||||
@@ -1472,6 +1473,7 @@ void ImGuiIO::AddMousePosEvent(float x, float y)
 | 
			
		||||
    e.Source = ImGuiInputSource_Mouse;
 | 
			
		||||
    e.MousePos.PosX = pos.x;
 | 
			
		||||
    e.MousePos.PosY = pos.y;
 | 
			
		||||
    e.MouseWheel.MouseSource = g.InputEventsNextMouseSource;
 | 
			
		||||
    g.InputEventsQueue.push_back(e);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1494,6 +1496,7 @@ void ImGuiIO::AddMouseButtonEvent(int mouse_button, bool down)
 | 
			
		||||
    e.Source = ImGuiInputSource_Mouse;
 | 
			
		||||
    e.MouseButton.Button = mouse_button;
 | 
			
		||||
    e.MouseButton.Down = down;
 | 
			
		||||
    e.MouseWheel.MouseSource = g.InputEventsNextMouseSource;
 | 
			
		||||
    g.InputEventsQueue.push_back(e);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1512,9 +1515,19 @@ void ImGuiIO::AddMouseWheelEvent(float wheel_x, float wheel_y)
 | 
			
		||||
    e.Source = ImGuiInputSource_Mouse;
 | 
			
		||||
    e.MouseWheel.WheelX = wheel_x;
 | 
			
		||||
    e.MouseWheel.WheelY = wheel_y;
 | 
			
		||||
    e.MouseWheel.MouseSource = g.InputEventsNextMouseSource;
 | 
			
		||||
    g.InputEventsQueue.push_back(e);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This is not a real event, the data is latched in order to be stored in actual Mouse events.
 | 
			
		||||
// This is so that duplicate events (e.g. Windows sending extraneous WM_MOUSEMOVE) gets filtered and are not leading to actual source changes.
 | 
			
		||||
void ImGuiIO::AddMouseSourceEvent(ImGuiMouseSource source)
 | 
			
		||||
{
 | 
			
		||||
    IM_ASSERT(Ctx != NULL);
 | 
			
		||||
    ImGuiContext& g = *Ctx;
 | 
			
		||||
    g.InputEventsNextMouseSource = source;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGuiIO::AddFocusEvent(bool focused)
 | 
			
		||||
{
 | 
			
		||||
    IM_ASSERT(Ctx != NULL);
 | 
			
		||||
@@ -8663,12 +8676,18 @@ static const char* GetInputSourceName(ImGuiInputSource source)
 | 
			
		||||
    IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT && source >= 0 && source < ImGuiInputSource_COUNT);
 | 
			
		||||
    return input_source_names[source];
 | 
			
		||||
}
 | 
			
		||||
static const char* GetMouseSourceName(ImGuiMouseSource source)
 | 
			
		||||
{
 | 
			
		||||
    const char* mouse_source_names[] = { "Mouse", "TouchScreen", "Pen" };
 | 
			
		||||
    IM_ASSERT(IM_ARRAYSIZE(mouse_source_names) == ImGuiMouseSource_COUNT && source >= 0 && source < ImGuiMouseSource_COUNT);
 | 
			
		||||
    return mouse_source_names[source];
 | 
			
		||||
}
 | 
			
		||||
static void DebugPrintInputEvent(const char* prefix, const ImGuiInputEvent* e)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    if (e->Type == ImGuiInputEventType_MousePos)    { if (e->MousePos.PosX == -FLT_MAX && e->MousePos.PosY == -FLT_MAX) IMGUI_DEBUG_LOG_IO("%s: MousePos (-FLT_MAX, -FLT_MAX)\n", prefix); else IMGUI_DEBUG_LOG_IO("%s: MousePos (%.1f, %.1f)\n", prefix, e->MousePos.PosX, e->MousePos.PosY); return; }
 | 
			
		||||
    if (e->Type == ImGuiInputEventType_MouseButton) { IMGUI_DEBUG_LOG_IO("%s: MouseButton %d %s\n", prefix, e->MouseButton.Button, e->MouseButton.Down ? "Down" : "Up"); return; }
 | 
			
		||||
    if (e->Type == ImGuiInputEventType_MouseWheel)  { IMGUI_DEBUG_LOG_IO("%s: MouseWheel (%.3f, %.3f)\n", prefix, e->MouseWheel.WheelX, e->MouseWheel.WheelY); return; }
 | 
			
		||||
    if (e->Type == ImGuiInputEventType_MousePos)    { if (e->MousePos.PosX == -FLT_MAX && e->MousePos.PosY == -FLT_MAX) IMGUI_DEBUG_LOG_IO("%s: MousePos (-FLT_MAX, -FLT_MAX)\n", prefix); else IMGUI_DEBUG_LOG_IO("%s: MousePos (%.1f, %.1f) (%s)\n", prefix, e->MousePos.PosX, e->MousePos.PosY, GetMouseSourceName(e->MouseWheel.MouseSource)); return; }
 | 
			
		||||
    if (e->Type == ImGuiInputEventType_MouseButton) { IMGUI_DEBUG_LOG_IO("%s: MouseButton %d %s (%s)\n", prefix, e->MouseButton.Button, e->MouseButton.Down ? "Down" : "Up", GetMouseSourceName(e->MouseWheel.MouseSource)); return; }
 | 
			
		||||
    if (e->Type == ImGuiInputEventType_MouseWheel)  { IMGUI_DEBUG_LOG_IO("%s: MouseWheel (%.3f, %.3f) (%s)\n", prefix, e->MouseWheel.WheelX, e->MouseWheel.WheelY, GetMouseSourceName(e->MouseWheel.MouseSource)); return; }
 | 
			
		||||
    if (e->Type == ImGuiInputEventType_Key)         { IMGUI_DEBUG_LOG_IO("%s: Key \"%s\" %s\n", prefix, ImGui::GetKeyName(e->Key.Key), e->Key.Down ? "Down" : "Up"); return; }
 | 
			
		||||
    if (e->Type == ImGuiInputEventType_Text)        { IMGUI_DEBUG_LOG_IO("%s: Text: %c (U+%08X)\n", prefix, e->Text.Char, e->Text.Char); return; }
 | 
			
		||||
    if (e->Type == ImGuiInputEventType_Focus)       { IMGUI_DEBUG_LOG_IO("%s: AppFocused %d\n", prefix, e->AppFocused.Focused); return; }
 | 
			
		||||
@@ -8704,6 +8723,7 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
 | 
			
		||||
            if (trickle_fast_inputs && (mouse_button_changed != 0 || mouse_wheeled || key_changed || text_inputted))
 | 
			
		||||
                break;
 | 
			
		||||
            io.MousePos = event_pos;
 | 
			
		||||
            io.MouseSource = e->MousePos.MouseSource;
 | 
			
		||||
            mouse_moved = true;
 | 
			
		||||
        }
 | 
			
		||||
        else if (e->Type == ImGuiInputEventType_MouseButton)
 | 
			
		||||
@@ -8714,6 +8734,7 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
 | 
			
		||||
            if (trickle_fast_inputs && ((mouse_button_changed & (1 << button)) || mouse_wheeled))
 | 
			
		||||
                break;
 | 
			
		||||
            io.MouseDown[button] = e->MouseButton.Down;
 | 
			
		||||
            io.MouseSource = e->MouseButton.MouseSource;
 | 
			
		||||
            mouse_button_changed |= (1 << button);
 | 
			
		||||
        }
 | 
			
		||||
        else if (e->Type == ImGuiInputEventType_MouseWheel)
 | 
			
		||||
@@ -8723,6 +8744,7 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
 | 
			
		||||
                break;
 | 
			
		||||
            io.MouseWheelH += e->MouseWheel.WheelX;
 | 
			
		||||
            io.MouseWheel += e->MouseWheel.WheelY;
 | 
			
		||||
            io.MouseSource = e->MouseWheel.MouseSource;
 | 
			
		||||
            mouse_wheeled = true;
 | 
			
		||||
        }
 | 
			
		||||
        else if (e->Type == ImGuiInputEventType_Key)
 | 
			
		||||
@@ -13725,6 +13747,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
 | 
			
		||||
            Text("Mouse clicked:");  for (int i = 0; i < count; i++) if (IsMouseClicked(i)) { SameLine(); Text("b%d (%d)", i, io.MouseClickedCount[i]); }
 | 
			
		||||
            Text("Mouse released:"); for (int i = 0; i < count; i++) if (IsMouseReleased(i)) { SameLine(); Text("b%d", i); }
 | 
			
		||||
            Text("Mouse wheel: %.1f", io.MouseWheel);
 | 
			
		||||
            Text("Mouse source: %s", GetMouseSourceName(io.MouseSource));
 | 
			
		||||
            Text("Pen Pressure: %.1f", io.PenPressure); // Note: currently unused
 | 
			
		||||
            Unindent();
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user