mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-15 01:17:00 +00:00
PushDisabled(): added bool + clarify support for stacked disabled (#211)
This commit is contained in:
parent
03ca38eda1
commit
cc40ae2101
11
imgui.cpp
11
imgui.cpp
@ -6592,24 +6592,27 @@ void ImGui::PopItemFlag()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PushDisabled()/PopDisabled()
|
// PushDisabled()/PopDisabled()
|
||||||
|
// - Those can be nested but this cannot be used to enable an already disabled section (a single PushDisabled(true) in the stack is enough to keep things disabled)
|
||||||
// - Those are not yet exposed in imgui.h because we are unsure of how to alter the style in a way that works for everyone.
|
// - Those are not yet exposed in imgui.h because we are unsure of how to alter the style in a way that works for everyone.
|
||||||
// We may rework this. Hypothetically, a future styling system may set a flag which make widgets use different colors.
|
// We may rework this. Hypothetically, a future styling system may set a flag which make widgets use different colors.
|
||||||
// - Feedback welcome at https://github.com/ocornut/imgui/issues/211
|
// - Feedback welcome at https://github.com/ocornut/imgui/issues/211
|
||||||
// - You may trivially implement your own variation of this if needed.
|
// - You may trivially implement your own variation of this if needed.
|
||||||
// Here we test (CurrentItemFlags & ImGuiItemFlags_Disabled) to allow nested PushDisabled() calls.
|
// Here we test (CurrentItemFlags & ImGuiItemFlags_Disabled) to allow nested PushDisabled() calls.
|
||||||
void ImGui::PushDisabled()
|
void ImGui::PushDisabled(bool disabled)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
if ((g.CurrentItemFlags & ImGuiItemFlags_Disabled) == 0)
|
bool was_disabled = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0;
|
||||||
|
if (!was_disabled && disabled)
|
||||||
PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * 0.6f);
|
PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * 0.6f);
|
||||||
PushItemFlag(ImGuiItemFlags_Disabled, true);
|
PushItemFlag(ImGuiItemFlags_Disabled, was_disabled || disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::PopDisabled()
|
void ImGui::PopDisabled()
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
|
bool was_disabled = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0;
|
||||||
PopItemFlag();
|
PopItemFlag();
|
||||||
if ((g.CurrentItemFlags & ImGuiItemFlags_Disabled) == 0)
|
if (was_disabled && (g.CurrentItemFlags & ImGuiItemFlags_Disabled) == 0)
|
||||||
PopStyleVar();
|
PopStyleVar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -733,14 +733,14 @@ struct ImDrawDataBuilder
|
|||||||
enum ImGuiItemFlags_
|
enum ImGuiItemFlags_
|
||||||
{
|
{
|
||||||
ImGuiItemFlags_None = 0,
|
ImGuiItemFlags_None = 0,
|
||||||
ImGuiItemFlags_NoTabStop = 1 << 0, // false
|
ImGuiItemFlags_NoTabStop = 1 << 0, // false // Disable keyboard tabbing (FIXME: should merge with _NoNav)
|
||||||
ImGuiItemFlags_ButtonRepeat = 1 << 1, // false // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings.
|
ImGuiItemFlags_ButtonRepeat = 1 << 1, // false // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings.
|
||||||
ImGuiItemFlags_Disabled = 1 << 2, // false // [BETA] Disable interactions but doesn't affect visuals yet. See github.com/ocornut/imgui/issues/211
|
ImGuiItemFlags_Disabled = 1 << 2, // false // Disable interactions but doesn't affect visuals. See PushDisabled()/PushDisabled(). See github.com/ocornut/imgui/issues/211
|
||||||
ImGuiItemFlags_NoNav = 1 << 3, // false
|
ImGuiItemFlags_NoNav = 1 << 3, // false // Disable keyboard/gamepad directional navigation (FIXME: should merge with _NoTabStop)
|
||||||
ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, // false
|
ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, // false // Disable item being a candidate for default focus (e.g. used by title bar items)
|
||||||
ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, // false // MenuItem/Selectable() automatically closes current Popup window
|
ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, // false // Disable MenuItem/Selectable() automatically closing their popup window
|
||||||
ImGuiItemFlags_MixedValue = 1 << 6, // false // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets)
|
ImGuiItemFlags_MixedValue = 1 << 6, // false // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets)
|
||||||
ImGuiItemFlags_ReadOnly = 1 << 7 // false // [ALPHA] Allow hovering interactions but underlying value is not changed.
|
ImGuiItemFlags_ReadOnly = 1 << 7 // false // [ALPHA] Allow hovering interactions but underlying value is not changed.
|
||||||
};
|
};
|
||||||
|
|
||||||
// Flags for ItemAdd()
|
// Flags for ItemAdd()
|
||||||
@ -2405,14 +2405,16 @@ namespace ImGui
|
|||||||
IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h);
|
IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h);
|
||||||
IMGUI_API float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x);
|
IMGUI_API float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x);
|
||||||
IMGUI_API void PushMultiItemsWidths(int components, float width_full);
|
IMGUI_API void PushMultiItemsWidths(int components, float width_full);
|
||||||
IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled);
|
|
||||||
IMGUI_API void PopItemFlag();
|
|
||||||
IMGUI_API void PushDisabled();
|
|
||||||
IMGUI_API void PopDisabled();
|
|
||||||
IMGUI_API bool IsItemToggledSelection(); // Was the last item selection toggled? (after Selectable(), TreeNode() etc. We only returns toggle _event_ in order to handle clipping correctly)
|
IMGUI_API bool IsItemToggledSelection(); // Was the last item selection toggled? (after Selectable(), TreeNode() etc. We only returns toggle _event_ in order to handle clipping correctly)
|
||||||
IMGUI_API ImVec2 GetContentRegionMaxAbs();
|
IMGUI_API ImVec2 GetContentRegionMaxAbs();
|
||||||
IMGUI_API void ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess);
|
IMGUI_API void ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess);
|
||||||
|
|
||||||
|
// Parameter stacks
|
||||||
|
IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled);
|
||||||
|
IMGUI_API void PopItemFlag();
|
||||||
|
IMGUI_API void PushDisabled(bool disabled = true);
|
||||||
|
IMGUI_API void PopDisabled();
|
||||||
|
|
||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
// If you have old/custom copy-and-pasted widgets that used FocusableItemRegister():
|
// If you have old/custom copy-and-pasted widgets that used FocusableItemRegister():
|
||||||
// (Old) IMGUI_VERSION_NUM < 18209: using 'ItemAdd(....)' and 'bool focused = FocusableItemRegister(...)'
|
// (Old) IMGUI_VERSION_NUM < 18209: using 'ItemAdd(....)' and 'bool focused = FocusableItemRegister(...)'
|
||||||
|
Loading…
Reference in New Issue
Block a user