mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Internals: added GetStyleVarInfo(). exposed previously .cpp only ImGuiStyleVarInfo as ImGuiDataVarInfo.
This commit is contained in:
		
							
								
								
									
										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.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user