mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Removed need for -Wnocast-qual on modern Clang/Xcode as a token of good behavior. Unfortunately the old stb_ decompress code is a little const clunky. + warning fix in stb_textedit which is already in master afaik.
This commit is contained in:
		
							
								
								
									
										12
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -688,14 +688,12 @@ | |||||||
| #pragma clang diagnostic ignored "-Wsign-conversion"        // warning : implicit conversion changes signedness             // | #pragma clang diagnostic ignored "-Wsign-conversion"        // warning : implicit conversion changes signedness             // | ||||||
| #pragma clang diagnostic ignored "-Wformat-pedantic"        // warning : format specifies type 'void *' but the argument has type 'xxxx *' // unreasonable, would lead to casting every %p arg to void*. probably enabled by -pedantic.  | #pragma clang diagnostic ignored "-Wformat-pedantic"        // warning : format specifies type 'void *' but the argument has type 'xxxx *' // unreasonable, would lead to casting every %p arg to void*. probably enabled by -pedantic.  | ||||||
| #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' | #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' | ||||||
| #pragma clang diagnostic ignored "-Wcast-qual"              // warning : cast from 'const xxxx *' to 'xxxx *' drops const qualifier |  | ||||||
| #elif defined(__GNUC__) | #elif defined(__GNUC__) | ||||||
| #pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used | #pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used | ||||||
| #pragma GCC diagnostic ignored "-Wint-to-pointer-cast"      // warning: cast to pointer from integer of different size | #pragma GCC diagnostic ignored "-Wint-to-pointer-cast"      // warning: cast to pointer from integer of different size | ||||||
| #pragma GCC diagnostic ignored "-Wformat"                   // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*' | #pragma GCC diagnostic ignored "-Wformat"                   // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*' | ||||||
| #pragma GCC diagnostic ignored "-Wdouble-promotion"         // warning: implicit conversion from 'float' to 'double' when passing argument to function | #pragma GCC diagnostic ignored "-Wdouble-promotion"         // warning: implicit conversion from 'float' to 'double' when passing argument to function | ||||||
| #pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value | #pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value | ||||||
| #pragma GCC diagnostic ignored "-Wcast-qual"                // warning: cast from type 'const xxxx *' to type 'xxxx *' casts away qualifiers |  | ||||||
| #pragma GCC diagnostic ignored "-Wformat-nonliteral"        // warning: format not a string literal, format string not checked | #pragma GCC diagnostic ignored "-Wformat-nonliteral"        // warning: format not a string literal, format string not checked | ||||||
| #pragma GCC diagnostic ignored "-Wstrict-overflow"          // warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false | #pragma GCC diagnostic ignored "-Wstrict-overflow"          // warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false | ||||||
| #endif | #endif | ||||||
| @@ -3763,7 +3761,7 @@ static void LoadIniSettingsFromMemory(const char* buf_readonly) | |||||||
|             line_end[-1] = 0; |             line_end[-1] = 0; | ||||||
|             const char* name_end = line_end - 1;  |             const char* name_end = line_end - 1;  | ||||||
|             const char* type_start = line + 1; |             const char* type_start = line + 1; | ||||||
|             char* type_end = (char*)ImStrchrRange(type_start, name_end, ']'); |             char* type_end = (char*)(intptr_t)ImStrchrRange(type_start, name_end, ']'); | ||||||
|             const char* name_start = type_end ? ImStrchrRange(type_end + 1, name_end, '[') : NULL; |             const char* name_start = type_end ? ImStrchrRange(type_end + 1, name_end, '[') : NULL; | ||||||
|             if (!type_end || !name_start) |             if (!type_end || !name_start) | ||||||
|             { |             { | ||||||
| @@ -3839,8 +3837,8 @@ static void MarkIniSettingsDirty(ImGuiWindow* window) | |||||||
| // FIXME: Add a more explicit sort order in the window structure. | // FIXME: Add a more explicit sort order in the window structure. | ||||||
| static int IMGUI_CDECL ChildWindowComparer(const void* lhs, const void* rhs) | static int IMGUI_CDECL ChildWindowComparer(const void* lhs, const void* rhs) | ||||||
| { | { | ||||||
|     const ImGuiWindow* a = *(const ImGuiWindow**)lhs; |     const ImGuiWindow* const a = *(const ImGuiWindow* const *)lhs; | ||||||
|     const ImGuiWindow* b = *(const ImGuiWindow**)rhs; |     const ImGuiWindow* const b = *(const ImGuiWindow* const *)rhs; | ||||||
|     if (int d = (a->Flags & ImGuiWindowFlags_Popup) - (b->Flags & ImGuiWindowFlags_Popup)) |     if (int d = (a->Flags & ImGuiWindowFlags_Popup) - (b->Flags & ImGuiWindowFlags_Popup)) | ||||||
|         return d; |         return d; | ||||||
|     if (int d = (a->Flags & ImGuiWindowFlags_Tooltip) - (b->Flags & ImGuiWindowFlags_Tooltip)) |     if (int d = (a->Flags & ImGuiWindowFlags_Tooltip) - (b->Flags & ImGuiWindowFlags_Tooltip)) | ||||||
| @@ -12935,14 +12933,14 @@ bool ImGui::SetDragDropPayload(const char* type, const void* data, size_t data_s | |||||||
|             // Store in heap |             // Store in heap | ||||||
|             g.DragDropPayloadBufHeap.resize((int)data_size); |             g.DragDropPayloadBufHeap.resize((int)data_size); | ||||||
|             payload.Data = g.DragDropPayloadBufHeap.Data; |             payload.Data = g.DragDropPayloadBufHeap.Data; | ||||||
|             memcpy((void*)payload.Data, data, data_size); |             memcpy((void*)(intptr_t)payload.Data, data, data_size); | ||||||
|         } |         } | ||||||
|         else if (data_size > 0) |         else if (data_size > 0) | ||||||
|         { |         { | ||||||
|             // Store locally |             // Store locally | ||||||
|             memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal)); |             memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal)); | ||||||
|             payload.Data = g.DragDropPayloadBufLocal; |             payload.Data = g.DragDropPayloadBufLocal; | ||||||
|             memcpy((void*)payload.Data, data, data_size); |             memcpy((void*)(intptr_t)payload.Data, data, data_size); | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -41,7 +41,6 @@ | |||||||
| #pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants ok. | #pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants ok. | ||||||
| #pragma clang diagnostic ignored "-Wglobal-constructors"    // warning : declaration requires a global destructor           // similar to above, not sure what the exact difference it. | #pragma clang diagnostic ignored "-Wglobal-constructors"    // warning : declaration requires a global destructor           // similar to above, not sure what the exact difference it. | ||||||
| #pragma clang diagnostic ignored "-Wsign-conversion"        // warning : implicit conversion changes signedness             // | #pragma clang diagnostic ignored "-Wsign-conversion"        // warning : implicit conversion changes signedness             // | ||||||
| #pragma clang diagnostic ignored "-Wcast-qual"              // warning : cast from 'const xxxx *' to 'xxx *' drops const qualifier // |  | ||||||
| #if __has_warning("-Wcomma") | #if __has_warning("-Wcomma") | ||||||
| #pragma clang diagnostic ignored "-Wcomma"                  // warning : possible misuse of comma operator here             // | #pragma clang diagnostic ignored "-Wcomma"                  // warning : possible misuse of comma operator here             // | ||||||
| #endif | #endif | ||||||
| @@ -55,7 +54,6 @@ | |||||||
| #pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used | #pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used | ||||||
| #pragma GCC diagnostic ignored "-Wdouble-promotion"         // warning: implicit conversion from 'float' to 'double' when passing argument to function | #pragma GCC diagnostic ignored "-Wdouble-promotion"         // warning: implicit conversion from 'float' to 'double' when passing argument to function | ||||||
| #pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value | #pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value | ||||||
| #pragma GCC diagnostic ignored "-Wcast-qual"                // warning: cast from type 'const xxxx *' to type 'xxxx *' casts away qualifiers |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||||
| @@ -84,11 +82,13 @@ namespace IMGUI_STB_NAMESPACE | |||||||
| #pragma clang diagnostic ignored "-Wunused-function" | #pragma clang diagnostic ignored "-Wunused-function" | ||||||
| #pragma clang diagnostic ignored "-Wmissing-prototypes" | #pragma clang diagnostic ignored "-Wmissing-prototypes" | ||||||
| #pragma clang diagnostic ignored "-Wimplicit-fallthrough" | #pragma clang diagnostic ignored "-Wimplicit-fallthrough" | ||||||
|  | #pragma clang diagnostic ignored "-Wcast-qual"              // warning : cast from 'const xxxx *' to 'xxx *' drops const qualifier // | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef __GNUC__ | #ifdef __GNUC__ | ||||||
| #pragma GCC diagnostic push | #pragma GCC diagnostic push | ||||||
| #pragma GCC diagnostic ignored "-Wtype-limits"              // warning: comparison is always true due to limited range of data type [-Wtype-limits] | #pragma GCC diagnostic ignored "-Wtype-limits"              // warning: comparison is always true due to limited range of data type [-Wtype-limits] | ||||||
|  | #pragma GCC diagnostic ignored "-Wcast-qual"                // warning: cast from type 'const xxxx *' to type 'xxxx *' casts away qualifiers | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifndef IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION | #ifndef IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION | ||||||
| @@ -1508,8 +1508,8 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg) | |||||||
| } | } | ||||||
|  |  | ||||||
| // Default font TTF is compressed with stb_compress then base85 encoded (see misc/fonts/binary_to_compressed_c.cpp for encoder) | // Default font TTF is compressed with stb_compress then base85 encoded (see misc/fonts/binary_to_compressed_c.cpp for encoder) | ||||||
| static unsigned int stb_decompress_length(unsigned char *input); | static unsigned int stb_decompress_length(const unsigned char *input); | ||||||
| static unsigned int stb_decompress(unsigned char *output, unsigned char *i, unsigned int length); | static unsigned int stb_decompress(unsigned char *output, const unsigned char *input, unsigned int length); | ||||||
| static const char*  GetDefaultCompressedFontDataTTFBase85(); | static const char*  GetDefaultCompressedFontDataTTFBase85(); | ||||||
| static unsigned int Decode85Byte(char c)                                    { return c >= '\\' ? c-36 : c-35; } | static unsigned int Decode85Byte(char c)                                    { return c >= '\\' ? c-36 : c-35; } | ||||||
| static void         Decode85(const unsigned char* src, unsigned char* dst) | static void         Decode85(const unsigned char* src, unsigned char* dst) | ||||||
| @@ -1576,9 +1576,9 @@ ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float si | |||||||
|  |  | ||||||
| ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) | ||||||
| { | { | ||||||
|     const unsigned int buf_decompressed_size = stb_decompress_length((unsigned char*)compressed_ttf_data); |     const unsigned int buf_decompressed_size = stb_decompress_length((const unsigned char*)compressed_ttf_data); | ||||||
|     unsigned char* buf_decompressed_data = (unsigned char *)ImGui::MemAlloc(buf_decompressed_size); |     unsigned char* buf_decompressed_data = (unsigned char *)ImGui::MemAlloc(buf_decompressed_size); | ||||||
|     stb_decompress(buf_decompressed_data, (unsigned char*)compressed_ttf_data, (unsigned int)compressed_ttf_size); |     stb_decompress(buf_decompressed_data, (const unsigned char*)compressed_ttf_data, (unsigned int)compressed_ttf_size); | ||||||
|  |  | ||||||
|     ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); |     ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); | ||||||
|     IM_ASSERT(font_cfg.FontData == NULL); |     IM_ASSERT(font_cfg.FontData == NULL); | ||||||
| @@ -2756,27 +2756,28 @@ void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, Im | |||||||
| // Decompression from stb.h (public domain) by Sean Barrett https://github.com/nothings/stb/blob/master/stb.h | // Decompression from stb.h (public domain) by Sean Barrett https://github.com/nothings/stb/blob/master/stb.h | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
|  |  | ||||||
| static unsigned int stb_decompress_length(unsigned char *input) | static unsigned int stb_decompress_length(const unsigned char *input) | ||||||
| { | { | ||||||
|     return (input[8] << 24) + (input[9] << 16) + (input[10] << 8) + input[11]; |     return (input[8] << 24) + (input[9] << 16) + (input[10] << 8) + input[11]; | ||||||
| } | } | ||||||
|  |  | ||||||
| static unsigned char *stb__barrier, *stb__barrier2, *stb__barrier3, *stb__barrier4; | static unsigned char *stb__barrier_out_e, *stb__barrier_out_b; | ||||||
|  | static const unsigned char *stb__barrier_in_b; | ||||||
| static unsigned char *stb__dout; | static unsigned char *stb__dout; | ||||||
| static void stb__match(unsigned char *data, unsigned int length) | static void stb__match(const unsigned char *data, unsigned int length) | ||||||
| { | { | ||||||
|     // INVERSE of memmove... write each byte before copying the next... |     // INVERSE of memmove... write each byte before copying the next... | ||||||
|     IM_ASSERT (stb__dout + length <= stb__barrier); |     IM_ASSERT(stb__dout + length <= stb__barrier_out_e); | ||||||
|     if (stb__dout + length > stb__barrier) { stb__dout += length; return; } |     if (stb__dout + length > stb__barrier_out_e) { stb__dout += length; return; } | ||||||
|     if (data < stb__barrier4) { stb__dout = stb__barrier+1; return; } |     if (data < stb__barrier_out_b) { stb__dout = stb__barrier_out_e+1; return; } | ||||||
|     while (length--) *stb__dout++ = *data++; |     while (length--) *stb__dout++ = *data++; | ||||||
| } | } | ||||||
|  |  | ||||||
| static void stb__lit(unsigned char *data, unsigned int length) | static void stb__lit(const unsigned char *data, unsigned int length) | ||||||
| { | { | ||||||
|     IM_ASSERT (stb__dout + length <= stb__barrier); |     IM_ASSERT(stb__dout + length <= stb__barrier_out_e); | ||||||
|     if (stb__dout + length > stb__barrier) { stb__dout += length; return; } |     if (stb__dout + length > stb__barrier_out_e) { stb__dout += length; return; } | ||||||
|     if (data < stb__barrier2) { stb__dout = stb__barrier+1; return; } |     if (data < stb__barrier_in_b) { stb__dout = stb__barrier_out_e+1; return; } | ||||||
|     memcpy(stb__dout, data, length); |     memcpy(stb__dout, data, length); | ||||||
|     stb__dout += length; |     stb__dout += length; | ||||||
| } | } | ||||||
| @@ -2785,7 +2786,7 @@ static void stb__lit(unsigned char *data, unsigned int length) | |||||||
| #define stb__in3(x)   ((i[x] << 16) + stb__in2((x)+1)) | #define stb__in3(x)   ((i[x] << 16) + stb__in2((x)+1)) | ||||||
| #define stb__in4(x)   ((i[x] << 24) + stb__in3((x)+1)) | #define stb__in4(x)   ((i[x] << 24) + stb__in3((x)+1)) | ||||||
|  |  | ||||||
| static unsigned char *stb_decompress_token(unsigned char *i) | static const unsigned char *stb_decompress_token(const unsigned char *i) | ||||||
| { | { | ||||||
|     if (*i >= 0x20) { // use fewer if's for cases that expand small |     if (*i >= 0x20) { // use fewer if's for cases that expand small | ||||||
|         if (*i >= 0x80)       stb__match(stb__dout-i[1]-1, i[0] - 0x80 + 1), i += 2; |         if (*i >= 0x80)       stb__match(stb__dout-i[1]-1, i[0] - 0x80 + 1), i += 2; | ||||||
| @@ -2833,21 +2834,20 @@ static unsigned int stb_adler32(unsigned int adler32, unsigned char *buffer, uns | |||||||
|     return (unsigned int)(s2 << 16) + (unsigned int)s1; |     return (unsigned int)(s2 << 16) + (unsigned int)s1; | ||||||
| } | } | ||||||
|  |  | ||||||
| static unsigned int stb_decompress(unsigned char *output, unsigned char *i, unsigned int length) | static unsigned int stb_decompress(unsigned char *output, const unsigned char *i, unsigned int /*length*/) | ||||||
| { | { | ||||||
|     unsigned int olen; |     unsigned int olen; | ||||||
|     if (stb__in4(0) != 0x57bC0000) return 0; |     if (stb__in4(0) != 0x57bC0000) return 0; | ||||||
|     if (stb__in4(4) != 0)          return 0; // error! stream is > 4GB |     if (stb__in4(4) != 0)          return 0; // error! stream is > 4GB | ||||||
|     olen = stb_decompress_length(i); |     olen = stb_decompress_length(i); | ||||||
|     stb__barrier2 = i; |     stb__barrier_in_b = i; | ||||||
|     stb__barrier3 = i+length; |     stb__barrier_out_e = output + olen; | ||||||
|     stb__barrier = output + olen; |     stb__barrier_out_b = output; | ||||||
|     stb__barrier4 = output; |  | ||||||
|     i += 16; |     i += 16; | ||||||
|  |  | ||||||
|     stb__dout = output; |     stb__dout = output; | ||||||
|     for (;;) { |     for (;;) { | ||||||
|         unsigned char *old_i = i; |         const unsigned char *old_i = i; | ||||||
|         i = stb_decompress_token(i); |         i = stb_decompress_token(i); | ||||||
|         if (i == old_i) { |         if (i == old_i) { | ||||||
|             if (*i == 0x05 && i[1] == 0xfa) { |             if (*i == 0x05 && i[1] == 0xfa) { | ||||||
|   | |||||||
| @@ -677,9 +677,8 @@ static int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) | |||||||
| } | } | ||||||
|  |  | ||||||
| // API paste: replace existing selection with passed-in text | // API paste: replace existing selection with passed-in text | ||||||
| static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE const *ctext, int len) | static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE const *text, int len) | ||||||
| { | { | ||||||
|    STB_TEXTEDIT_CHARTYPE *text = (STB_TEXTEDIT_CHARTYPE *) ctext; |  | ||||||
|    // if there's a selection, the paste should delete it |    // if there's a selection, the paste should delete it | ||||||
|    stb_textedit_clamp(str, state); |    stb_textedit_clamp(str, state); | ||||||
|    stb_textedit_delete_selection(str,state); |    stb_textedit_delete_selection(str,state); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user