mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	CollapseButton: handle clipping better + align circle like in docking branch.
Amend 6c3697f6
			
			
This commit is contained in:
		@@ -809,7 +809,7 @@ bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos)
 | 
				
			|||||||
        bb_interact.Expand(ImFloor(bb_interact.GetSize() * -0.25f));
 | 
					        bb_interact.Expand(ImFloor(bb_interact.GetSize() * -0.25f));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Tweak 2: We intentionally allow interaction when clipped so that a mechanical Alt,Right,Activate sequence can always close a window.
 | 
					    // Tweak 2: We intentionally allow interaction when clipped so that a mechanical Alt,Right,Activate sequence can always close a window.
 | 
				
			||||||
    // (this isn't the regular behavior of buttons, but it doesn't affect the user much because navigation tends to keep items visible).
 | 
					    // (this isn't the common behavior of buttons, but it doesn't affect the user because navigation tends to keep items visible in scrolling layer).
 | 
				
			||||||
    bool is_clipped = !ItemAdd(bb_interact, id);
 | 
					    bool is_clipped = !ItemAdd(bb_interact, id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool hovered, held;
 | 
					    bool hovered, held;
 | 
				
			||||||
@@ -839,15 +839,17 @@ bool ImGui::CollapseButton(ImGuiID id, const ImVec2& pos)
 | 
				
			|||||||
    ImGuiWindow* window = g.CurrentWindow;
 | 
					    ImGuiWindow* window = g.CurrentWindow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImRect bb(pos, pos + ImVec2(g.FontSize, g.FontSize) + g.Style.FramePadding * 2.0f);
 | 
					    ImRect bb(pos, pos + ImVec2(g.FontSize, g.FontSize) + g.Style.FramePadding * 2.0f);
 | 
				
			||||||
    ItemAdd(bb, id);
 | 
					    bool is_clipped = !ItemAdd(bb, id);
 | 
				
			||||||
    bool hovered, held;
 | 
					    bool hovered, held;
 | 
				
			||||||
    bool pressed = ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_None);
 | 
					    bool pressed = ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_None);
 | 
				
			||||||
 | 
					    if (is_clipped)
 | 
				
			||||||
 | 
					        return pressed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Render
 | 
					    // Render
 | 
				
			||||||
    ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
 | 
					    ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
 | 
				
			||||||
    ImU32 text_col = GetColorU32(ImGuiCol_Text);
 | 
					    ImU32 text_col = GetColorU32(ImGuiCol_Text);
 | 
				
			||||||
    if (hovered || held)
 | 
					    if (hovered || held)
 | 
				
			||||||
        window->DrawList->AddCircleFilled(bb.GetCenter()/*+ ImVec2(0.0f, -0.5f)*/, g.FontSize * 0.5f + 1.0f, bg_col);
 | 
					        window->DrawList->AddCircleFilled(bb.GetCenter() + ImVec2(0.0f, -0.5f), g.FontSize * 0.5f + 1.0f, bg_col);
 | 
				
			||||||
    RenderArrow(window->DrawList, bb.Min + g.Style.FramePadding, text_col, window->Collapsed ? ImGuiDir_Right : ImGuiDir_Down, 1.0f);
 | 
					    RenderArrow(window->DrawList, bb.Min + g.Style.FramePadding, text_col, window->Collapsed ? ImGuiDir_Right : ImGuiDir_Down, 1.0f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Switch to moving the window after mouse is moved beyond the initial drag threshold
 | 
					    // Switch to moving the window after mouse is moved beyond the initial drag threshold
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user