mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Fixed IsItemHovered() - part of the processing has to be done in ItemAdd() because the widget may alter clipping rectangle temporarily.
This commit is contained in:
		
							
								
								
									
										12
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -1952,12 +1952,16 @@ bool ImGui::ItemAdd(const ImRect& bb, const ImGuiID* id) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     ImGuiWindow* window = g.CurrentWindow; | ||||
|     const bool is_clipped = IsClippedEx(bb, id, false); | ||||
|     window->DC.LastItemId = id ? *id : 0; | ||||
|     window->DC.LastItemRect = bb; | ||||
|     if (IsClippedEx(bb, id, false)) | ||||
|     window->DC.LastItemRectHoveredRect = false; | ||||
|     if (is_clipped) | ||||
|         return false; | ||||
|     //if (g.IO.KeyAlt) window->DrawList->AddRect(bb.Min, bb.Max, IM_COL32(255,255,0,120)); // [DEBUG] | ||||
|  | ||||
|     // We need to calculate this now to take account of the current clipping rectangle (as items like Selectable may change them) | ||||
|     window->DC.LastItemRectHoveredRect = IsMouseHoveringRect(bb.Min, bb.Max); | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| @@ -1968,12 +1972,12 @@ bool ImGui::IsItemHovered() | ||||
|     ImGuiContext& g = *GImGui; | ||||
|  | ||||
|     ImGuiWindow* window = g.CurrentWindow; | ||||
|     if (!window->DC.LastItemRectHoveredRect) | ||||
|         return false; | ||||
|     if (g.HoveredWindow != window) | ||||
|         return false; | ||||
|     if (g.ActiveId != 0 && g.ActiveId != window->DC.LastItemId && !g.ActiveIdAllowOverlap && g.ActiveId != window->MoveId) | ||||
|         return false; | ||||
|     if (!IsMouseHoveringRect(window->DC.LastItemRect.Min, window->DC.LastItemRect.Max)) | ||||
|         return false; | ||||
|     if (!IsWindowContentHoverable(window)) | ||||
|         return false; | ||||
|     return true; | ||||
| @@ -1982,7 +1986,7 @@ bool ImGui::IsItemHovered() | ||||
| bool ImGui::IsItemRectHovered() | ||||
| { | ||||
|     ImGuiWindow* window = GetCurrentWindowRead(); | ||||
|     return IsMouseHoveringRect(window->DC.LastItemRect.Min, window->DC.LastItemRect.Max); | ||||
|     return window->DC.LastItemRectHoveredRect; | ||||
| } | ||||
|  | ||||
| // Internal facing ItemHoverable() used when submitting widgets. Differs slightly from IsItemHovered(). | ||||
|   | ||||
		Reference in New Issue
	
	Block a user