mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 15:11:05 +01:00 
			
		
		
		
	Internals: Removed ImGuiButtonFlags_Disabled (which had inconsistent behavior) in favor of ImGuiItemFlags_Disabled. Selectable()'s ImGuiSelectableFlags_Disabled now uses the later. (#211)
This commit is contained in:
		@@ -2187,7 +2187,7 @@ static void ShowDemoWindowWidgets()
 | 
				
			|||||||
        const char* item_names[] =
 | 
					        const char* item_names[] =
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "Text", "Button", "Button (w/ repeat)", "Checkbox", "SliderFloat", "InputText", "InputFloat",
 | 
					            "Text", "Button", "Button (w/ repeat)", "Checkbox", "SliderFloat", "InputText", "InputFloat",
 | 
				
			||||||
            "InputFloat3", "ColorEdit4", "MenuItem", "TreeNode", "TreeNode (w/ double-click)", "Combo", "ListBox"
 | 
					            "InputFloat3", "ColorEdit4", "Selectable", "MenuItem", "TreeNode", "TreeNode (w/ double-click)", "Combo", "ListBox"
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        static int item_type = 1;
 | 
					        static int item_type = 1;
 | 
				
			||||||
        ImGui::Combo("Item Type", &item_type, item_names, IM_ARRAYSIZE(item_names), IM_ARRAYSIZE(item_names));
 | 
					        ImGui::Combo("Item Type", &item_type, item_names, IM_ARRAYSIZE(item_names), IM_ARRAYSIZE(item_names));
 | 
				
			||||||
@@ -2208,11 +2208,12 @@ static void ShowDemoWindowWidgets()
 | 
				
			|||||||
        if (item_type == 6) { ret = ImGui::InputFloat("ITEM: InputFloat", col4f, 1.0f); }               // Testing +/- buttons on scalar input
 | 
					        if (item_type == 6) { ret = ImGui::InputFloat("ITEM: InputFloat", col4f, 1.0f); }               // Testing +/- buttons on scalar input
 | 
				
			||||||
        if (item_type == 7) { ret = ImGui::InputFloat3("ITEM: InputFloat3", col4f); }                   // Testing multi-component items (IsItemXXX flags are reported merged)
 | 
					        if (item_type == 7) { ret = ImGui::InputFloat3("ITEM: InputFloat3", col4f); }                   // Testing multi-component items (IsItemXXX flags are reported merged)
 | 
				
			||||||
        if (item_type == 8) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); }                     // Testing multi-component items (IsItemXXX flags are reported merged)
 | 
					        if (item_type == 8) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); }                     // Testing multi-component items (IsItemXXX flags are reported merged)
 | 
				
			||||||
        if (item_type == 9) { ret = ImGui::MenuItem("ITEM: MenuItem"); }                                // Testing menu item (they use ImGuiButtonFlags_PressedOnRelease button policy)
 | 
					        if (item_type == 9) { ret = ImGui::Selectable("ITEM: Selectable"); }                            // Testing selectable item
 | 
				
			||||||
        if (item_type == 10){ ret = ImGui::TreeNode("ITEM: TreeNode"); if (ret) ImGui::TreePop(); }     // Testing tree node
 | 
					        if (item_type == 10){ ret = ImGui::MenuItem("ITEM: MenuItem"); }                                // Testing menu item (they use ImGuiButtonFlags_PressedOnRelease button policy)
 | 
				
			||||||
        if (item_type == 11){ ret = ImGui::TreeNodeEx("ITEM: TreeNode w/ ImGuiTreeNodeFlags_OpenOnDoubleClick", ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_NoTreePushOnOpen); } // Testing tree node with ImGuiButtonFlags_PressedOnDoubleClick button policy.
 | 
					        if (item_type == 11){ ret = ImGui::TreeNode("ITEM: TreeNode"); if (ret) ImGui::TreePop(); }     // Testing tree node
 | 
				
			||||||
        if (item_type == 12){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::Combo("ITEM: Combo", ¤t, items, IM_ARRAYSIZE(items)); }
 | 
					        if (item_type == 12){ ret = ImGui::TreeNodeEx("ITEM: TreeNode w/ ImGuiTreeNodeFlags_OpenOnDoubleClick", ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_NoTreePushOnOpen); } // Testing tree node with ImGuiButtonFlags_PressedOnDoubleClick button policy.
 | 
				
			||||||
        if (item_type == 13){ 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 == 13){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::Combo("ITEM: Combo", ¤t, items, IM_ARRAYSIZE(items)); }
 | 
				
			||||||
 | 
					        if (item_type == 14){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::ListBox("ITEM: ListBox", ¤t, items, IM_ARRAYSIZE(items), IM_ARRAYSIZE(items)); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Display the values of IsItemHovered() and other common item state functions.
 | 
					        // Display the values of IsItemHovered() and other common item state functions.
 | 
				
			||||||
        // Note that the ImGuiHoveredFlags_XXX flags can be combined.
 | 
					        // Note that the ImGuiHoveredFlags_XXX flags can be combined.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -798,7 +798,7 @@ enum ImGuiButtonFlagsPrivate_
 | 
				
			|||||||
    ImGuiButtonFlags_FlattenChildren        = 1 << 11,  // allow interactions even if a child window is overlapping
 | 
					    ImGuiButtonFlags_FlattenChildren        = 1 << 11,  // allow interactions even if a child window is overlapping
 | 
				
			||||||
    ImGuiButtonFlags_AllowItemOverlap       = 1 << 12,  // require previous frame HoveredId to either match id or be null before being usable, use along with SetItemAllowOverlap()
 | 
					    ImGuiButtonFlags_AllowItemOverlap       = 1 << 12,  // require previous frame HoveredId to either match id or be null before being usable, use along with SetItemAllowOverlap()
 | 
				
			||||||
    ImGuiButtonFlags_DontClosePopups        = 1 << 13,  // disable automatically closing parent popup on press // [UNUSED]
 | 
					    ImGuiButtonFlags_DontClosePopups        = 1 << 13,  // disable automatically closing parent popup on press // [UNUSED]
 | 
				
			||||||
    ImGuiButtonFlags_Disabled               = 1 << 14,  // disable interactions
 | 
					    //ImGuiButtonFlags_Disabled             = 1 << 14,  // disable interactions -> use PushDisabled() or ImGuiItemFlags_Disabled
 | 
				
			||||||
    ImGuiButtonFlags_AlignTextBaseLine      = 1 << 15,  // vertically align button to match text baseline - ButtonEx() only // FIXME: Should be removed and handled by SmallButton(), not possible currently because of DC.CursorPosPrevLine
 | 
					    ImGuiButtonFlags_AlignTextBaseLine      = 1 << 15,  // vertically align button to match text baseline - ButtonEx() only // FIXME: Should be removed and handled by SmallButton(), not possible currently because of DC.CursorPosPrevLine
 | 
				
			||||||
    ImGuiButtonFlags_NoKeyModifiers         = 1 << 16,  // disable mouse interaction if a key modifier is held
 | 
					    ImGuiButtonFlags_NoKeyModifiers         = 1 << 16,  // disable mouse interaction if a key modifier is held
 | 
				
			||||||
    ImGuiButtonFlags_NoHoldingActiveId      = 1 << 17,  // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
 | 
					    ImGuiButtonFlags_NoHoldingActiveId      = 1 << 17,  // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -488,14 +488,6 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
 | 
				
			|||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (flags & ImGuiButtonFlags_Disabled)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if (out_hovered) *out_hovered = false;
 | 
					 | 
				
			||||||
        if (out_held) *out_held = false;
 | 
					 | 
				
			||||||
        if (g.ActiveId == id) ClearActiveID();
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Default only reacts to left mouse button
 | 
					    // Default only reacts to left mouse button
 | 
				
			||||||
    if ((flags & ImGuiButtonFlags_MouseButtonMask_) == 0)
 | 
					    if ((flags & ImGuiButtonFlags_MouseButtonMask_) == 0)
 | 
				
			||||||
        flags |= ImGuiButtonFlags_MouseButtonDefault_;
 | 
					        flags |= ImGuiButtonFlags_MouseButtonDefault_;
 | 
				
			||||||
@@ -6139,7 +6131,8 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool item_add;
 | 
					    bool item_add;
 | 
				
			||||||
    if (flags & ImGuiSelectableFlags_Disabled)
 | 
					    const bool disabled_item = (flags & ImGuiSelectableFlags_Disabled) != 0;
 | 
				
			||||||
 | 
					    if (disabled_item)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGuiItemFlags backup_item_flags = g.CurrentItemFlags;
 | 
					        ImGuiItemFlags backup_item_flags = g.CurrentItemFlags;
 | 
				
			||||||
        g.CurrentItemFlags |= ImGuiItemFlags_Disabled;
 | 
					        g.CurrentItemFlags |= ImGuiItemFlags_Disabled;
 | 
				
			||||||
@@ -6160,6 +6153,12 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
 | 
				
			|||||||
    if (!item_add)
 | 
					    if (!item_add)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const bool disabled_global = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0;
 | 
				
			||||||
 | 
					    if (disabled_item && !disabled_global)
 | 
				
			||||||
 | 
					        PushDisabled(true);
 | 
				
			||||||
 | 
					    if (disabled_item || disabled_global)
 | 
				
			||||||
 | 
					        selected = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // FIXME: We can standardize the behavior of those two, we could also keep the fast path of override ClipRect + full push on render only,
 | 
					    // FIXME: We can standardize the behavior of those two, we could also keep the fast path of override ClipRect + full push on render only,
 | 
				
			||||||
    // which would be advantageous since most selectable are not selected.
 | 
					    // which would be advantageous since most selectable are not selected.
 | 
				
			||||||
    if (span_all_columns && window->DC.CurrentColumns)
 | 
					    if (span_all_columns && window->DC.CurrentColumns)
 | 
				
			||||||
@@ -6172,13 +6171,9 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
 | 
				
			|||||||
    if (flags & ImGuiSelectableFlags_NoHoldingActiveID) { button_flags |= ImGuiButtonFlags_NoHoldingActiveId; }
 | 
					    if (flags & ImGuiSelectableFlags_NoHoldingActiveID) { button_flags |= ImGuiButtonFlags_NoHoldingActiveId; }
 | 
				
			||||||
    if (flags & ImGuiSelectableFlags_SelectOnClick)     { button_flags |= ImGuiButtonFlags_PressedOnClick; }
 | 
					    if (flags & ImGuiSelectableFlags_SelectOnClick)     { button_flags |= ImGuiButtonFlags_PressedOnClick; }
 | 
				
			||||||
    if (flags & ImGuiSelectableFlags_SelectOnRelease)   { button_flags |= ImGuiButtonFlags_PressedOnRelease; }
 | 
					    if (flags & ImGuiSelectableFlags_SelectOnRelease)   { button_flags |= ImGuiButtonFlags_PressedOnRelease; }
 | 
				
			||||||
    if (flags & ImGuiSelectableFlags_Disabled)          { button_flags |= ImGuiButtonFlags_Disabled; }
 | 
					 | 
				
			||||||
    if (flags & ImGuiSelectableFlags_AllowDoubleClick)  { button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick; }
 | 
					    if (flags & ImGuiSelectableFlags_AllowDoubleClick)  { button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick; }
 | 
				
			||||||
    if (flags & ImGuiSelectableFlags_AllowItemOverlap)  { button_flags |= ImGuiButtonFlags_AllowItemOverlap; }
 | 
					    if (flags & ImGuiSelectableFlags_AllowItemOverlap)  { button_flags |= ImGuiButtonFlags_AllowItemOverlap; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (flags & ImGuiSelectableFlags_Disabled)
 | 
					 | 
				
			||||||
        selected = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const bool was_selected = selected;
 | 
					    const bool was_selected = selected;
 | 
				
			||||||
    bool hovered, held;
 | 
					    bool hovered, held;
 | 
				
			||||||
    bool pressed = ButtonBehavior(bb, id, &hovered, &held, button_flags);
 | 
					    bool pressed = ButtonBehavior(bb, id, &hovered, &held, button_flags);
 | 
				
			||||||
@@ -6228,14 +6223,15 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
 | 
				
			|||||||
    else if (span_all_columns && g.CurrentTable)
 | 
					    else if (span_all_columns && g.CurrentTable)
 | 
				
			||||||
        TablePopBackgroundChannel();
 | 
					        TablePopBackgroundChannel();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]);
 | 
					 | 
				
			||||||
    RenderTextClipped(text_min, text_max, label, NULL, &label_size, style.SelectableTextAlign, &bb);
 | 
					    RenderTextClipped(text_min, text_max, label, NULL, &label_size, style.SelectableTextAlign, &bb);
 | 
				
			||||||
    if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Automatically close popups
 | 
					    // Automatically close popups
 | 
				
			||||||
    if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && !(g.CurrentItemFlags & ImGuiItemFlags_SelectableDontClosePopup))
 | 
					    if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && !(g.CurrentItemFlags & ImGuiItemFlags_SelectableDontClosePopup))
 | 
				
			||||||
        CloseCurrentPopup();
 | 
					        CloseCurrentPopup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (disabled_item && !disabled_global)
 | 
				
			||||||
 | 
					        PopDisabled();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.LastItemStatusFlags);
 | 
					    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.LastItemStatusFlags);
 | 
				
			||||||
    return pressed;
 | 
					    return pressed;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user