mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Tweak EndGroup() to facilitate fixing #2550 later (currently should have no side-effect0. Demo: Add extra widget to status query test.
This commit is contained in:
		@@ -6825,10 +6825,13 @@ void ImGui::EndGroup()
 | 
			
		||||
 | 
			
		||||
    // If the current ActiveId was declared within the boundary of our group, we copy it to LastItemId so IsItemActive(), IsItemDeactivated() etc. will be functional on the entire group.
 | 
			
		||||
    // It would be be neater if we replaced window.DC.LastItemId by e.g. 'bool LastItemIsActive', but would put a little more burden on individual widgets.
 | 
			
		||||
    // (and if you grep for LastItemId you'll notice it is only used in that context.
 | 
			
		||||
    if ((group_data.BackupActiveIdIsAlive != g.ActiveId) && (g.ActiveIdIsAlive == g.ActiveId) && g.ActiveId) // && g.ActiveIdWindow->RootWindow == window->RootWindow)
 | 
			
		||||
    // Also if you grep for LastItemId you'll notice it is only used in that context.
 | 
			
		||||
    // (The tests not symmetrical because ActiveIdIsAlive is an ID itself, in order to be able to handle ActiveId being overwritten during the frame.)
 | 
			
		||||
    const bool group_contains_curr_active_id = (group_data.BackupActiveIdIsAlive != g.ActiveId) && (g.ActiveIdIsAlive == g.ActiveId) && g.ActiveId;
 | 
			
		||||
    const bool group_contains_prev_active_id = !group_data.BackupActiveIdPreviousFrameIsAlive && g.ActiveIdPreviousFrameIsAlive;
 | 
			
		||||
    if (group_contains_curr_active_id)
 | 
			
		||||
        window->DC.LastItemId = g.ActiveId;
 | 
			
		||||
    else if (!group_data.BackupActiveIdPreviousFrameIsAlive && g.ActiveIdPreviousFrameIsAlive) // && g.ActiveIdPreviousFrameWindow->RootWindow == window->RootWindow)
 | 
			
		||||
    else if (group_contains_prev_active_id)
 | 
			
		||||
        window->DC.LastItemId = g.ActiveIdPreviousFrame;
 | 
			
		||||
    window->DC.LastItemRect = group_bb;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1533,10 +1533,11 @@ static void ShowDemoWindowWidgets()
 | 
			
		||||
        ImGui::RadioButton("Checkbox", &item_type, 2);
 | 
			
		||||
        ImGui::RadioButton("SliderFloat", &item_type, 3);
 | 
			
		||||
        ImGui::RadioButton("InputText", &item_type, 4);
 | 
			
		||||
        ImGui::RadioButton("ColorEdit4", &item_type, 5);
 | 
			
		||||
        ImGui::RadioButton("MenuItem", &item_type, 6);
 | 
			
		||||
        ImGui::RadioButton("TreeNode (w/ double-click)", &item_type, 7);
 | 
			
		||||
        ImGui::RadioButton("ListBox", &item_type, 8);
 | 
			
		||||
        ImGui::RadioButton("InputFloat3", &item_type, 5);
 | 
			
		||||
        ImGui::RadioButton("ColorEdit4", &item_type, 6);
 | 
			
		||||
        ImGui::RadioButton("MenuItem", &item_type, 7);
 | 
			
		||||
        ImGui::RadioButton("TreeNode (w/ double-click)", &item_type, 8);
 | 
			
		||||
        ImGui::RadioButton("ListBox", &item_type, 9);
 | 
			
		||||
        ImGui::Separator();
 | 
			
		||||
        bool ret = false;
 | 
			
		||||
        if (item_type == 0) { ImGui::Text("ITEM: Text"); }                                              // Testing text items with no identifier/interaction
 | 
			
		||||
@@ -1544,10 +1545,11 @@ static void ShowDemoWindowWidgets()
 | 
			
		||||
        if (item_type == 2) { ret = ImGui::Checkbox("ITEM: Checkbox", &b); }                            // Testing checkbox
 | 
			
		||||
        if (item_type == 3) { ret = ImGui::SliderFloat("ITEM: SliderFloat", &col4f[0], 0.0f, 1.0f); }   // Testing basic item
 | 
			
		||||
        if (item_type == 4) { ret = ImGui::InputText("ITEM: InputText", &str[0], IM_ARRAYSIZE(str)); }  // Testing input text (which handles tabbing)
 | 
			
		||||
        if (item_type == 5) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); }                     // Testing multi-component items (IsItemXXX flags are reported merged)
 | 
			
		||||
        if (item_type == 6) { ret = ImGui::MenuItem("ITEM: MenuItem"); }                                // Testing menu item (they use ImGuiButtonFlags_PressedOnRelease button policy)
 | 
			
		||||
        if (item_type == 7) { ret = ImGui::TreeNodeEx("ITEM: TreeNode w/ ImGuiTreeNodeFlags_OpenOnDoubleClick", ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_NoTreePushOnOpen); } // Testing tree node with ImGuiButtonFlags_PressedOnDoubleClick button policy.
 | 
			
		||||
        if (item_type == 8) { const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::ListBox("ITEM: ListBox", ¤t, items, IM_ARRAYSIZE(items), IM_ARRAYSIZE(items)); }
 | 
			
		||||
        if (item_type == 5) { ret = ImGui::InputFloat3("ITEM: InputFloat3", col4f); }                   // Testing multi-component items (IsItemXXX flags are reported merged)
 | 
			
		||||
        if (item_type == 6) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); }                     // Testing multi-component items (IsItemXXX flags are reported merged)
 | 
			
		||||
        if (item_type == 7) { ret = ImGui::MenuItem("ITEM: MenuItem"); }                                // Testing menu item (they use ImGuiButtonFlags_PressedOnRelease button policy)
 | 
			
		||||
        if (item_type == 8) { ret = ImGui::TreeNodeEx("ITEM: TreeNode w/ ImGuiTreeNodeFlags_OpenOnDoubleClick", ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_NoTreePushOnOpen); } // Testing tree node with ImGuiButtonFlags_PressedOnDoubleClick button policy.
 | 
			
		||||
        if (item_type == 9) { const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::ListBox("ITEM: ListBox", ¤t, items, IM_ARRAYSIZE(items), IM_ARRAYSIZE(items)); }
 | 
			
		||||
        ImGui::BulletText(
 | 
			
		||||
            "Return value = %d\n"
 | 
			
		||||
            "IsItemFocused() = %d\n"
 | 
			
		||||
@@ -1628,6 +1630,9 @@ static void ShowDemoWindowWidgets()
 | 
			
		||||
        if (embed_all_inside_a_child_window)
 | 
			
		||||
            ImGui::EndChild();
 | 
			
		||||
 | 
			
		||||
        static char dummy_str[] = "This is a dummy field to be able to tab-out of the widgets above.";
 | 
			
		||||
        ImGui::InputText("dummy", dummy_str, IM_ARRAYSIZE(dummy_str), ImGuiInputTextFlags_ReadOnly);
 | 
			
		||||
 | 
			
		||||
        // Calling IsItemHovered() after begin returns the hovered status of the title bar.
 | 
			
		||||
        // This is useful in particular if you want to create a context menu (with BeginPopupContextItem) associated to the title bar of a window.
 | 
			
		||||
        static bool test_window = false;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user