mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Docking: Can undock from the small triangle button. (#2109,. #2645)
This commit is contained in:
		
							
								
								
									
										14
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -5511,18 +5511,22 @@ void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar
 | 
			
		||||
                window->DrawList->AddLine(menu_bar_rect.GetBL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_Border), style.FrameBorderSize);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Docking: Unhide tab bar (small triangle in the corner)
 | 
			
		||||
        if (window->DockNode && window->DockNode->IsHiddenTabBar() && !window->DockNode->IsNoTabBar())
 | 
			
		||||
        // Docking: Unhide tab bar (small triangle in the corner), drag from small triangle to quickly undock
 | 
			
		||||
        ImGuiDockNode* node = window->DockNode;
 | 
			
		||||
        if (node && window->DockIsActive && node->IsHiddenTabBar() && !node->IsNoTabBar())
 | 
			
		||||
        {
 | 
			
		||||
            float unhide_sz_draw = ImFloor(g.FontSize * 0.70f);
 | 
			
		||||
            float unhide_sz_hit = ImFloor(g.FontSize * 0.55f);
 | 
			
		||||
            ImVec2 p = window->DockNode->Pos;
 | 
			
		||||
            ImVec2 p = node->Pos;
 | 
			
		||||
            ImRect r(p, p + ImVec2(unhide_sz_hit, unhide_sz_hit));
 | 
			
		||||
            bool hovered, held;
 | 
			
		||||
            if (ButtonBehavior(r, window->GetID("#UNHIDE"), &hovered, &held, ImGuiButtonFlags_FlattenChildren))
 | 
			
		||||
                window->DockNode->WantHiddenTabBarToggle = true;
 | 
			
		||||
                node->WantHiddenTabBarToggle = true;
 | 
			
		||||
            else if (held && IsMouseDragging(0))
 | 
			
		||||
                StartMouseDragFromTitleBar(window, node, true);
 | 
			
		||||
 | 
			
		||||
            // FIXME-DOCK: Ideally we'd use ImGuiCol_TitleBgActive/ImGuiCol_TitleBg here, but neither is guaranteed to be visible enough at this sort of size..
 | 
			
		||||
            ImU32 col = GetColorU32(((held && hovered) || (window->DockNode->IsFocused && !hovered)) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
 | 
			
		||||
            ImU32 col = GetColorU32(((held && hovered) || (node->IsFocused && !hovered)) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
 | 
			
		||||
            window->DrawList->AddTriangleFilled(p, p + ImVec2(unhide_sz_draw, 0.0f), p + ImVec2(0.0f, unhide_sz_draw), col);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								imgui.h
									
									
									
									
									
								
							@@ -1610,11 +1610,11 @@ struct ImGuiSizeCallbackData
 | 
			
		||||
// Provide hints to the platform back-end via altered viewport flags (enable/disable OS decoration, OS task bar icons, etc.) and OS level parent/child relationships.
 | 
			
		||||
struct ImGuiWindowClass
 | 
			
		||||
{
 | 
			
		||||
    ImGuiID             ClassId;                    // User data. 0 = Default class (unclassed)
 | 
			
		||||
    ImGuiID             ClassId;                    // User data. 0 = Default class (unclassed). Windows of different classes cannot be docked with each others.
 | 
			
		||||
    ImGuiID             ParentViewportId;           // Hint for the platform back-end. If non-zero, the platform back-end can create a parent<>child relationship between the platform windows. Not conforming back-ends are free to e.g. parent every viewport to the main viewport or not.
 | 
			
		||||
    ImGuiViewportFlags  ViewportFlagsOverrideSet;   // Viewport flags to set when a window of this class owns a viewport. This allows you to enforce OS decoration or task bar icon, override the defaults on a per-window basis.
 | 
			
		||||
    ImGuiViewportFlags  ViewportFlagsOverrideClear; // Viewport flags to clear when a window of this class owns a viewport. This allows you to enforce OS decoration or task bar icon, override the defaults on a per-window basis.
 | 
			
		||||
    bool                DockingAlwaysTabBar;        // Set to true to enforce single floating windows of this class always having their own tab bar (equivalent of setting the global io.ConfigDockingAlwaysTabBar)
 | 
			
		||||
    bool                DockingAlwaysTabBar;        // Set to true to enforce single floating windows of this class always having their own docking node (equivalent of setting the global io.ConfigDockingAlwaysTabBar)
 | 
			
		||||
    bool                DockingAllowUnclassed;      // Set to true to allow windows of this class to be docked/merged with an unclassed window.
 | 
			
		||||
 | 
			
		||||
    ImGuiWindowClass() { ClassId = 0; ParentViewportId = 0; ViewportFlagsOverrideSet = ViewportFlagsOverrideClear = 0x00; DockingAlwaysTabBar = false; DockingAllowUnclassed = true; }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user