mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	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. Comments.
This commit is contained in:
		
							
								
								
									
										20
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -1436,7 +1436,7 @@ void ImGui::ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& | ||||
|     } | ||||
|  | ||||
|     const float chroma = r - (g < b ? g : b); | ||||
|     out_h = fabsf(K + (g - b) / (6.f * chroma + 1e-20f)); | ||||
|     out_h = ImFabs(K + (g - b) / (6.f * chroma + 1e-20f)); | ||||
|     out_s = chroma / (r + 1e-20f); | ||||
|     out_v = r; | ||||
| } | ||||
| @@ -1452,7 +1452,7 @@ void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     h = fmodf(h, 1.0f) / (60.0f/360.0f); | ||||
|     h = ImFmod(h, 1.0f) / (60.0f/360.0f); | ||||
|     int   i = (int)h; | ||||
|     float f = h - (float)i; | ||||
|     float p = v * (1.0f - s); | ||||
| @@ -2210,7 +2210,7 @@ void ImGui::ItemSize(const ImRect& bb, float text_offset_y) | ||||
|  | ||||
| static ImGuiDir inline NavScoreItemGetQuadrant(float dx, float dy) | ||||
| { | ||||
|     if (fabsf(dx) > fabsf(dy)) | ||||
|     if (ImFabs(dx) > ImFabs(dy)) | ||||
|         return (dx > 0.0f) ? ImGuiDir_Right : ImGuiDir_Left; | ||||
|     return (dy > 0.0f) ? ImGuiDir_Down : ImGuiDir_Up; | ||||
| } | ||||
| @@ -2259,12 +2259,12 @@ static bool NavScoreItem(ImGuiNavMoveResult* result, ImRect cand) | ||||
|     float dby = NavScoreItemDistInterval(ImLerp(cand.Min.y, cand.Max.y, 0.2f), ImLerp(cand.Min.y, cand.Max.y, 0.8f), ImLerp(curr.Min.y, curr.Max.y, 0.2f), ImLerp(curr.Min.y, curr.Max.y, 0.8f)); // Scale down on Y to keep using box-distance for vertically touching items | ||||
|     if (dby != 0.0f && dbx != 0.0f) | ||||
|        dbx = (dbx/1000.0f) + ((dbx > 0.0f) ? +1.0f : -1.0f); | ||||
|     float dist_box = fabsf(dbx) + fabsf(dby); | ||||
|     float dist_box = ImFabs(dbx) + ImFabs(dby); | ||||
|  | ||||
|     // Compute distance between centers (this is off by a factor of 2, but we only compare center distances with each other so it doesn't matter) | ||||
|     float dcx = (cand.Min.x + cand.Max.x) - (curr.Min.x + curr.Max.x); | ||||
|     float dcy = (cand.Min.y + cand.Max.y) - (curr.Min.y + curr.Max.y); | ||||
|     float dist_center = fabsf(dcx) + fabsf(dcy); // L1 metric (need this for our connectedness guarantee) | ||||
|     float dist_center = ImFabs(dcx) + ImFabs(dcy); // L1 metric (need this for our connectedness guarantee) | ||||
|  | ||||
|     // Determine which quadrant of 'curr' our candidate item 'cand' lies in based on distance | ||||
|     ImGuiDir quadrant; | ||||
| @@ -3307,7 +3307,7 @@ static void ImGui::NavUpdate() | ||||
|     g.NavScoringRectScreen = g.NavWindow ? ImRect(g.NavWindow->Pos + nav_rect_rel.Min, g.NavWindow->Pos + nav_rect_rel.Max) : GetViewportRect(); | ||||
|     g.NavScoringRectScreen.Min.x = ImMin(g.NavScoringRectScreen.Min.x + 1.0f, g.NavScoringRectScreen.Max.x); | ||||
|     g.NavScoringRectScreen.Max.x = g.NavScoringRectScreen.Min.x; | ||||
|     IM_ASSERT(!g.NavScoringRectScreen.IsInverted()); // Ensure if we have a finite, non-inverted bounding box here will allows us to remove extraneous fabsf() calls in NavScoreItem(). | ||||
|     IM_ASSERT(!g.NavScoringRectScreen.IsInverted()); // Ensure if we have a finite, non-inverted bounding box here will allows us to remove extraneous ImFabs() calls in NavScoreItem(). | ||||
|     //g.OverlayDrawList.AddRect(g.NavScoringRectScreen.Min, g.NavScoringRectScreen.Max, IM_COL32(255,200,0,255)); // [DEBUG] | ||||
|     g.NavScoringCount = 0; | ||||
| #if IMGUI_DEBUG_NAV_RECTS | ||||
| @@ -4678,7 +4678,7 @@ bool ImGui::IsMouseClicked(int button, bool repeat) | ||||
|     if (repeat && t > g.IO.KeyRepeatDelay) | ||||
|     { | ||||
|         float delay = g.IO.KeyRepeatDelay, rate = g.IO.KeyRepeatRate; | ||||
|         if ((fmodf(t - delay, rate) > rate*0.5f) != (fmodf(t - delay - g.IO.DeltaTime, rate) > rate*0.5f)) | ||||
|         if ((ImFmod(t - delay, rate) > rate*0.5f) != (ImFmod(t - delay - g.IO.DeltaTime, rate) > rate*0.5f)) | ||||
|             return true; | ||||
|     } | ||||
|  | ||||
| @@ -8923,7 +8923,7 @@ static bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType d | ||||
|                 { | ||||
|                     // Positive: rescale to the positive range before powering | ||||
|                     float a; | ||||
|                     if (fabsf(linear_zero_pos - 1.0f) > 1.e-6f) | ||||
|                     if (ImFabs(linear_zero_pos - 1.0f) > 1.e-6f) | ||||
|                         a = (clicked_t - linear_zero_pos) / (1.0f - linear_zero_pos); | ||||
|                     else | ||||
|                         a = clicked_t; | ||||
| @@ -10692,7 +10692,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 | ||||
|         draw_window->DrawList->AddText(g.Font, g.FontSize, render_pos - render_scroll, GetColorU32(ImGuiCol_Text), buf_display, buf_display + edit_state.CurLenA, 0.0f, is_multiline ? NULL : &clip_rect); | ||||
|  | ||||
|         // Draw blinking cursor | ||||
|         bool cursor_is_visible = (!g.IO.OptCursorBlink) || (g.InputTextState.CursorAnim <= 0.0f) || fmodf(g.InputTextState.CursorAnim, 1.20f) <= 0.80f; | ||||
|         bool cursor_is_visible = (!g.IO.OptCursorBlink) || (g.InputTextState.CursorAnim <= 0.0f) || ImFmod(g.InputTextState.CursorAnim, 1.20f) <= 0.80f; | ||||
|         ImVec2 cursor_screen_pos = render_pos + cursor_offset - render_scroll; | ||||
|         ImRect cursor_screen_rect(cursor_screen_pos.x, cursor_screen_pos.y-g.FontSize+0.5f, cursor_screen_pos.x+1.0f, cursor_screen_pos.y-1.5f); | ||||
|         if (cursor_is_visible && cursor_screen_rect.Overlaps(clip_rect)) | ||||
| @@ -11540,7 +11540,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled) | ||||
|                 ImVec2 ta = g.IO.MousePos - g.IO.MouseDelta; | ||||
|                 ImVec2 tb = (window->Pos.x < next_window->Pos.x) ? next_window_rect.GetTL() : next_window_rect.GetTR(); | ||||
|                 ImVec2 tc = (window->Pos.x < next_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR(); | ||||
|                 float extra = ImClamp(fabsf(ta.x - tb.x) * 0.30f, 5.0f, 30.0f); // add a bit of extra slack. | ||||
|                 float extra = ImClamp(ImFabs(ta.x - tb.x) * 0.30f, 5.0f, 30.0f); // add a bit of extra slack. | ||||
|                 ta.x += (window->Pos.x < next_window->Pos.x) ? -0.5f : +0.5f;   // to avoid numerical issues | ||||
|                 tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f);            // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale? | ||||
|                 tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user