如何右对齐 ImGui 列中的文本?

How to right align text in ImGui Columns?

假设我用以下内容创建了一个 table:

ImGui::Columns(3);

ImGui::Text("Header 1");
ImGui::NextColumn();
ImGui::Text("Header 2");
ImGui::NextColumn();
ImGui::Text("Header 3");
ImGui::NextColumn();

ImGui::Text("1");
ImGui::NextColumn();
ImGui::Text("2");
ImGui::NextColumn();
ImGui::Text("3");
ImGui::NextColumn();

ImGui::Columns(1);

如何使第二行(1、2 和 3)中的文本在该列中右对齐?我看过 CalcItemWidthCalcTextSize,但我无法弄清楚它们在多列行中的工作方式。

我在 ImGui Discord 频道得到帮助,想出了这个解决方案:

ImGui::NextColumn();
std::string text = "1";
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetColumnWidth() - ImGui::CalcTextSize(text.c_str()).x 
    - ImGui::GetScrollX() - 2 * ImGui::GetStyle().ItemSpacing.x);
ImGui::Text("%s", text);

与 iHowell 答案几乎相同的代码,但应根据当前位置值检查新的 x 位置,以便很好地 window-边界对齐(文本将被右剪裁)。 在代码中:

ImGui::NextColumn();
std::string text = "1";
auto posX = (ImGui::GetCursorPosX() + ImGui::GetColumnWidth() - ImGui::CalcTextSize(text.c_str()).x 
    - ImGui::GetScrollX() - 2 * ImGui::GetStyle().ItemSpacing.x);
if(posX > ImGui::GetCursorPosX())
  ImGui::SetCursorPosX(posX);
ImGui::Text("%s", text);