mirror of
https://github.com/Drezil/imgui.git
synced 2024-12-24 00:26:36 +00:00
Internal: Tree: tweaks (initially tried to implement auto-scrolling, stashed)
This commit is contained in:
parent
97691643b7
commit
25849234f6
@ -41,8 +41,8 @@ Other Changes:
|
||||
- ColorPicker: Made rendering aware of global style alpha of the picker can be faded out. (#2711)
|
||||
Note that some elements won't accurately fade down with the same intensity, and the color wheel
|
||||
when enabled will have small overlap glitches with (style.Alpha < 1.0).
|
||||
- TabBar: Fixed ScrollToBar request creating bouncing loop when tab is larger than available space.
|
||||
- TabBar: Fixed single-tab not shrinking their width down.
|
||||
- TabBar: Fixed clicking on a tab larger than tab-bar width creating a bouncing feedback loop.
|
||||
- TabBar: Feed desired width (sum of unclipped tabs width) into layout system to allow for auto-resize. (#2768)
|
||||
(before 1.71 tab bars fed the sum of current width which created feedback loops in certain situations).
|
||||
- TabBar: Improved shrinking for large number of tabs to avoid leaving extraneous space on the right side.
|
||||
@ -50,8 +50,8 @@ Other Changes:
|
||||
- Columns, Separator: Fixed a bug where non-visible separators within columns would alter the next row position
|
||||
differently than visible ones.
|
||||
- SliderScalar: Improved assert when using U32 or U64 types with a large v_max value. (#2765) [@loicmouton]
|
||||
- DragInt, DragFloat, DragScalar: Using (v_min > v_max) allows locking any edit to the value.
|
||||
- DragScalar: Fixed dragging of unsigned values on ARM cpu. (#2780) [@dBagrat]
|
||||
- DragInt, DragFloat, DragScalar: Using (v_min > v_max) allows locking any edits to the value.
|
||||
- DragScalar: Fixed dragging of unsigned values on ARM cpu (float to uint cast is undefined). (#2780) [@dBagrat]
|
||||
- TreeNode: Added ImGuiTreeNodeFlags_SpanAvailWidth flag. (#2451, #2438, #1897) [@Melix19, @PathogenDavid]
|
||||
This extends the hit-box to the right-most edge, even if the node is not framed.
|
||||
(Note: this is not the default in order to allow adding other items on the same line. In the future we will
|
||||
@ -66,20 +66,19 @@ Other Changes:
|
||||
Otherwise we render ellipsis using '.' from the font from where we trim excessive spacing to make it as narrow
|
||||
as possible. (#2775) [@rokups]
|
||||
- ImDrawList: Clarified the name of many parameters so reading the code is a little easier. (#2740)
|
||||
- ImDrawListSplitter: fixed an issue merging channels if the last submitted draw command used a different texture. (#2506)
|
||||
- ImDrawListSplitter: Fixed merging channels if the last submitted draw command used a different texture. (#2506)
|
||||
- Using offsetof() when available in C++11. Avoids Clang sanitizer complaining about old-style macros. (#94)
|
||||
- ImVector: Added find(), find_erase(), find_erase_unsorted() helpers.
|
||||
- Added a mechanism to compact/free the larger allocations of unused windows (buffers are compacted when
|
||||
a window is unused for 60 seconds, as per io.ConfigWindowsMemoryCompactTimer = 60.0f). Note that memory
|
||||
usage has never been reported as a problem, so this is merely a touch of overzealous luxury. (#2636)
|
||||
- Backends: OpenGL3: Tweaked initialization code allow application calling ImGui_ImplOpenGL3_CreateFontsTexture()
|
||||
before ImGui_ImplOpenGL3_NewFrame() if for some reason they wanted.
|
||||
before ImGui_ImplOpenGL3_NewFrame(), which sometimes can be convenient.
|
||||
- Backends: OpenGL3: Attempt to automatically detect default GL loader by using __has_include. (#2798) [@o-micron]
|
||||
- Backends: DX11: Fixed GSGetShader() call not passing an initialized instance count,
|
||||
would generally make the debug layer complain (Added in 1.72).
|
||||
- Backends: Vulkan: Added support for specifying multisample count.
|
||||
Set ImGui_ImplVulkan_InitInfo::MSAASamples to one of the VkSampleCountFlagBits values
|
||||
to use, default is non-multisampled as before. (#2705, #2706) [@vilya]
|
||||
- Backends: DX11: Fixed GSGetShader() call not passing an initialized instance count, which would
|
||||
generally make the DX11 debug layer complain (bug added in 1.72).
|
||||
- Backends: Vulkan: Added support for specifying multisample count. Set 'ImGui_ImplVulkan_InitInfo::MSAASamples' to
|
||||
one of the VkSampleCountFlagBits values to use, default is non-multisampled as before. (#2705, #2706) [@vilya]
|
||||
- Examples: OSX: Fix example_apple_opengl2/main.mm not forwarding mouse clicks and drags correctly. (#1961, #2710)
|
||||
[@intonarumori, @ElectricMagic]
|
||||
- Misc: Updated stb_rect_pack from 0.99 to 1.00 (fixes by @rygorous: off-by-1 bug in best-fit heuristic,
|
||||
|
@ -63,7 +63,7 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i
|
||||
- widgets: display mode: widget-label, label-widget (aligned on column or using fixed size), label-newline-tab-widget etc. (#395)
|
||||
- widgets: clean up widgets internal toward exposing everything and stabilizing imgui_internals.h.
|
||||
- widgets: add visuals for Disabled/ReadOnly mode and expose publicly (#211)
|
||||
- widgets: add always-allow-overlap mode. This should perhaps be the default.
|
||||
- widgets: add always-allow-overlap mode. This should perhaps be the default? one problem is that highlight after mouse-wheel scrolling gets deferred, makes scrolling more flickery.
|
||||
- widgets: start exposing PushItemFlag() and ImGuiItemFlags
|
||||
- widgets: alignment options in style (e.g. center Selectable, Right-Align within Button, etc.) #1260
|
||||
- widgets: activate by identifier (trigger button, focus given id)
|
||||
|
@ -5901,7 +5901,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
||||
window->DC.TextWrapPosStack.resize(0);
|
||||
window->DC.CurrentColumns = NULL;
|
||||
window->DC.TreeDepth = 0;
|
||||
window->DC.TreeStoreMayJumpToParentOnPop = 0x00;
|
||||
window->DC.TreeMayJumpToParentOnPopMask = 0x00;
|
||||
window->DC.StateStorage = &window->StateStorage;
|
||||
window->DC.GroupStack.resize(0);
|
||||
window->MenuColumns.Update(3, style.ItemSpacing.x, window_just_activated_by_user);
|
||||
|
@ -1208,7 +1208,7 @@ struct IMGUI_API ImGuiWindowTempData
|
||||
float CurrLineTextBaseOffset;
|
||||
float PrevLineTextBaseOffset;
|
||||
int TreeDepth;
|
||||
ImU32 TreeStoreMayJumpToParentOnPop; // Store a copy of !g.NavIdIsAlive for TreeDepth 0..31.. Could be turned into a ImU64 if necessary.
|
||||
ImU32 TreeMayJumpToParentOnPopMask; // Store a copy of !g.NavIdIsAlive for TreeDepth 0..31.. Could be turned into a ImU64 if necessary.
|
||||
ImGuiID LastItemId;
|
||||
ImGuiItemStatusFlags LastItemStatusFlags;
|
||||
ImRect LastItemRect; // Interaction rect
|
||||
@ -1249,7 +1249,7 @@ struct IMGUI_API ImGuiWindowTempData
|
||||
CurrLineSize = PrevLineSize = ImVec2(0.0f, 0.0f);
|
||||
CurrLineTextBaseOffset = PrevLineTextBaseOffset = 0.0f;
|
||||
TreeDepth = 0;
|
||||
TreeStoreMayJumpToParentOnPop = 0x00;
|
||||
TreeMayJumpToParentOnPopMask = 0x00;
|
||||
LastItemId = 0;
|
||||
LastItemStatusFlags = 0;
|
||||
LastItemRect = LastItemDisplayRect = ImRect();
|
||||
|
@ -5228,7 +5228,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
|
||||
const bool is_leaf = (flags & ImGuiTreeNodeFlags_Leaf) != 0;
|
||||
bool is_open = TreeNodeBehaviorIsOpen(id, flags);
|
||||
if (is_open && !g.NavIdIsAlive && (flags & ImGuiTreeNodeFlags_NavLeftJumpsBackHere) && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
|
||||
window->DC.TreeStoreMayJumpToParentOnPop |= (1 << window->DC.TreeDepth);
|
||||
window->DC.TreeMayJumpToParentOnPopMask |= (1 << window->DC.TreeDepth);
|
||||
|
||||
bool item_add = ItemAdd(interact_bb, id);
|
||||
window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HasDisplayRect;
|
||||
@ -5380,13 +5380,16 @@ void ImGui::TreePop()
|
||||
Unindent();
|
||||
|
||||
window->DC.TreeDepth--;
|
||||
ImU32 tree_depth_mask = (1 << window->DC.TreeDepth);
|
||||
|
||||
// Handle Left arrow to move to parent tree node (when ImGuiTreeNodeFlags_NavLeftJumpsBackHere is enabled)
|
||||
if (g.NavMoveDir == ImGuiDir_Left && g.NavWindow == window && NavMoveRequestButNoResultYet())
|
||||
if (g.NavIdIsAlive && (window->DC.TreeStoreMayJumpToParentOnPop & (1 << window->DC.TreeDepth)))
|
||||
if (g.NavIdIsAlive && (window->DC.TreeMayJumpToParentOnPopMask & tree_depth_mask))
|
||||
{
|
||||
SetNavID(window->IDStack.back(), g.NavLayer);
|
||||
NavMoveRequestCancel();
|
||||
}
|
||||
window->DC.TreeStoreMayJumpToParentOnPop &= (1 << window->DC.TreeDepth) - 1;
|
||||
window->DC.TreeMayJumpToParentOnPopMask &= tree_depth_mask - 1;
|
||||
|
||||
IM_ASSERT(window->IDStack.Size > 1); // There should always be 1 element in the IDStack (pushed during window creation). If this triggers you called TreePop/PopID too much.
|
||||
PopID();
|
||||
|
Loading…
Reference in New Issue
Block a user