mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	Added ImAtof, ImCeil, ImFloorStd to IMGUI_DISABLE_MATH_FUNCTIONS for consistency. Configuration comments.
This commit is contained in:
		| @@ -81,7 +81,7 @@ Other Changes: | |||||||
| - Fonts: When building font atlas, glyphs that are missing in the fonts are not using the glyph slot to render a dummy/default glyph. Saves space and allow merging fonts with  | - Fonts: When building font atlas, glyphs that are missing in the fonts are not using the glyph slot to render a dummy/default glyph. Saves space and allow merging fonts with  | ||||||
|   overlapping font ranges such as FontAwesome5 which split out the Brands separately from the Solid fonts. (#1703, #1671) |   overlapping font ranges such as FontAwesome5 which split out the Brands separately from the Solid fonts. (#1703, #1671) | ||||||
| - Misc: Added IMGUI_CHECKVERSION() macro to compare version string and data structure sizes in order to catch issues with mismatching compilation unit settings. (#1695, #1769) | - Misc: Added IMGUI_CHECKVERSION() macro to compare version string and data structure sizes in order to catch issues with mismatching compilation unit settings. (#1695, #1769) | ||||||
| - Misc: Added IMGUI_DISABLE_MATH_FUNCTIONS in imconfig.h to make it slightly easier to redefine wrappers to std maths functions such as fabsf(), fmodf(), etc. | - Misc: Added IMGUI_DISABLE_MATH_FUNCTIONS in imconfig.h to make it slightly easier to redefine wrappers to std maths functions such as fabsf(), fmodf(), cosf(), etc. | ||||||
| - Misc: Fix to allow compiling in unity builds where stb_rectpack/stb_truetype may be already included in the same compilation unit. | - Misc: Fix to allow compiling in unity builds where stb_rectpack/stb_truetype may be already included in the same compilation unit. | ||||||
| - Demo: Simple Overlay: Added a context menu item to enable freely moving the window.  | - Demo: Simple Overlay: Added a context menu item to enable freely moving the window.  | ||||||
| - Demo: Added demo for DragScalar(), InputScalar(), SliderScalar(). (#643) | - Demo: Added demo for DragScalar(), InputScalar(), SliderScalar(). (#643) | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ | |||||||
|  |  | ||||||
| //---- Define assertion handler. Defaults to calling assert(). | //---- Define assertion handler. Defaults to calling assert(). | ||||||
| //#define IM_ASSERT(_EXPR)  MyAssert(_EXPR) | //#define IM_ASSERT(_EXPR)  MyAssert(_EXPR) | ||||||
|  | //#define IM_ASSERT(_EXPR)  ((void)(_EXPR))     // Disable asserts | ||||||
|  |  | ||||||
| //---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. | //---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. | ||||||
| //#define IMGUI_API __declspec( dllexport ) | //#define IMGUI_API __declspec( dllexport ) | ||||||
| @@ -30,8 +31,8 @@ | |||||||
| //---- Don't implement some functions to reduce linkage requirements. | //---- Don't implement some functions to reduce linkage requirements. | ||||||
| //#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS   // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. | //#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS   // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. | ||||||
| //#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS         // [Win32] Don't implement default IME handler. Won't use and link with ImmGetContext/ImmSetCompositionWindow. | //#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS         // [Win32] Don't implement default IME handler. Won't use and link with ImmGetContext/ImmSetCompositionWindow. | ||||||
| //#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS             // Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself.       | //#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS             // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself if you don't want to link with vsnprintf.       | ||||||
| //#define IMGUI_DISABLE_MATH_FUNCTIONS                      // Don't implement ImFabs(), ImSqrt(), ImPow(), ImFmod() so you can reimplement them yourself. | //#define IMGUI_DISABLE_MATH_FUNCTIONS                      // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 wrapper so you can implement them yourself. Declare your prototypes in imconfig.h. | ||||||
| //#define IMGUI_DISABLE_DEFAULT_ALLOCATORS                  // Don't implement default allocators calling malloc()/free(). You will need to call ImGui::SetAllocatorFunctions(). | //#define IMGUI_DISABLE_DEFAULT_ALLOCATORS                  // Don't implement default allocators calling malloc()/free(). You will need to call ImGui::SetAllocatorFunctions(). | ||||||
|  |  | ||||||
| //---- Include imgui_user.h at the end of imgui.h as a convenience | //---- Include imgui_user.h at the end of imgui.h as a convenience | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -8776,7 +8776,7 @@ static inline TYPE RoundScalarWithFormat(const char* format, ImGuiDataType data_ | |||||||
|     while (*p == ' ') |     while (*p == ' ') | ||||||
|         p++; |         p++; | ||||||
|     if (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) |     if (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) | ||||||
|         v = (TYPE)atof(p); |         v = (TYPE)ImAtof(p); | ||||||
|     else |     else | ||||||
|         ImAtoi(p, (SIGNEDTYPE*)&v); |         ImAtoi(p, (SIGNEDTYPE*)&v); | ||||||
|     return v; |     return v; | ||||||
| @@ -12180,13 +12180,13 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|             if (initial_dist2 >= (wheel_r_inner-1)*(wheel_r_inner-1) && initial_dist2 <= (wheel_r_outer+1)*(wheel_r_outer+1)) |             if (initial_dist2 >= (wheel_r_inner-1)*(wheel_r_inner-1) && initial_dist2 <= (wheel_r_outer+1)*(wheel_r_outer+1)) | ||||||
|             { |             { | ||||||
|                 // Interactive with Hue wheel |                 // Interactive with Hue wheel | ||||||
|                 H = atan2f(current_off.y, current_off.x) / IM_PI*0.5f; |                 H = ImAtan2(current_off.y, current_off.x) / IM_PI*0.5f; | ||||||
|                 if (H < 0.0f) |                 if (H < 0.0f) | ||||||
|                     H += 1.0f; |                     H += 1.0f; | ||||||
|                 value_changed = value_changed_h = true; |                 value_changed = value_changed_h = true; | ||||||
|             } |             } | ||||||
|             float cos_hue_angle = cosf(-H * 2.0f * IM_PI); |             float cos_hue_angle = ImCos(-H * 2.0f * IM_PI); | ||||||
|             float sin_hue_angle = sinf(-H * 2.0f * IM_PI); |             float sin_hue_angle = ImSin(-H * 2.0f * IM_PI); | ||||||
|             if (ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, ImRotate(initial_off, cos_hue_angle, sin_hue_angle))) |             if (ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, ImRotate(initial_off, cos_hue_angle, sin_hue_angle))) | ||||||
|             { |             { | ||||||
|                 // Interacting with SV triangle |                 // Interacting with SV triangle | ||||||
| @@ -12332,14 +12332,14 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|             const int vert_end_idx = draw_list->VtxBuffer.Size; |             const int vert_end_idx = draw_list->VtxBuffer.Size; | ||||||
|  |  | ||||||
|             // Paint colors over existing vertices |             // Paint colors over existing vertices | ||||||
|             ImVec2 gradient_p0(wheel_center.x + cosf(a0) * wheel_r_inner, wheel_center.y + sinf(a0) * wheel_r_inner); |             ImVec2 gradient_p0(wheel_center.x + ImCos(a0) * wheel_r_inner, wheel_center.y + ImSin(a0) * wheel_r_inner); | ||||||
|             ImVec2 gradient_p1(wheel_center.x + cosf(a1) * wheel_r_inner, wheel_center.y + sinf(a1) * wheel_r_inner); |             ImVec2 gradient_p1(wheel_center.x + ImCos(a1) * wheel_r_inner, wheel_center.y + ImSin(a1) * wheel_r_inner); | ||||||
|             ShadeVertsLinearColorGradientKeepAlpha(draw_list->VtxBuffer.Data + vert_start_idx, draw_list->VtxBuffer.Data + vert_end_idx, gradient_p0, gradient_p1, hue_colors[n], hue_colors[n+1]); |             ShadeVertsLinearColorGradientKeepAlpha(draw_list->VtxBuffer.Data + vert_start_idx, draw_list->VtxBuffer.Data + vert_end_idx, gradient_p0, gradient_p1, hue_colors[n], hue_colors[n+1]); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Render Cursor + preview on Hue Wheel |         // Render Cursor + preview on Hue Wheel | ||||||
|         float cos_hue_angle = cosf(H * 2.0f * IM_PI); |         float cos_hue_angle = ImCos(H * 2.0f * IM_PI); | ||||||
|         float sin_hue_angle = sinf(H * 2.0f * IM_PI); |         float sin_hue_angle = ImSin(H * 2.0f * IM_PI); | ||||||
|         ImVec2 hue_cursor_pos(wheel_center.x + cos_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f, wheel_center.y + sin_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f); |         ImVec2 hue_cursor_pos(wheel_center.x + cos_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f, wheel_center.y + sin_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f); | ||||||
|         float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f; |         float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f; | ||||||
|         int hue_cursor_segments = ImClamp((int)(hue_cursor_rad / 1.4f), 9, 32); |         int hue_cursor_segments = ImClamp((int)(hue_cursor_rad / 1.4f), 9, 32); | ||||||
|   | |||||||
| @@ -106,13 +106,15 @@ namespace IMGUI_STB_NAMESPACE | |||||||
|  |  | ||||||
| #ifndef STB_TRUETYPE_IMPLEMENTATION                         // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds) | #ifndef STB_TRUETYPE_IMPLEMENTATION                         // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds) | ||||||
| #ifndef IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION | #ifndef IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION | ||||||
| #define STBTT_malloc(x,u)  ((void)(u), ImGui::MemAlloc(x)) | #define STBTT_malloc(x,u)   ((void)(u), ImGui::MemAlloc(x)) | ||||||
| #define STBTT_free(x,u)    ((void)(u), ImGui::MemFree(x)) | #define STBTT_free(x,u)     ((void)(u), ImGui::MemFree(x)) | ||||||
| #define STBTT_assert(x)    IM_ASSERT(x) | #define STBTT_assert(x)     IM_ASSERT(x) | ||||||
| #define STBTT_fmod(x,y)    ImFmod(x,y) | #define STBTT_fmod(x,y)     ImFmod(x,y) | ||||||
| #define STBTT_sqrt(x)      ImSqrt(x) | #define STBTT_sqrt(x)       ImSqrt(x) | ||||||
| #define STBTT_pow(x,y)     ImPow(x,y) | #define STBTT_pow(x,y)      ImPow(x,y) | ||||||
| #define STBTT_fabs(x)      ImFabs(x) | #define STBTT_fabs(x)       ImFabs(x) | ||||||
|  | #define STBTT_ifloor(x)     ((int)ImFloorStd(x)) | ||||||
|  | #define STBTT_iceil(x)      ((int)ImCeil(x)) | ||||||
| #define STBTT_STATIC | #define STBTT_STATIC | ||||||
| #define STB_TRUETYPE_IMPLEMENTATION | #define STB_TRUETYPE_IMPLEMENTATION | ||||||
| #else | #else | ||||||
| @@ -309,7 +311,7 @@ ImDrawListSharedData::ImDrawListSharedData() | |||||||
|     for (int i = 0; i < IM_ARRAYSIZE(CircleVtx12); i++) |     for (int i = 0; i < IM_ARRAYSIZE(CircleVtx12); i++) | ||||||
|     { |     { | ||||||
|         const float a = ((float)i * 2 * IM_PI) / (float)IM_ARRAYSIZE(CircleVtx12); |         const float a = ((float)i * 2 * IM_PI) / (float)IM_ARRAYSIZE(CircleVtx12); | ||||||
|         CircleVtx12[i] = ImVec2(cosf(a), sinf(a)); |         CircleVtx12[i] = ImVec2(ImCos(a), ImSin(a)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -907,7 +909,7 @@ void ImDrawList::PathArcTo(const ImVec2& centre, float radius, float a_min, floa | |||||||
|     for (int i = 0; i <= num_segments; i++) |     for (int i = 0; i <= num_segments; i++) | ||||||
|     { |     { | ||||||
|         const float a = a_min + ((float)i / (float)num_segments) * (a_max - a_min); |         const float a = a_min + ((float)i / (float)num_segments) * (a_max - a_min); | ||||||
|         _Path.push_back(ImVec2(centre.x + cosf(a) * radius, centre.y + sinf(a) * radius)); |         _Path.push_back(ImVec2(centre.x + ImCos(a) * radius, centre.y + ImSin(a) * radius)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -2706,7 +2708,7 @@ static inline float ImAcos01(float x) | |||||||
| { | { | ||||||
|     if (x <= 0.0f) return IM_PI * 0.5f; |     if (x <= 0.0f) return IM_PI * 0.5f; | ||||||
|     if (x >= 1.0f) return 0.0f; |     if (x >= 1.0f) return 0.0f; | ||||||
|     return acosf(x); |     return ImAcos(x); | ||||||
|     //return (-0.69813170079773212f * x * x - 0.87266462599716477f) * x + 1.5707963267948966f; // Cheap approximation, may be enough for what we do. |     //return (-0.69813170079773212f * x * x - 0.87266462599716477f) * x + 1.5707963267948966f; // Cheap approximation, may be enough for what we do. | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -154,6 +154,13 @@ static inline float  ImPow(float x, float y) | |||||||
| static inline double ImPow(double x, double y)                                  { return pow(x, y); } | static inline double ImPow(double x, double y)                                  { return pow(x, y); } | ||||||
| static inline float  ImFmod(float x, float y)                                   { return fmodf(x, y); } | static inline float  ImFmod(float x, float y)                                   { return fmodf(x, y); } | ||||||
| static inline double ImFmod(double x, double y)                                 { return fmod(x, y); } | static inline double ImFmod(double x, double y)                                 { return fmod(x, y); } | ||||||
|  | static inline float  ImCos(float x)                                             { return cosf(x); } | ||||||
|  | static inline float  ImSin(float x)                                             { return sinf(x); } | ||||||
|  | static inline float  ImAcos(float x)                                            { return acosf(x); } | ||||||
|  | static inline float  ImAtan2(float y, float x)                                  { return atan2f(y, x); } | ||||||
|  | static inline double ImAtof(const char* s)                                      { return atof(s); } | ||||||
|  | static inline float  ImFloorStd(float x)                                        { return floorf(x); }   // we already uses our own ImFloor() { return (float)(int)v } internally so the standard one wrapper is named differently (it's used by stb_truetype) | ||||||
|  | static inline float  ImCeil(float x)                                            { return ceilf(x); } | ||||||
| #endif | #endif | ||||||
| // - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support for variety of types: signed/unsigned int/long long float/double, using templates here but we could also redefine them 6 times | // - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support for variety of types: signed/unsigned int/long long float/double, using templates here but we could also redefine them 6 times | ||||||
| template<typename T> static inline T ImMin(T lhs, T rhs)                        { return lhs < rhs ? lhs : rhs; } | template<typename T> static inline T ImMin(T lhs, T rhs)                        { return lhs < rhs ? lhs : rhs; } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user