mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-29 12:11:06 +01:00 
			
		
		
		
	Refactor ButtonBehavior(), fixed double-click mode also triggering on single-click (relate to #516)
This commit is contained in:
		
							
								
								
									
										40
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -5264,6 +5264,9 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     if ((flags & (ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick)) == 0) | ||||
|         flags |= ImGuiButtonFlags_PressedOnClickRelease; | ||||
|  | ||||
|     bool pressed = false; | ||||
|     bool hovered = IsHovered(bb, id, (flags & ImGuiButtonFlags_FlattenChilds) != 0); | ||||
|     if (hovered) | ||||
| @@ -5271,32 +5274,29 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool | ||||
|         SetHoveredID(id); | ||||
|         if (!(flags & ImGuiButtonFlags_NoKeyModifiers) || (!g.IO.KeyCtrl && !g.IO.KeyShift && !g.IO.KeyAlt)) | ||||
|         { | ||||
|             if (g.IO.MouseDoubleClicked[0] && (flags & ImGuiButtonFlags_PressedOnDoubleClick)) | ||||
|             if ((flags & ImGuiButtonFlags_PressedOnClickRelease) && g.IO.MouseClicked[0])   // Most common type | ||||
|             { | ||||
|                 pressed = true; | ||||
|             } | ||||
|             else if (g.IO.MouseClicked[0]) | ||||
|             { | ||||
|                 if (flags & ImGuiButtonFlags_PressedOnClick) | ||||
|                 { | ||||
|                     pressed = true; | ||||
|                     SetActiveID(0); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     SetActiveID(id, window); | ||||
|                 } | ||||
|                 SetActiveID(id, window); // Hold on ID | ||||
|                 FocusWindow(window); | ||||
|             } | ||||
|             else if (g.IO.MouseReleased[0] && (flags & ImGuiButtonFlags_PressedOnRelease)) | ||||
|             if ((flags & ImGuiButtonFlags_PressedOnClick) && g.IO.MouseClicked[0]) | ||||
|             { | ||||
|                 pressed = true; | ||||
|                 SetActiveID(0); | ||||
|                 FocusWindow(window); | ||||
|             } | ||||
|             if ((flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDoubleClicked[0]) | ||||
|             { | ||||
|                 pressed = true; | ||||
|                 FocusWindow(window); | ||||
|             } | ||||
|             if ((flags & ImGuiButtonFlags_PressedOnRelease) && g.IO.MouseReleased[0]) | ||||
|             { | ||||
|                 pressed = true; | ||||
|                 SetActiveID(0); | ||||
|             } | ||||
|             else if ((flags & ImGuiButtonFlags_Repeat) && g.ActiveId == id && ImGui::IsMouseClicked(0, true)) | ||||
|             { | ||||
|             if ((flags & ImGuiButtonFlags_Repeat) && g.ActiveId == id && ImGui::IsMouseClicked(0, true)) | ||||
|                 pressed = true; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -5309,7 +5309,7 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             if (hovered) | ||||
|             if (hovered && (flags & ImGuiButtonFlags_PressedOnClickRelease)) | ||||
|                 pressed = true; | ||||
|             SetActiveID(0); | ||||
|         } | ||||
| @@ -8242,7 +8242,7 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl | ||||
|     if (flags & ImGuiSelectableFlags_Menu) button_flags |= ImGuiButtonFlags_PressedOnClick; | ||||
|     if (flags & ImGuiSelectableFlags_MenuItem) button_flags |= ImGuiButtonFlags_PressedOnClick|ImGuiButtonFlags_PressedOnRelease; | ||||
|     if (flags & ImGuiSelectableFlags_Disabled) button_flags |= ImGuiButtonFlags_Disabled; | ||||
|     if (flags & ImGuiSelectableFlags_AllowDoubleClick) button_flags |= ImGuiButtonFlags_PressedOnDoubleClick; | ||||
|     if (flags & ImGuiSelectableFlags_AllowDoubleClick) button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick; | ||||
|     bool hovered, held; | ||||
|     bool pressed = ButtonBehavior(bb_with_spacing, id, &hovered, &held, button_flags); | ||||
|     if (flags & ImGuiSelectableFlags_Disabled) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user