mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Internals: Exposed ImGuiDataTypeInfo, DataTypeGetInfo(), DataTypeFormatString(). Comments.
This commit is contained in:
		@@ -105,7 +105,6 @@ static const ImU64          IM_U64_MAX = (2ULL * 9223372036854775807LL + 1);
 | 
			
		||||
//-------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Data Type helpers
 | 
			
		||||
static inline int       DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* data_ptr, const char* format);
 | 
			
		||||
static void             DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void* arg_1, const void* arg_2);
 | 
			
		||||
static bool             DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* data_ptr, const char* format);
 | 
			
		||||
 | 
			
		||||
@@ -1539,6 +1538,7 @@ bool ImGui::Combo(const char* label, int* current_item, const char* items_separa
 | 
			
		||||
// [SECTION] Data Type and Data Formatting Helpers [Internal]
 | 
			
		||||
//-------------------------------------------------------------------------
 | 
			
		||||
// - PatchFormatStringFloatToInt()
 | 
			
		||||
// - DataTypeGetInfo()
 | 
			
		||||
// - DataTypeFormatString()
 | 
			
		||||
// - DataTypeApplyOp()
 | 
			
		||||
// - DataTypeApplyOpFromText()
 | 
			
		||||
@@ -1546,13 +1546,6 @@ bool ImGui::Combo(const char* label, int* current_item, const char* items_separa
 | 
			
		||||
// - RoundScalarWithFormat<>()
 | 
			
		||||
//-------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
struct ImGuiDataTypeInfo
 | 
			
		||||
{
 | 
			
		||||
    size_t      Size;
 | 
			
		||||
    const char* PrintFmt;   // Unused
 | 
			
		||||
    const char* ScanFmt;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const ImGuiDataTypeInfo GDataTypeInfo[] =
 | 
			
		||||
{
 | 
			
		||||
    { sizeof(char),             "%d",   "%d"    },  // ImGuiDataType_S8
 | 
			
		||||
@@ -1597,7 +1590,13 @@ static const char* PatchFormatStringFloatToInt(const char* fmt)
 | 
			
		||||
    return fmt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* data_ptr, const char* format)
 | 
			
		||||
const ImGuiDataTypeInfo* ImGui::DataTypeGetInfo(ImGuiDataType data_type)
 | 
			
		||||
{
 | 
			
		||||
    IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
 | 
			
		||||
    return &GDataTypeInfo[data_type];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ImGui::DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* data_ptr, const char* format)
 | 
			
		||||
{
 | 
			
		||||
    // Signedness doesn't matter when pushing integer arguments
 | 
			
		||||
    if (data_type == ImGuiDataType_S32 || data_type == ImGuiDataType_U32)
 | 
			
		||||
@@ -1696,11 +1695,12 @@ static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_b
 | 
			
		||||
    // Copy the value in an opaque buffer so we can compare at the end of the function if it changed at all.
 | 
			
		||||
    IM_ASSERT(data_type < ImGuiDataType_COUNT);
 | 
			
		||||
    int data_backup[2];
 | 
			
		||||
    IM_ASSERT(GDataTypeInfo[data_type].Size <= sizeof(data_backup));
 | 
			
		||||
    memcpy(data_backup, data_ptr, GDataTypeInfo[data_type].Size);
 | 
			
		||||
    const ImGuiDataTypeInfo* type_info = ImGui::DataTypeGetInfo(data_type);
 | 
			
		||||
    IM_ASSERT(type_info->Size <= sizeof(data_backup));
 | 
			
		||||
    memcpy(data_backup, data_ptr, type_info->Size);
 | 
			
		||||
 | 
			
		||||
    if (format == NULL)
 | 
			
		||||
        format = GDataTypeInfo[data_type].ScanFmt;
 | 
			
		||||
        format = type_info->ScanFmt;
 | 
			
		||||
 | 
			
		||||
    // FIXME-LEGACY: The aim is to remove those operators and write a proper expression evaluator at some point..
 | 
			
		||||
    int arg1i = 0;
 | 
			
		||||
@@ -1769,7 +1769,7 @@ static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_b
 | 
			
		||||
            IM_ASSERT(0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return memcmp(data_backup, data_ptr, GDataTypeInfo[data_type].Size) != 0;
 | 
			
		||||
    return memcmp(data_backup, data_ptr, type_info->Size) != 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
 | 
			
		||||
@@ -1990,11 +1990,9 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* v, floa
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    // Default format string when passing NULL
 | 
			
		||||
    // Patch old "%.0f" format string to use "%d", read function comments for more details.
 | 
			
		||||
    IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
 | 
			
		||||
    if (format == NULL)
 | 
			
		||||
        format = GDataTypeInfo[data_type].PrintFmt;
 | 
			
		||||
    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0)
 | 
			
		||||
        format = DataTypeGetInfo(data_type)->PrintFmt;
 | 
			
		||||
    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
 | 
			
		||||
        format = PatchFormatStringFloatToInt(format);
 | 
			
		||||
 | 
			
		||||
    // Tabbing or CTRL-clicking on Drag turns it into an input box
 | 
			
		||||
@@ -2435,11 +2433,9 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* v, co
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    // Default format string when passing NULL
 | 
			
		||||
    // Patch old "%.0f" format string to use "%d", read function comments for more details.
 | 
			
		||||
    IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
 | 
			
		||||
    if (format == NULL)
 | 
			
		||||
        format = GDataTypeInfo[data_type].PrintFmt;
 | 
			
		||||
    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0)
 | 
			
		||||
        format = DataTypeGetInfo(data_type)->PrintFmt;
 | 
			
		||||
    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
 | 
			
		||||
        format = PatchFormatStringFloatToInt(format);
 | 
			
		||||
 | 
			
		||||
    // Tabbing or CTRL-clicking on Slider turns it into an input box
 | 
			
		||||
@@ -2591,11 +2587,9 @@ bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType d
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    // Default format string when passing NULL
 | 
			
		||||
    // Patch old "%.0f" format string to use "%d", read function comments for more details.
 | 
			
		||||
    IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
 | 
			
		||||
    if (format == NULL)
 | 
			
		||||
        format = GDataTypeInfo[data_type].PrintFmt;
 | 
			
		||||
    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0)
 | 
			
		||||
        format = DataTypeGetInfo(data_type)->PrintFmt;
 | 
			
		||||
    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
 | 
			
		||||
        format = PatchFormatStringFloatToInt(format);
 | 
			
		||||
 | 
			
		||||
    const bool hovered = ItemHoverable(frame_bb, id);
 | 
			
		||||
@@ -2777,9 +2771,8 @@ bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_p
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    ImGuiStyle& style = g.Style;
 | 
			
		||||
 | 
			
		||||
    IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
 | 
			
		||||
    if (format == NULL)
 | 
			
		||||
        format = GDataTypeInfo[data_type].PrintFmt;
 | 
			
		||||
        format = DataTypeGetInfo(data_type)->PrintFmt;
 | 
			
		||||
 | 
			
		||||
    char buf[64];
 | 
			
		||||
    DataTypeFormatString(buf, IM_ARRAYSIZE(buf), data_type, data_ptr, format);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user