Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to right align text in ImGui Columns?

Tags:

c++

imgui

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.

like image 974
iHowell Avatar asked Sep 21 '19 23:09

iHowell


People also ask

How do I align text in straight?

Select the text that you want to align. On the Home tab, in the Paragraph group, click Align Left or Align Right .


2 Answers

I received help in the ImGui Discord channel and came up with this solution:

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);
like image 52
iHowell Avatar answered Sep 17 '22 06:09

iHowell


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);
like image 26
Fabrice Mollo Avatar answered Sep 21 '22 06:09

Fabrice Mollo