mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-29 12:11:06 +01:00 
			
		
		
		
	Docking: comments
This commit is contained in:
		| @@ -153,34 +153,35 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i | |||||||
|  - separator: width, thickness, centering (#1643) |  - separator: width, thickness, centering (#1643) | ||||||
|  - splitter: formalize the splitter idiom into an official api (we want to handle n-way split) (#319) |  - splitter: formalize the splitter idiom into an official api (we want to handle n-way split) (#319) | ||||||
|  |  | ||||||
|  - dock: merge docking branch (#2109) |  - docking: merge docking branch (#2109) | ||||||
|  - dock: B: ordering currently held in tab bar should be implicitly held by windows themselves (also see #2304) |  - docking: B: ordering currently held in tab bar should be implicitly held by windows themselves (also see #2304) | ||||||
|  - dock: B- tab bar: the order/focus restoring code could be part of TabBar and not DockNode? (#8) |  - docking: B- tab bar: the order/focus restoring code could be part of TabBar and not DockNode? (#8) | ||||||
|  - dock: B~ rework code to be able to lazily create tab bar instance in a single place. The _Unsorted tab flag could be replacing a trailing-counter in DockNode? |  - docking: B~ rework code to be able to lazily create tab bar instance in a single place. The _Unsorted tab flag could be replacing a trailing-counter in DockNode? | ||||||
|  - dock: B~ fully track windows/settings reference in dock nodes. perhaps find a representation that allows facilitate use of dock builder functions. |  - docking: B~ fully track windows/settings reference in dock nodes. perhaps find a representation that allows facilitate use of dock builder functions. | ||||||
|  - dock: B~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete). this is mostly working but the DockBuilderXXX api are not exposed/finished. |  - docking: B~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete). this is mostly working but the DockBuilderXXX api are not exposed/finished. | ||||||
|  - dock: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized. |  - docking: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized. | ||||||
|  - dock: B~ central node resizing behavior incorrect. |  - docking: B~ central node resizing behavior incorrect. | ||||||
|  - dock: B: changing title font/style per-window is not supported as dock nodes are created in NewFrame. |  - docking: B: changing title font/style per-window is not supported as dock nodes are created in NewFrame. | ||||||
|  - dock: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them (doesn't affect the user nor request platform windows to be created, but unnecessary) |  - docking: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them (doesn't affect the user nor request platform windows to be created, but unnecessary) | ||||||
|  - dock: B- resize sibling locking behavior may be less desirable if we merged same-axis sibling in a same node level? |  - docking: B- resize sibling locking behavior may be less desirable if we merged same-axis sibling in a same node level? | ||||||
|  - dock: B- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) |  - docking: B- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar) | ||||||
|  - dock: B~ SetNextWindowDock() calls (with conditional) -> defer everything to DockContextUpdate (repro: Documents->[X]Windows->Dock 1 elsewhere->Click Redock All |  - docking: B~ SetNextWindowDock() calls (with conditional) -> defer everything to DockContextUpdate (repro: Documents->[X]Windows->Dock 1 elsewhere->Click Redock All | ||||||
|  - dock: B~ tidy up tab list popup buttons features (available with manual tab-bar, see ImGuiTabBarFlags_NoTabListPopupButton code, not used by docking nodes) |  - docking: B~ tidy up tab list popup buttons features (available with manual tab-bar, see ImGuiTabBarFlags_NoTabListPopupButton code, not used by docking nodes) | ||||||
|  - dock: B- SetNextWindowDockId(0) with a second Begin() in the frame will asserts |  - docking: B- SetNextWindowDockId(0) with a second Begin() in the frame will asserts | ||||||
|  - dock: B: resize grip drawn in host window typically appears under scrollbar. |  - docking: B: resize grip drawn in host window typically appears under scrollbar. | ||||||
|  - dock: B- SetNextWindowFocus() doesn't seem to apply if the window is hidden this frame, need repro (#4) |  - docking: B- SetNextWindowFocus() doesn't seem to apply if the window is hidden this frame, need repro (#4) | ||||||
|  - dock: B- resizing a dock tree small currently has glitches (overlapping collapse and close button, etc.) |  - docking: B- resizing a dock tree small currently has glitches (overlapping collapse and close button, etc.) | ||||||
|  - dock: B- dpi: look at interaction with the hi-dpi and multi-dpi stuff. |  - docking: B- dpi: look at interaction with the hi-dpi and multi-dpi stuff. | ||||||
|  - dock: B- tab bar: appearing on first frame with a dumb layout would do less harm that not appearing? (when behind dynamic branch) or store titles + render in EndTabBar() |  - docking: B- tab bar: appearing on first frame with a dumb layout would do less harm that not appearing? (when behind dynamic branch) or store titles + render in EndTabBar() | ||||||
|  - dock: B- tab bar: make selected tab always shows its full title? |  - docking: B- tab bar: make selected tab always shows its full title? | ||||||
|  - dock: B- nav: design interactions so nav controls can dock/undock |  - docking: B- hide close button on single tab bar? | ||||||
|  - dock: B- dockspace: flag to lock the dock tree and/or sizes (ImGuiDockNodeFlags_Locked?) |  - docking: B- nav: design interactions so nav controls can dock/undock | ||||||
|  - dock: B- reintroduce collapsing a floating dock node. also collapsing a docked dock node! |  - docking: B- dockspace: flag to lock the dock tree and/or sizes (ImGuiDockNodeFlags_Locked?) | ||||||
|  - dock: B- allow dragging a non-floating dock node by clicking on the title-bar-looking section (not just the collapse/menu button) |  - docking: B- reintroduce collapsing a floating dock node. also collapsing a docked dock node! | ||||||
|  - dock: B- option to remember undocked window size? (instead of keeping their docked size) (relate to #2104) |  - docking: B- allow dragging a non-floating dock node by clicking on the title-bar-looking section (not just the collapse/menu button) | ||||||
|  - dock: C- nav: CTRL+TAB highlighting tabs shows the mismatch between focus-stack and tab-order (not visible in VS because it doesn't highlight the tabs) |  - docking: B- option to remember undocked window size? (instead of keeping their docked size) (relate to #2104) | ||||||
|  - dock: C- after a dock/undock, the Scrollbar Status update in Begin() should use an updated e.g. size_y_for_scrollbars to avoid a 1 frame scrollbar flicker. |  - docking: C- nav: CTRL+TAB highlighting tabs shows the mismatch between focus-stack and tab-order (not visible in VS because it doesn't highlight the tabs) | ||||||
|  |  - docking: C- after a dock/undock, the Scrollbar Status update in Begin() should use an updated e.g. size_y_for_scrollbars to avoid a 1 frame scrollbar flicker. | ||||||
|  |  | ||||||
|  - tabs: make EndTabBar fail if users doesn't respect BeginTabBar return value, for consistency/future-proofing. |  - tabs: make EndTabBar fail if users doesn't respect BeginTabBar return value, for consistency/future-proofing. | ||||||
|  - tabs: persistent order/focus in BeginTabBar() api (#261, #351) |  - tabs: persistent order/focus in BeginTabBar() api (#261, #351) | ||||||
|   | |||||||
| @@ -13481,6 +13481,7 @@ void ImGui::SetWindowDock(ImGuiWindow* window, ImGuiID dock_id, ImGuiCond cond) | |||||||
|  |  | ||||||
| // Create an explicit dockspace node within an existing window. Also expose dock node flags and creates a CentralNode by default. | // Create an explicit dockspace node within an existing window. Also expose dock node flags and creates a CentralNode by default. | ||||||
| // The Central Node is always displayed even when empty and shrink/extend according to the requested size of its neighbors. | // The Central Node is always displayed even when empty and shrink/extend according to the requested size of its neighbors. | ||||||
|  | // DockSpace() needs to be submitted _before_ any window they can host. If you use a dockspace, submit it early in your app. | ||||||
| void ImGui::DockSpace(ImGuiID id, const ImVec2& size_arg, ImGuiDockNodeFlags flags, const ImGuiWindowClass* window_class) | void ImGui::DockSpace(ImGuiID id, const ImVec2& size_arg, ImGuiDockNodeFlags flags, const ImGuiWindowClass* window_class) | ||||||
| { | { | ||||||
|     ImGuiContext* ctx = GImGui; |     ImGuiContext* ctx = GImGui; | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -611,10 +611,12 @@ namespace ImGui | |||||||
|  |  | ||||||
|     // Docking |     // Docking | ||||||
|     // [BETA API] Enable with io.ConfigFlags |= ImGuiConfigFlags_DockingEnable. |     // [BETA API] Enable with io.ConfigFlags |= ImGuiConfigFlags_DockingEnable. | ||||||
|     // Note: you DO NOT need to call DockSpace() to use most Docking facilities! |     // Note: You can use most Docking facilities without calling any API. You DO NOT need to call DockSpace() to use Docking! | ||||||
|     // - To dock windows: if io.ConfigDockingWithShift == false (default) drag window from their title bar. |     // - To dock windows: if io.ConfigDockingWithShift == false (default) drag window from their title bar. | ||||||
|     // - To dock windows: if io.ConfigDockingWithShift == true: hold SHIFT anywhere while moving windows. |     // - To dock windows: if io.ConfigDockingWithShift == true: hold SHIFT anywhere while moving windows. | ||||||
|  |     // About DockSpace: | ||||||
|     // - Use DockSpace() to create an explicit dock node _within_ an existing window. See Docking demo for details. |     // - Use DockSpace() to create an explicit dock node _within_ an existing window. See Docking demo for details. | ||||||
|  |     // - DockSpace() needs to be submitted _before_ any window they can host. If you use a dockspace, submit it early in your app. | ||||||
|     IMGUI_API void          DockSpace(ImGuiID id, const ImVec2& size = ImVec2(0, 0), ImGuiDockNodeFlags flags = 0, const ImGuiWindowClass* window_class = NULL); |     IMGUI_API void          DockSpace(ImGuiID id, const ImVec2& size = ImVec2(0, 0), ImGuiDockNodeFlags flags = 0, const ImGuiWindowClass* window_class = NULL); | ||||||
|     IMGUI_API ImGuiID       DockSpaceOverViewport(ImGuiViewport* viewport = NULL, ImGuiDockNodeFlags flags = 0, const ImGuiWindowClass* window_class = NULL); |     IMGUI_API ImGuiID       DockSpaceOverViewport(ImGuiViewport* viewport = NULL, ImGuiDockNodeFlags flags = 0, const ImGuiWindowClass* window_class = NULL); | ||||||
|     IMGUI_API void          SetNextWindowDockID(ImGuiID dock_id, ImGuiCond cond = 0);           // set next window dock id (FIXME-DOCK) |     IMGUI_API void          SetNextWindowDockID(ImGuiID dock_id, ImGuiCond cond = 0);           // set next window dock id (FIXME-DOCK) | ||||||
|   | |||||||
| @@ -4652,7 +4652,8 @@ void ShowExampleAppDockSpace(bool* p_open) | |||||||
|         window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus; |         window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // When using ImGuiDockNodeFlags_PassthruCentralNode, DockSpace() will render our background and handle the pass-thru hole, so we ask Begin() to not render a background. |     // When using ImGuiDockNodeFlags_PassthruCentralNode, DockSpace() will render our background  | ||||||
|  |     // and handle the pass-thru hole, so we ask Begin() to not render a background. | ||||||
|     if (dockspace_flags & ImGuiDockNodeFlags_PassthruCentralNode) |     if (dockspace_flags & ImGuiDockNodeFlags_PassthruCentralNode) | ||||||
|         window_flags |= ImGuiWindowFlags_NoBackground; |         window_flags |= ImGuiWindowFlags_NoBackground; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1865,12 +1865,14 @@ namespace ImGui | |||||||
|     IMGUI_API void          BeginAsDockableDragDropTarget(ImGuiWindow* window); |     IMGUI_API void          BeginAsDockableDragDropTarget(ImGuiWindow* window); | ||||||
|     IMGUI_API void          SetWindowDock(ImGuiWindow* window, ImGuiID dock_id, ImGuiCond cond); |     IMGUI_API void          SetWindowDock(ImGuiWindow* window, ImGuiID dock_id, ImGuiCond cond); | ||||||
|  |  | ||||||
|     // Docking - Builder function needs to be generally called before the DockSpace() node is submitted. |     // Docking - Builder function needs to be generally called before the node is used/submitted. | ||||||
|     // - The DockBuilderXXX functions are designed to _eventually_ become a public API, but it is too early to expose it and guarantee stability. |     // - The DockBuilderXXX functions are designed to _eventually_ become a public API, but it is too early to expose it and guarantee stability. | ||||||
|     // - You can create dockspace _or_ floating nodes with this API. To create a dockspace node, make sure to set the ImGuiDockNodeFlags_DockSpace flag. |     // - Do not hold on ImGuiDockNode* pointers! They may be invalidated by any split/merge/remove operation and every frame. | ||||||
|     // - If you intend to split the node immediately after creation using DockBuilderSplitNode(), make sure to call DockBuilderSetNodeSize() beforehand. |     // - To create a DockSpace() node, make sure to set the ImGuiDockNodeFlags_DockSpace flag when calling DockBuilderAddNode(). | ||||||
|  |     //   You can create dockspace nodes (attached to a window) _or_ floating nodes (carry its own window) with this API.  | ||||||
|  |     // - If you intend to split the node immediately after creation using DockBuilderSplitNode(), make sure | ||||||
|  |     //   to call DockBuilderSetNodeSize() beforehand. If you don't, the resulting split sizes may not be reliable. | ||||||
|     // - Call DockBuilderFinish() after you are done. |     // - Call DockBuilderFinish() after you are done. | ||||||
|     // - Important: do not hold on ImGuiDockNode* pointers! They may be invalidated by any split/merge/remove operation and every frame. |  | ||||||
|     IMGUI_API void          DockBuilderDockWindow(const char* window_name, ImGuiID node_id); |     IMGUI_API void          DockBuilderDockWindow(const char* window_name, ImGuiID node_id); | ||||||
|     IMGUI_API ImGuiDockNode*DockBuilderGetNode(ImGuiID node_id); |     IMGUI_API ImGuiDockNode*DockBuilderGetNode(ImGuiID node_id); | ||||||
|     inline ImGuiDockNode*   DockBuilderGetCentralNode(ImGuiID node_id)              { ImGuiDockNode* node = DockBuilderGetNode(node_id); if (!node) return NULL; return DockNodeGetRootNode(node)->CentralNode; } |     inline ImGuiDockNode*   DockBuilderGetCentralNode(ImGuiID node_id)              { ImGuiDockNode* node = DockBuilderGetNode(node_id); if (!node) return NULL; return DockNodeGetRootNode(node)->CentralNode; } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user