mirror of https://github.com/ocornut/imgui
Internals: added GetStyleVarInfo(). exposed previously .cpp only ImGuiStyleVarInfo as ImGuiDataVarInfo.
This commit is contained in:
parent
57d0fcd021
commit
b4b79584d1
30
imgui.cpp
30
imgui.cpp
|
@ -2999,15 +2999,7 @@ void ImGui::PopStyleColor(int count)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ImGuiStyleVarInfo
|
static const ImGuiDataVarInfo GStyleVarInfo[] =
|
||||||
{
|
|
||||||
ImGuiDataType Type;
|
|
||||||
ImU32 Count;
|
|
||||||
ImU32 Offset;
|
|
||||||
void* GetVarPtr(ImGuiStyle* style) const { return (void*)((unsigned char*)style + Offset); }
|
|
||||||
};
|
|
||||||
|
|
||||||
static const ImGuiStyleVarInfo GStyleVarInfo[] =
|
|
||||||
{
|
{
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) }, // ImGuiStyleVar_Alpha
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) }, // ImGuiStyleVar_Alpha
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, DisabledAlpha) }, // ImGuiStyleVar_DisabledAlpha
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, DisabledAlpha) }, // ImGuiStyleVar_DisabledAlpha
|
||||||
|
@ -3039,39 +3031,39 @@ static const ImGuiStyleVarInfo GStyleVarInfo[] =
|
||||||
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, SeparatorTextPadding) }, // ImGuiStyleVar_SeparatorTextPadding
|
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, SeparatorTextPadding) }, // ImGuiStyleVar_SeparatorTextPadding
|
||||||
};
|
};
|
||||||
|
|
||||||
static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx)
|
const ImGuiDataVarInfo* ImGui::GetStyleVarInfo(ImGuiStyleVar idx)
|
||||||
{
|
{
|
||||||
IM_ASSERT(idx >= 0 && idx < ImGuiStyleVar_COUNT);
|
IM_ASSERT(idx >= 0 && idx < ImGuiStyleVar_COUNT);
|
||||||
IM_ASSERT(IM_ARRAYSIZE(GStyleVarInfo) == ImGuiStyleVar_COUNT);
|
IM_STATIC_ASSERT(IM_ARRAYSIZE(GStyleVarInfo) == ImGuiStyleVar_COUNT);
|
||||||
return &GStyleVarInfo[idx];
|
return &GStyleVarInfo[idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
|
void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
|
||||||
{
|
{
|
||||||
const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
|
ImGuiContext& g = *GImGui;
|
||||||
|
const ImGuiDataVarInfo* var_info = GetStyleVarInfo(idx);
|
||||||
if (var_info->Type == ImGuiDataType_Float && var_info->Count == 1)
|
if (var_info->Type == ImGuiDataType_Float && var_info->Count == 1)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
float* pvar = (float*)var_info->GetVarPtr(&g.Style);
|
float* pvar = (float*)var_info->GetVarPtr(&g.Style);
|
||||||
g.StyleVarStack.push_back(ImGuiStyleMod(idx, *pvar));
|
g.StyleVarStack.push_back(ImGuiStyleMod(idx, *pvar));
|
||||||
*pvar = val;
|
*pvar = val;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
IM_ASSERT(0 && "Called PushStyleVar() float variant but variable is not a float!");
|
IM_ASSERT_USER_ERROR(0, "Called PushStyleVar() variant with wrong type!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
|
void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
|
||||||
{
|
{
|
||||||
const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
|
ImGuiContext& g = *GImGui;
|
||||||
|
const ImGuiDataVarInfo* var_info = GetStyleVarInfo(idx);
|
||||||
if (var_info->Type == ImGuiDataType_Float && var_info->Count == 2)
|
if (var_info->Type == ImGuiDataType_Float && var_info->Count == 2)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
ImVec2* pvar = (ImVec2*)var_info->GetVarPtr(&g.Style);
|
ImVec2* pvar = (ImVec2*)var_info->GetVarPtr(&g.Style);
|
||||||
g.StyleVarStack.push_back(ImGuiStyleMod(idx, *pvar));
|
g.StyleVarStack.push_back(ImGuiStyleMod(idx, *pvar));
|
||||||
*pvar = val;
|
*pvar = val;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
IM_ASSERT(0 && "Called PushStyleVar() ImVec2 variant but variable is not a ImVec2!");
|
IM_ASSERT_USER_ERROR(0, "Called PushStyleVar() variant with wrong type!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::PopStyleVar(int count)
|
void ImGui::PopStyleVar(int count)
|
||||||
|
@ -3086,7 +3078,7 @@ void ImGui::PopStyleVar(int count)
|
||||||
{
|
{
|
||||||
// We avoid a generic memcpy(data, &backup.Backup.., GDataTypeSize[info->Type] * info->Count), the overhead in Debug is not worth it.
|
// We avoid a generic memcpy(data, &backup.Backup.., GDataTypeSize[info->Type] * info->Count), the overhead in Debug is not worth it.
|
||||||
ImGuiStyleMod& backup = g.StyleVarStack.back();
|
ImGuiStyleMod& backup = g.StyleVarStack.back();
|
||||||
const ImGuiStyleVarInfo* info = GetStyleVarInfo(backup.VarIdx);
|
const ImGuiDataVarInfo* info = GetStyleVarInfo(backup.VarIdx);
|
||||||
void* data = info->GetVarPtr(&g.Style);
|
void* data = info->GetVarPtr(&g.Style);
|
||||||
if (info->Type == ImGuiDataType_Float && info->Count == 1) { ((float*)data)[0] = backup.BackupFloat[0]; }
|
if (info->Type == ImGuiDataType_Float && info->Count == 1) { ((float*)data)[0] = backup.BackupFloat[0]; }
|
||||||
else if (info->Type == ImGuiDataType_Float && info->Count == 2) { ((float*)data)[0] = backup.BackupFloat[0]; ((float*)data)[1] = backup.BackupFloat[1]; }
|
else if (info->Type == ImGuiDataType_Float && info->Count == 2) { ((float*)data)[0] = backup.BackupFloat[0]; ((float*)data)[1] = backup.BackupFloat[1]; }
|
||||||
|
@ -14223,7 +14215,7 @@ void ImGui::ShowDebugLogWindow(bool* p_open)
|
||||||
SameLine(); CheckboxFlags("Focus", &g.DebugLogFlags, ImGuiDebugLogFlags_EventFocus);
|
SameLine(); CheckboxFlags("Focus", &g.DebugLogFlags, ImGuiDebugLogFlags_EventFocus);
|
||||||
SameLine(); CheckboxFlags("Popup", &g.DebugLogFlags, ImGuiDebugLogFlags_EventPopup);
|
SameLine(); CheckboxFlags("Popup", &g.DebugLogFlags, ImGuiDebugLogFlags_EventPopup);
|
||||||
SameLine(); CheckboxFlags("Nav", &g.DebugLogFlags, ImGuiDebugLogFlags_EventNav);
|
SameLine(); CheckboxFlags("Nav", &g.DebugLogFlags, ImGuiDebugLogFlags_EventNav);
|
||||||
SameLine(); if (CheckboxFlags("Clipper", &g.DebugLogFlags, ImGuiDebugLogFlags_EventClipper)) { g.DebugLogClipperAutoDisableFrames = 2; }; if (IsItemHovered()) SetTooltip("Clipper log auto-disabled after 2 frames");
|
SameLine(); if (CheckboxFlags("Clipper", &g.DebugLogFlags, ImGuiDebugLogFlags_EventClipper)) { g.DebugLogClipperAutoDisableFrames = 2; } if (IsItemHovered()) SetTooltip("Clipper log auto-disabled after 2 frames");
|
||||||
SameLine(); CheckboxFlags("IO", &g.DebugLogFlags, ImGuiDebugLogFlags_EventIO);
|
SameLine(); CheckboxFlags("IO", &g.DebugLogFlags, ImGuiDebugLogFlags_EventIO);
|
||||||
|
|
||||||
if (SmallButton("Clear"))
|
if (SmallButton("Clear"))
|
||||||
|
|
|
@ -126,6 +126,7 @@ struct ImDrawListSharedData; // Data shared between all ImDrawList instan
|
||||||
struct ImGuiColorMod; // Stacked color modifier, backup of modified data so we can restore it
|
struct ImGuiColorMod; // Stacked color modifier, backup of modified data so we can restore it
|
||||||
struct ImGuiContext; // Main Dear ImGui context
|
struct ImGuiContext; // Main Dear ImGui context
|
||||||
struct ImGuiContextHook; // Hook for extensions like ImGuiTestEngine
|
struct ImGuiContextHook; // Hook for extensions like ImGuiTestEngine
|
||||||
|
struct ImGuiDataVarInfo; // Variable information (e.g. to avoid style variables from an enum)
|
||||||
struct ImGuiDataTypeInfo; // Type information associated to a ImGuiDataType enum
|
struct ImGuiDataTypeInfo; // Type information associated to a ImGuiDataType enum
|
||||||
struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup()
|
struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup()
|
||||||
struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box
|
struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box
|
||||||
|
@ -953,6 +954,14 @@ enum ImGuiPopupPositionPolicy
|
||||||
ImGuiPopupPositionPolicy_Tooltip,
|
ImGuiPopupPositionPolicy_Tooltip,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ImGuiDataVarInfo
|
||||||
|
{
|
||||||
|
ImGuiDataType Type;
|
||||||
|
ImU32 Count; // 1+
|
||||||
|
ImU32 Offset; // Offset in parent structure
|
||||||
|
void* GetVarPtr(void* parent) const { return (void*)((unsigned char*)parent + Offset); }
|
||||||
|
};
|
||||||
|
|
||||||
struct ImGuiDataTypeTempStorage
|
struct ImGuiDataTypeTempStorage
|
||||||
{
|
{
|
||||||
ImU8 Data[8]; // Can fit any data up to ImGuiDataType_COUNT
|
ImU8 Data[8]; // Can fit any data up to ImGuiDataType_COUNT
|
||||||
|
@ -2816,6 +2825,7 @@ namespace ImGui
|
||||||
// Parameter stacks (shared)
|
// Parameter stacks (shared)
|
||||||
IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled);
|
IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled);
|
||||||
IMGUI_API void PopItemFlag();
|
IMGUI_API void PopItemFlag();
|
||||||
|
IMGUI_API const ImGuiDataVarInfo* GetStyleVarInfo(ImGuiStyleVar idx);
|
||||||
|
|
||||||
// Logging/Capture
|
// Logging/Capture
|
||||||
IMGUI_API void LogBegin(ImGuiLogType type, int auto_open_depth); // -> BeginCapture() when we design v2 api, for now stay under the radar by using the old name.
|
IMGUI_API void LogBegin(ImGuiLogType type, int auto_open_depth); // -> BeginCapture() when we design v2 api, for now stay under the radar by using the old name.
|
||||||
|
|
Loading…
Reference in New Issue