mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-29 12:11:06 +01:00 
			
		
		
		
	Added IsMouseReleased() helper (#248)
This commit is contained in:
		
							
								
								
									
										16
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -2089,8 +2089,10 @@ void ImGui::NewFrame() | |||||||
|     g.IO.MousePosPrev = g.IO.MousePos; |     g.IO.MousePosPrev = g.IO.MousePos; | ||||||
|     for (size_t i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++) |     for (size_t i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++) | ||||||
|     { |     { | ||||||
|         g.IO.MouseDownTime[i] = g.IO.MouseDown[i] ? (g.IO.MouseDownTime[i] < 0.0f ? 0.0f : g.IO.MouseDownTime[i] + g.IO.DeltaTime) : -1.0f; |         g.IO.MouseDownDurationPrev[i] = g.IO.MouseDownDuration[i]; | ||||||
|         g.IO.MouseClicked[i] = (g.IO.MouseDownTime[i] == 0.0f); |         g.IO.MouseDownDuration[i] = g.IO.MouseDown[i] ? (g.IO.MouseDownDuration[i] < 0.0f ? 0.0f : g.IO.MouseDownDuration[i] + g.IO.DeltaTime) : -1.0f; | ||||||
|  |         g.IO.MouseClicked[i] = g.IO.MouseDownDuration[i] == 0.0f; | ||||||
|  |         g.IO.MouseReleased[i] = g.IO.MouseDownDurationPrev[i] >= 0.0f && !g.IO.MouseDown[i]; | ||||||
|         g.IO.MouseDoubleClicked[i] = false; |         g.IO.MouseDoubleClicked[i] = false; | ||||||
|         if (g.IO.MouseClicked[i]) |         if (g.IO.MouseClicked[i]) | ||||||
|         { |         { | ||||||
| @@ -2894,7 +2896,7 @@ bool ImGui::IsMouseClicked(int button, bool repeat) | |||||||
| { | { | ||||||
|     ImGuiState& g = *GImGui; |     ImGuiState& g = *GImGui; | ||||||
|     IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); |     IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); | ||||||
|     const float t = g.IO.MouseDownTime[button]; |     const float t = g.IO.MouseDownDuration[button]; | ||||||
|     if (t == 0.0f) |     if (t == 0.0f) | ||||||
|         return true; |         return true; | ||||||
|  |  | ||||||
| @@ -2908,6 +2910,13 @@ bool ImGui::IsMouseClicked(int button, bool repeat) | |||||||
|     return false; |     return false; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | bool ImGui::IsMouseReleased(int button) | ||||||
|  | { | ||||||
|  |     ImGuiState& g = *GImGui; | ||||||
|  |     IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); | ||||||
|  |     return g.IO.MouseReleased[button]; | ||||||
|  | } | ||||||
|  |  | ||||||
| bool ImGui::IsMouseDoubleClicked(int button) | bool ImGui::IsMouseDoubleClicked(int button) | ||||||
| { | { | ||||||
|     ImGuiState& g = *GImGui; |     ImGuiState& g = *GImGui; | ||||||
| @@ -10561,6 +10570,7 @@ void ImGui::ShowTestWindow(bool* opened) | |||||||
|  |  | ||||||
|     ImGui::Text("ImGui says hello."); |     ImGui::Text("ImGui says hello."); | ||||||
|     //ImGui::Text("MousePos (%g, %g)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y); |     //ImGui::Text("MousePos (%g, %g)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y); | ||||||
|  |     //ImGui::Text("MouseClicked (%d, %d) MouseReleased (%d, %d)", ImGui::GetIO().MouseClicked[0], ImGui::GetIO().MouseClicked[1], ImGui::GetIO().MouseReleased[0], ImGui::GetIO().MouseReleased[1]); | ||||||
|     //ImGui::Text("MouseWheel %d", ImGui::GetIO().MouseWheel); |     //ImGui::Text("MouseWheel %d", ImGui::GetIO().MouseWheel); | ||||||
|     //ImGui::Text("KeyMods %s%s%s", ImGui::GetIO().KeyCtrl ? "CTRL" : "", ImGui::GetIO().KeyShift ? "SHIFT" : "", ImGui::GetIO().KeyAlt? "ALT" : ""); |     //ImGui::Text("KeyMods %s%s%s", ImGui::GetIO().KeyCtrl ? "CTRL" : "", ImGui::GetIO().KeyShift ? "SHIFT" : "", ImGui::GetIO().KeyAlt? "ALT" : ""); | ||||||
|     //ImGui::Text("WantCaptureMouse: %d", ImGui::GetIO().WantCaptureMouse); |     //ImGui::Text("WantCaptureMouse: %d", ImGui::GetIO().WantCaptureMouse); | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -356,6 +356,7 @@ namespace ImGui | |||||||
|     IMGUI_API bool          IsMouseDown(int button); |     IMGUI_API bool          IsMouseDown(int button); | ||||||
|     IMGUI_API bool          IsMouseClicked(int button, bool repeat = false); |     IMGUI_API bool          IsMouseClicked(int button, bool repeat = false); | ||||||
|     IMGUI_API bool          IsMouseDoubleClicked(int button); |     IMGUI_API bool          IsMouseDoubleClicked(int button); | ||||||
|  |     IMGUI_API bool          IsMouseReleased(int button); | ||||||
|     IMGUI_API bool          IsMouseHoveringWindow();                                            // is mouse hovering current window ("window" in API names always refer to current window) |     IMGUI_API bool          IsMouseHoveringWindow();                                            // is mouse hovering current window ("window" in API names always refer to current window) | ||||||
|     IMGUI_API bool          IsMouseHoveringAnyWindow();                                         // is mouse hovering any active imgui window |     IMGUI_API bool          IsMouseHoveringAnyWindow();                                         // is mouse hovering any active imgui window | ||||||
|     IMGUI_API bool          IsMouseHoveringRect(const ImVec2& rect_min, const ImVec2& rect_max);// is mouse hovering given bounding rect |     IMGUI_API bool          IsMouseHoveringRect(const ImVec2& rect_min, const ImVec2& rect_max);// is mouse hovering given bounding rect | ||||||
| @@ -701,8 +702,10 @@ struct ImGuiIO | |||||||
|     ImVec2      MouseClickedPos[5];         // Position at time of clicking |     ImVec2      MouseClickedPos[5];         // Position at time of clicking | ||||||
|     float       MouseClickedTime[5];        // Time of last click (used to figure out double-click) |     float       MouseClickedTime[5];        // Time of last click (used to figure out double-click) | ||||||
|     bool        MouseDoubleClicked[5];      // Has mouse button been double-clicked? |     bool        MouseDoubleClicked[5];      // Has mouse button been double-clicked? | ||||||
|  |     bool        MouseReleased[5];           // Mouse button went from !Down to Down | ||||||
|     bool        MouseDownOwned[5];          // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. |     bool        MouseDownOwned[5];          // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. | ||||||
|     float       MouseDownTime[5];           // Time the mouse button has been down |     float       MouseDownDuration[5];       // Time the mouse button has been down | ||||||
|  |     float       MouseDownDurationPrev[5];   // Previous time the mouse button has been down | ||||||
|     float       MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the click point |     float       MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the click point | ||||||
|     float       KeysDownTime[512];          // Time the keyboard key has been down |     float       KeysDownTime[512];          // Time the keyboard key has been down | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user