c++imgui

How to right align text in ImGui Columns?


Suppose I create a table with the following:

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);

How can I get the text in the second row (1, 2, and 3) to be right aligned in the column? I've seen CalcItemWidth and CalcTextSize, but I can't figure out how they work within a multi-column line.


Solution

  • Nearly same code than iHowell answer but new x position should be checked against current position value in order to be well window-border aligned (text will then be right-clipped). In code:

    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);