mirror of
https://github.com/ocornut/imgui.git
synced 2025-02-25 22:38:10 +01:00
Internals: avoid using bitfields in ImGuiNextItemData as it leads to extraneous packing. rename ImGuiDataTypeTempStorage to ImGuiDataTypeStorage. moved DataType section above Widgets.
This commit is contained in:
parent
0561d708ba
commit
3460014e05
@ -14,8 +14,8 @@ Index of this file:
|
|||||||
// [SECTION] Macros
|
// [SECTION] Macros
|
||||||
// [SECTION] Generic helpers
|
// [SECTION] Generic helpers
|
||||||
// [SECTION] ImDrawList support
|
// [SECTION] ImDrawList support
|
||||||
// [SECTION] Widgets support: flags, enums, data structures
|
|
||||||
// [SECTION] Data types support
|
// [SECTION] Data types support
|
||||||
|
// [SECTION] Widgets support: flags, enums, data structures
|
||||||
// [SECTION] Popup support
|
// [SECTION] Popup support
|
||||||
// [SECTION] Inputs support
|
// [SECTION] Inputs support
|
||||||
// [SECTION] Clipper support
|
// [SECTION] Clipper support
|
||||||
@ -798,6 +798,40 @@ struct ImDrawDataBuilder
|
|||||||
ImDrawDataBuilder() { memset(this, 0, sizeof(*this)); }
|
ImDrawDataBuilder() { memset(this, 0, sizeof(*this)); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// [SECTION] Data types support
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
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 ImGuiDataTypeStorage
|
||||||
|
{
|
||||||
|
ImU8 Data[8]; // Opaque storage to fit any data up to ImGuiDataType_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
// Type information associated to one ImGuiDataType. Retrieve with DataTypeGetInfo().
|
||||||
|
struct ImGuiDataTypeInfo
|
||||||
|
{
|
||||||
|
size_t Size; // Size in bytes
|
||||||
|
const char* Name; // Short descriptive name for the type, for debugging
|
||||||
|
const char* PrintFmt; // Default printf format for the type
|
||||||
|
const char* ScanFmt; // Default scanf format for the type
|
||||||
|
};
|
||||||
|
|
||||||
|
// Extend ImGuiDataType_
|
||||||
|
enum ImGuiDataTypePrivate_
|
||||||
|
{
|
||||||
|
ImGuiDataType_String = ImGuiDataType_COUNT + 1,
|
||||||
|
ImGuiDataType_Pointer,
|
||||||
|
ImGuiDataType_ID,
|
||||||
|
};
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// [SECTION] Widgets support: flags, enums, data structures
|
// [SECTION] Widgets support: flags, enums, data structures
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -1189,7 +1223,7 @@ struct ImGuiNextItemData
|
|||||||
ImGuiKeyChord Shortcut; // Set by SetNextItemShortcut()
|
ImGuiKeyChord Shortcut; // Set by SetNextItemShortcut()
|
||||||
ImGuiInputFlags ShortcutFlags; // Set by SetNextItemShortcut()
|
ImGuiInputFlags ShortcutFlags; // Set by SetNextItemShortcut()
|
||||||
bool OpenVal; // Set by SetNextItemOpen()
|
bool OpenVal; // Set by SetNextItemOpen()
|
||||||
ImGuiCond OpenCond : 8;
|
ImU8 OpenCond; // Set by SetNextItemOpen()
|
||||||
|
|
||||||
ImGuiNextItemData() { memset(this, 0, sizeof(*this)); SelectionUserData = -1; }
|
ImGuiNextItemData() { memset(this, 0, sizeof(*this)); SelectionUserData = -1; }
|
||||||
inline void ClearFlags() { Flags = ImGuiNextItemDataFlags_None; ItemFlags = ImGuiItemFlags_None; } // Also cleared manually by ItemAdd()!
|
inline void ClearFlags() { Flags = ImGuiNextItemDataFlags_None; ItemFlags = ImGuiItemFlags_None; } // Also cleared manually by ItemAdd()!
|
||||||
@ -1263,40 +1297,6 @@ struct ImGuiPtrOrIndex
|
|||||||
ImGuiPtrOrIndex(int index) { Ptr = NULL; Index = index; }
|
ImGuiPtrOrIndex(int index) { Ptr = NULL; Index = index; }
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// [SECTION] Data types support
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
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
|
|
||||||
{
|
|
||||||
ImU8 Data[8]; // Can fit any data up to ImGuiDataType_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
// Type information associated to one ImGuiDataType. Retrieve with DataTypeGetInfo().
|
|
||||||
struct ImGuiDataTypeInfo
|
|
||||||
{
|
|
||||||
size_t Size; // Size in bytes
|
|
||||||
const char* Name; // Short descriptive name for the type, for debugging
|
|
||||||
const char* PrintFmt; // Default printf format for the type
|
|
||||||
const char* ScanFmt; // Default scanf format for the type
|
|
||||||
};
|
|
||||||
|
|
||||||
// Extend ImGuiDataType_
|
|
||||||
enum ImGuiDataTypePrivate_
|
|
||||||
{
|
|
||||||
ImGuiDataType_String = ImGuiDataType_COUNT + 1,
|
|
||||||
ImGuiDataType_Pointer,
|
|
||||||
ImGuiDataType_ID,
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// [SECTION] Popup support
|
// [SECTION] Popup support
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -2150,7 +2150,7 @@ bool ImGui::DataTypeApplyFromText(const char* buf, ImGuiDataType data_type, void
|
|||||||
|
|
||||||
// Copy the value in an opaque buffer so we can compare at the end of the function if it changed at all.
|
// Copy the value in an opaque buffer so we can compare at the end of the function if it changed at all.
|
||||||
const ImGuiDataTypeInfo* type_info = DataTypeGetInfo(data_type);
|
const ImGuiDataTypeInfo* type_info = DataTypeGetInfo(data_type);
|
||||||
ImGuiDataTypeTempStorage data_backup;
|
ImGuiDataTypeStorage data_backup;
|
||||||
memcpy(&data_backup, p_data, type_info->Size);
|
memcpy(&data_backup, p_data, type_info->Size);
|
||||||
|
|
||||||
// Sanitize format
|
// Sanitize format
|
||||||
@ -3471,7 +3471,7 @@ bool ImGui::TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImG
|
|||||||
{
|
{
|
||||||
// Backup old value
|
// Backup old value
|
||||||
size_t data_type_size = type_info->Size;
|
size_t data_type_size = type_info->Size;
|
||||||
ImGuiDataTypeTempStorage data_backup;
|
ImGuiDataTypeStorage data_backup;
|
||||||
memcpy(&data_backup, p_data, data_type_size);
|
memcpy(&data_backup, p_data, data_type_size);
|
||||||
|
|
||||||
// Apply new value (or operations) then clamp
|
// Apply new value (or operations) then clamp
|
||||||
@ -6497,7 +6497,7 @@ void ImGui::SetNextItemOpen(bool is_open, ImGuiCond cond)
|
|||||||
return;
|
return;
|
||||||
g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasOpen;
|
g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasOpen;
|
||||||
g.NextItemData.OpenVal = is_open;
|
g.NextItemData.OpenVal = is_open;
|
||||||
g.NextItemData.OpenCond = cond ? cond : ImGuiCond_Always;
|
g.NextItemData.OpenCond = (ImU8)(cond ? cond : ImGuiCond_Always);
|
||||||
}
|
}
|
||||||
|
|
||||||
// CollapsingHeader returns true when opened but do not indent nor push into the ID stack (because of the ImGuiTreeNodeFlags_NoTreePushOnOpen flag).
|
// CollapsingHeader returns true when opened but do not indent nor push into the ID stack (because of the ImGuiTreeNodeFlags_NoTreePushOnOpen flag).
|
||||||
|
Loading…
x
Reference in New Issue
Block a user