mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Menus: Tweaked horizontal overlap between parent and child menu (to help convey relative depth) from using style.ItemSpacing.x to style.ItemInnerSpacing.x, the later being expected to be smaller. (#1086)
This commit is contained in:
		| @@ -50,6 +50,8 @@ Other Changes: | ||||
| - Tabs: Added ImGuiTabBarFlags_TabListPopupButton flag to show a popup button on manual tab bars. (#261, #351) | ||||
| - Tabs: Removed ImGuiTabBarFlags_NoTabListPopupButton which was available in 1.67 but actually had zero use. | ||||
| - Tabs: Fixed a minor clipping glitch when changing style's FramePadding from frame to frame. | ||||
| - Menus: Tweaked horizontal overlap between parent and child menu (to help convey relative depth) | ||||
|   from using style.ItemSpacing.x to style.ItemInnerSpacing.x, the later being expected to be smaller. (#1086) | ||||
| - RadioButton: Fixed label horizontal alignment to precisely match Checkbox(). | ||||
| - Window: When resizing from an edge, the border is more visible and better follow the rounded corners. | ||||
| - ImDrawList: Fixed AddCircle(), AddCircleFilled() angle step being off, which was visible when drawing a "circle" | ||||
|   | ||||
| @@ -159,6 +159,7 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i | ||||
|  - listbox: user may want to initial scroll to focus on the one selected value? | ||||
|  - listbox: expose hovered item for a basic ListBox | ||||
|  - listbox: keyboard navigation. | ||||
|  - listbox: disable capturing mouse wheel if the listbox has no scrolling. (#1681) | ||||
|  - listbox: scrolling should track modified selection. | ||||
|  | ||||
| !- popups/menus: clarify usage of popups id, how MenuItem/Selectable closing parent popups affects the ID, etc. this is quite fishy needs improvement! (#331, #402) | ||||
|   | ||||
| @@ -7078,11 +7078,11 @@ ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window) | ||||
|     ImRect r_outer = GetWindowAllowedExtentRect(window); | ||||
|     if (window->Flags & ImGuiWindowFlags_ChildMenu) | ||||
|     { | ||||
|         // Child menus typically request _any_ position within the parent menu item, and then our FindBestWindowPosForPopup() function will move the new menu outside the parent bounds. | ||||
|         // Child menus typically request _any_ position within the parent menu item, and then we move the new menu outside the parent bounds. | ||||
|         // This is how we end up with child menus appearing (most-commonly) on the right of the parent menu. | ||||
|         IM_ASSERT(g.CurrentWindow == window); | ||||
|         ImGuiWindow* parent_window = g.CurrentWindowStack[g.CurrentWindowStack.Size - 2]; | ||||
|         float horizontal_overlap = g.Style.ItemSpacing.x;       // We want some overlap to convey the relative depth of each menu (currently the amount of overlap is hard-coded to style.ItemSpacing.x). | ||||
|         float horizontal_overlap = g.Style.ItemInnerSpacing.x; // We want some overlap to convey the relative depth of each menu (currently the amount of overlap is hard-coded to style.ItemSpacing.x). | ||||
|         ImRect r_avoid; | ||||
|         if (parent_window->DC.MenuBarAppending) | ||||
|             r_avoid = ImRect(-FLT_MAX, parent_window->Pos.y + parent_window->TitleBarHeight(), FLT_MAX, parent_window->Pos.y + parent_window->TitleBarHeight() + parent_window->MenuBarHeight()); | ||||
|   | ||||
| @@ -5573,7 +5573,9 @@ bool ImGui::BeginMenu(const char* label, bool enabled) | ||||
|     if (menuset_is_open) | ||||
|         g.NavWindow = window;  // Odd hack to allow hovering across menus of a same menu-set (otherwise we wouldn't be able to hover parent) | ||||
|  | ||||
|     // The reference position stored in popup_pos will be used by Begin() to find a suitable position for the child menu (using FindBestWindowPosForPopup). | ||||
|     // The reference position stored in popup_pos will be used by Begin() to find a suitable position for the child menu, | ||||
|     // However the final position is going to be different! It is choosen by FindBestWindowPosForPopup(). | ||||
|     // e.g. Menus tend to overlap each other horizontally to amplify relative Z-ordering. | ||||
|     ImVec2 popup_pos, pos = window->DC.CursorPos; | ||||
|     if (window->DC.LayoutType == ImGuiLayoutType_Horizontal) | ||||
|     { | ||||
| @@ -5613,13 +5615,14 @@ bool ImGui::BeginMenu(const char* label, bool enabled) | ||||
|         { | ||||
|             if (ImGuiWindow* next_window = g.OpenPopupStack[g.BeginPopupStack.Size].Window) | ||||
|             { | ||||
|                 // FIXME-DPI: Values should be derived from a master "scale" factor. | ||||
|                 ImRect next_window_rect = next_window->Rect(); | ||||
|                 ImVec2 ta = g.IO.MousePos - g.IO.MouseDelta; | ||||
|                 ImVec2 tb = (window->Pos.x < next_window->Pos.x) ? next_window_rect.GetTL() : next_window_rect.GetTR(); | ||||
|                 ImVec2 tc = (window->Pos.x < next_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR(); | ||||
|                 float extra = ImClamp(ImFabs(ta.x - tb.x) * 0.30f, 5.0f, 30.0f); // add a bit of extra slack. | ||||
|                 ta.x += (window->Pos.x < next_window->Pos.x) ? -0.5f : +0.5f;   // to avoid numerical issues | ||||
|                 tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f);            // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale? | ||||
|                 ta.x += (window->Pos.x < next_window->Pos.x) ? -0.5f : +0.5f;    // to avoid numerical issues | ||||
|                 tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f);             // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale? | ||||
|                 tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f); | ||||
|                 moving_within_opened_triangle = ImTriangleContainsPoint(ta, tb, tc, g.IO.MousePos); | ||||
|                 //window->DrawList->PushClipRectFullScreen(); window->DrawList->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); window->DrawList->PopClipRect(); // Debug | ||||
|   | ||||
		Reference in New Issue
	
	Block a user