diff --git a/imgui_internal.h b/imgui_internal.h
index cc5c488..1c60ddf 100644
--- a/imgui_internal.h
+++ b/imgui_internal.h
@@ -3445,9 +3445,8 @@
 
     // Widgets: Text
     IMGUI_API void          TextEx(const char* text, const char* text_end = NULL, ImGuiTextFlags flags = 0);
-    IMGUI_API void          TextAligned(float align_x, const char* fmt, ...);               // FIXME-WIP: Works but API is likely to be reworked. This is designed for 1 item on the line. (#7024)
-    IMGUI_API void          TextAlignedV(float align_x, const char* fmt, va_list args);
-    IMGUI_API void          TextAlignedExV(float align_x, float avail_x, const char* fmt, va_list args);
+    IMGUI_API void          TextAligned(float align_x, float size_x, const char* fmt, ...);               // FIXME-WIP: Works but API is likely to be reworked. This is designed for 1 item on the line. (#7024)
+    IMGUI_API void          TextAlignedV(float align_x, float size_x, const char* fmt, va_list args);
 
     // Widgets
     IMGUI_API bool          ButtonEx(const char* label, const ImVec2& size_arg = ImVec2(0, 0), ImGuiButtonFlags flags = 0);
diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp
index 6e19c22..435a89b 100644
--- a/imgui_widgets.cpp
+++ b/imgui_widgets.cpp
@@ -339,39 +339,39 @@
         PopTextWrapPos();
 }
 
-void ImGui::TextAligned(float align_x, const char* fmt, ...)
+void ImGui::TextAligned(float align_x, float size_x, const char* fmt, ...)
 {
     va_list args;
     va_start(args, fmt);
-    TextAlignedV(align_x, fmt, args);
+    TextAlignedV(align_x, size_x, fmt, args);
     va_end(args);
 }
 
 // align_x: 0.0f = left, 0.5f = center, 1.0f = right.
+// size_x : 0.0f = shortcut for GetContentRegionAvail().x
 // FIXME-WIP: Works but API is likely to be reworked. This is designed for 1 item on the line. (#7024)
-void ImGui::TextAlignedV(float align_x, const char* fmt, va_list args)
-{
-    TextAlignedExV(align_x, GetContentRegionAvail().x, fmt, args);
-}
-
-void ImGui::TextAlignedExV(float align_x, float avail_x, const char* fmt, va_list args)
+void ImGui::TextAlignedV(float align_x, float size_x, const char* fmt, va_list args)
 {
     ImGuiWindow* window = GetCurrentWindow();
     if (window->SkipItems)
         return;
 
+    // ~CalcItemSize()
+    if (size_x <= 0.0f)
+        size_x = GetContentRegionAvail().x + size_x; // <-- Remember that size_x is negative here
+
     const char* text, *text_end;
     ImFormatStringToTempBufferV(&text, &text_end, fmt, args);
     const ImVec2 text_size = CalcTextSize(text, text_end);
 
     ImVec2 pos(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset);
-    ImVec2 pos_max(pos.x + avail_x, window->ClipRect.Max.y);
-    ImVec2 size(ImMin(avail_x, text_size.x), text_size.y);
+    ImVec2 pos_max(pos.x + size_x, window->ClipRect.Max.y);
+    ImVec2 size(ImMin(size_x, text_size.x), text_size.y);
     window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, pos.x + text_size.x);
     window->DC.IdealMaxPos.x = ImMax(window->DC.IdealMaxPos.x, pos.x + text_size.x);
-    if (align_x > 0.0f && text_size.x < avail_x)
+    if (align_x > 0.0f && text_size.x < size_x)
     {
-        pos.x += ImTrunc((avail_x - text_size.x) * align_x);
+        pos.x += ImTrunc((size_x - text_size.x) * align_x);
         window->DC.CursorPos = pos;
     }
     RenderTextEllipsis(window->DrawList, pos, pos_max, pos_max.x, text, text_end, &text_size);
@@ -381,7 +381,7 @@
     ItemAdd(ImRect(pos, pos + size), 0);
     window->DC.CursorMaxPos.x = backup_max_pos.x; // Cancel out extending content size because right-aligned text would otherwise mess it up.
 
-    if (avail_x < text_size.x && IsItemHovered(ImGuiHoveredFlags_NoNavOverride | ImGuiHoveredFlags_AllowWhenDisabled | ImGuiHoveredFlags_ForTooltip))
+    if (size_x < text_size.x && IsItemHovered(ImGuiHoveredFlags_NoNavOverride | ImGuiHoveredFlags_AllowWhenDisabled | ImGuiHoveredFlags_ForTooltip))
         SetTooltip("%.*s", (int)(text_end - text), text);
 }
 
