mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-15 01:17:00 +00:00
Small optimizations to BeginDisabled() to allow frequent calls (#211)
Not intended for frequent calls but I suspect some people will do it either way... Rough/indicative: measured 0.1 ms for 5000 calls in release, 0.5 ms in debug on my desktop windows.
This commit is contained in:
parent
c543d93af1
commit
df2319a854
19
imgui.cpp
19
imgui.cpp
@ -989,7 +989,7 @@ static void* GImAllocatorUserData = NULL;
|
|||||||
ImGuiStyle::ImGuiStyle()
|
ImGuiStyle::ImGuiStyle()
|
||||||
{
|
{
|
||||||
Alpha = 1.0f; // Global alpha applies to everything in Dear ImGui.
|
Alpha = 1.0f; // Global alpha applies to everything in Dear ImGui.
|
||||||
DisabledAlpha = 0.60f; // Additional alpha multiplier for disabled items (multiply over current value of Alpha).
|
DisabledAlpha = 0.60f; // Additional alpha multiplier applied by BeginDisabled(). Multiply over current value of Alpha.
|
||||||
WindowPadding = ImVec2(8,8); // Padding within a window
|
WindowPadding = ImVec2(8,8); // Padding within a window
|
||||||
WindowRounding = 0.0f; // Radius of window corners rounding. Set to 0.0f to have rectangular windows. Large values tend to lead to variety of artifacts and are not recommended.
|
WindowRounding = 0.0f; // Radius of window corners rounding. Set to 0.0f to have rectangular windows. Large values tend to lead to variety of artifacts and are not recommended.
|
||||||
WindowBorderSize = 1.0f; // Thickness of border around windows. Generally set to 0.0f or 1.0f. Other values not well tested.
|
WindowBorderSize = 1.0f; // Thickness of border around windows. Generally set to 0.0f or 1.0f. Other values not well tested.
|
||||||
@ -6622,22 +6622,31 @@ void ImGui::PopItemFlag()
|
|||||||
// - Visually this is currently altering alpha, but it is expected that in a future styling system this would work differently.
|
// - Visually this is currently altering alpha, but it is expected that in a future styling system this would work differently.
|
||||||
// - Feedback welcome at https://github.com/ocornut/imgui/issues/211
|
// - Feedback welcome at https://github.com/ocornut/imgui/issues/211
|
||||||
// - BeginDisabled(false) essentially does nothing but is provided to facilitate use of boolean expressions
|
// - BeginDisabled(false) essentially does nothing but is provided to facilitate use of boolean expressions
|
||||||
|
// - Optimized shortcuts instead of PushStyleVar() + PushItemFlag()
|
||||||
void ImGui::BeginDisabled(bool disabled)
|
void ImGui::BeginDisabled(bool disabled)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
bool was_disabled = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0;
|
bool was_disabled = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0;
|
||||||
if (!was_disabled && disabled)
|
if (!was_disabled && disabled)
|
||||||
PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * g.Style.DisabledAlpha);
|
{
|
||||||
PushItemFlag(ImGuiItemFlags_Disabled, was_disabled || disabled);
|
//PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * g.Style.DisabledAlpha);
|
||||||
|
g.DisabledAlphaBackup = g.Style.Alpha;
|
||||||
|
g.Style.Alpha *= g.Style.DisabledAlpha;
|
||||||
|
}
|
||||||
|
//PushItemFlag(ImGuiItemFlags_Disabled, was_disabled || disabled);
|
||||||
|
g.CurrentItemFlags |= ImGuiItemFlags_Disabled;
|
||||||
|
g.ItemFlagsStack.push_back(g.CurrentItemFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::EndDisabled()
|
void ImGui::EndDisabled()
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
bool was_disabled = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0;
|
bool was_disabled = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0;
|
||||||
PopItemFlag();
|
//PopItemFlag();
|
||||||
|
g.ItemFlagsStack.pop_back();
|
||||||
|
g.CurrentItemFlags &= ~ImGuiItemFlags_Disabled;
|
||||||
if (was_disabled && (g.CurrentItemFlags & ImGuiItemFlags_Disabled) == 0)
|
if (was_disabled && (g.CurrentItemFlags & ImGuiItemFlags_Disabled) == 0)
|
||||||
PopStyleVar();
|
g.Style.Alpha = g.DisabledAlphaBackup; //PopStyleVar();
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Look into renaming this once we have settled the new Focus/Activation/TabStop system.
|
// FIXME: Look into renaming this once we have settled the new Focus/Activation/TabStop system.
|
||||||
|
2
imgui.h
2
imgui.h
@ -1744,7 +1744,7 @@ IM_MSVC_RUNTIME_CHECKS_RESTORE
|
|||||||
struct ImGuiStyle
|
struct ImGuiStyle
|
||||||
{
|
{
|
||||||
float Alpha; // Global alpha applies to everything in Dear ImGui.
|
float Alpha; // Global alpha applies to everything in Dear ImGui.
|
||||||
float DisabledAlpha; // Additional alpha multiplier for disabled items (multiply over current value of Alpha).
|
float DisabledAlpha; // Additional alpha multiplier applied by BeginDisabled(). Multiply over current value of Alpha.
|
||||||
ImVec2 WindowPadding; // Padding within a window.
|
ImVec2 WindowPadding; // Padding within a window.
|
||||||
float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows. Large values tend to lead to variety of artifacts and are not recommended.
|
float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows. Large values tend to lead to variety of artifacts and are not recommended.
|
||||||
float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
|
float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
|
||||||
|
@ -1613,6 +1613,7 @@ struct ImGuiContext
|
|||||||
bool DragCurrentAccumDirty;
|
bool DragCurrentAccumDirty;
|
||||||
float DragCurrentAccum; // Accumulator for dragging modification. Always high-precision, not rounded by end-user precision settings
|
float DragCurrentAccum; // Accumulator for dragging modification. Always high-precision, not rounded by end-user precision settings
|
||||||
float DragSpeedDefaultRatio; // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio
|
float DragSpeedDefaultRatio; // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio
|
||||||
|
float DisabledAlphaBackup; // Backup for style.Alpha for BeginDisabled()
|
||||||
float ScrollbarClickDeltaToGrabCenter; // Distance between mouse and center of grab box, normalized in parent space. Use storage?
|
float ScrollbarClickDeltaToGrabCenter; // Distance between mouse and center of grab box, normalized in parent space. Use storage?
|
||||||
int TooltipOverrideCount;
|
int TooltipOverrideCount;
|
||||||
float TooltipSlowDelay; // Time before slow tooltips appears (FIXME: This is temporary until we merge in tooltip timer+priority work)
|
float TooltipSlowDelay; // Time before slow tooltips appears (FIXME: This is temporary until we merge in tooltip timer+priority work)
|
||||||
@ -1780,6 +1781,7 @@ struct ImGuiContext
|
|||||||
DragCurrentAccumDirty = false;
|
DragCurrentAccumDirty = false;
|
||||||
DragCurrentAccum = 0.0f;
|
DragCurrentAccum = 0.0f;
|
||||||
DragSpeedDefaultRatio = 1.0f / 100.0f;
|
DragSpeedDefaultRatio = 1.0f / 100.0f;
|
||||||
|
DisabledAlphaBackup = 0.0f;
|
||||||
ScrollbarClickDeltaToGrabCenter = 0.0f;
|
ScrollbarClickDeltaToGrabCenter = 0.0f;
|
||||||
TooltipOverrideCount = 0;
|
TooltipOverrideCount = 0;
|
||||||
TooltipSlowDelay = 0.50f;
|
TooltipSlowDelay = 0.50f;
|
||||||
|
Loading…
Reference in New Issue
Block a user