mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-28 01:20:55 +01:00
General fixes of Columns() api. User has more flexibility in the way to fill cells.
This commit is contained in:
parent
2aee4419e3
commit
f1dcd72e9f
134
imgui.cpp
134
imgui.cpp
@ -630,11 +630,14 @@ struct ImGuiDrawContext
|
|||||||
ImGuiStorage* StateStorage;
|
ImGuiStorage* StateStorage;
|
||||||
int OpenNextNode;
|
int OpenNextNode;
|
||||||
|
|
||||||
float ColumnStartX;
|
float ColumnsStartX; // Start position from left of window (increased by TreePush/TreePop, etc.)
|
||||||
int ColumnCurrent;
|
float ColumnsOffsetX; // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API.
|
||||||
|
int ColumnsCurrent;
|
||||||
int ColumnsCount;
|
int ColumnsCount;
|
||||||
|
ImVec2 ColumnsStartPos;
|
||||||
|
float ColumnsCellMinY;
|
||||||
|
float ColumnsCellMaxY;
|
||||||
bool ColumnsShowBorders;
|
bool ColumnsShowBorders;
|
||||||
ImVec2 ColumnsStartCursorPos;
|
|
||||||
ImGuiID ColumnsSetID;
|
ImGuiID ColumnsSetID;
|
||||||
|
|
||||||
ImGuiDrawContext()
|
ImGuiDrawContext()
|
||||||
@ -649,11 +652,14 @@ struct ImGuiDrawContext
|
|||||||
StateStorage = NULL;
|
StateStorage = NULL;
|
||||||
OpenNextNode = -1;
|
OpenNextNode = -1;
|
||||||
|
|
||||||
ColumnStartX = 0.0f;
|
ColumnsStartX = 0.0f;
|
||||||
ColumnCurrent = 0;
|
ColumnsOffsetX = 0.0f;
|
||||||
|
ColumnsCurrent = 0;
|
||||||
ColumnsCount = 1;
|
ColumnsCount = 1;
|
||||||
|
ColumnsStartPos = ImVec2(0.0f, 0.0f);
|
||||||
|
ColumnsCellMinY = ColumnsCellMaxY = 0.0f;
|
||||||
ColumnsShowBorders = true;
|
ColumnsShowBorders = true;
|
||||||
ColumnsStartCursorPos = ImVec2(0,0);
|
ColumnsSetID = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2346,8 +2352,9 @@ bool ImGui::Begin(const char* name, bool* open, ImVec2 size, float fill_alpha, I
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Setup drawing context
|
// Setup drawing context
|
||||||
window->DC.ColumnStartX = window->WindowPadding().x;
|
window->DC.ColumnsStartX = window->WindowPadding().x;
|
||||||
window->DC.CursorStartPos = window->Pos + ImVec2(window->DC.ColumnStartX, window->TitleBarHeight() + window->WindowPadding().y) - ImVec2(0.0f, window->ScrollY);
|
window->DC.ColumnsOffsetX = 0.0f;
|
||||||
|
window->DC.CursorStartPos = window->Pos + ImVec2(window->DC.ColumnsStartX + window->DC.ColumnsOffsetX, window->TitleBarHeight() + window->WindowPadding().y) - ImVec2(0.0f, window->ScrollY);
|
||||||
window->DC.CursorPos = window->DC.CursorStartPos;
|
window->DC.CursorPos = window->DC.CursorStartPos;
|
||||||
window->DC.CursorPosPrevLine = window->DC.CursorPos;
|
window->DC.CursorPosPrevLine = window->DC.CursorPos;
|
||||||
window->DC.CurrentLineHeight = window->DC.PrevLineHeight = 0.0f;
|
window->DC.CurrentLineHeight = window->DC.PrevLineHeight = 0.0f;
|
||||||
@ -2362,8 +2369,10 @@ bool ImGui::Begin(const char* name, bool* open, ImVec2 size, float fill_alpha, I
|
|||||||
window->DC.ColorModifiers.resize(0);
|
window->DC.ColorModifiers.resize(0);
|
||||||
window->DC.StyleModifiers.resize(0);
|
window->DC.StyleModifiers.resize(0);
|
||||||
window->DC.ColorEditMode = ImGuiColorEditMode_UserSelect;
|
window->DC.ColorEditMode = ImGuiColorEditMode_UserSelect;
|
||||||
window->DC.ColumnCurrent = 0;
|
window->DC.ColumnsCurrent = 0;
|
||||||
window->DC.ColumnsCount = 1;
|
window->DC.ColumnsCount = 1;
|
||||||
|
window->DC.ColumnsStartPos = window->DC.CursorPos;
|
||||||
|
window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY = window->DC.ColumnsStartPos.y;
|
||||||
window->DC.TreeDepth = 0;
|
window->DC.TreeDepth = 0;
|
||||||
window->DC.StateStorage = &window->StateStorage;
|
window->DC.StateStorage = &window->StateStorage;
|
||||||
window->DC.OpenNextNode = -1;
|
window->DC.OpenNextNode = -1;
|
||||||
@ -2721,7 +2730,7 @@ ImVec2 ImGui::GetContentRegionMax()
|
|||||||
ImVec2 m = window->Size - window->WindowPadding();
|
ImVec2 m = window->Size - window->WindowPadding();
|
||||||
if (window->DC.ColumnsCount != 1)
|
if (window->DC.ColumnsCount != 1)
|
||||||
{
|
{
|
||||||
m.x = GetColumnOffset(window->DC.ColumnCurrent + 1);
|
m.x = GetColumnOffset(window->DC.ColumnsCurrent + 1);
|
||||||
m.x -= GImGui.Style.WindowPadding.x;
|
m.x -= GImGui.Style.WindowPadding.x;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -4942,6 +4951,7 @@ void ImGui::Spacing()
|
|||||||
ItemSize(ImVec2(0,0));
|
ItemSize(ImVec2(0,0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Advance
|
||||||
static void ItemSize(ImVec2 size, ImVec2* adjust_start_offset)
|
static void ItemSize(ImVec2 size, ImVec2* adjust_start_offset)
|
||||||
{
|
{
|
||||||
ImGuiState& g = GImGui;
|
ImGuiState& g = GImGui;
|
||||||
@ -4955,7 +4965,7 @@ static void ItemSize(ImVec2 size, ImVec2* adjust_start_offset)
|
|||||||
|
|
||||||
// Always align ourselves on pixel boundaries
|
// Always align ourselves on pixel boundaries
|
||||||
window->DC.CursorPosPrevLine = ImVec2(window->DC.CursorPos.x + size.x, window->DC.CursorPos.y);
|
window->DC.CursorPosPrevLine = ImVec2(window->DC.CursorPos.x + size.x, window->DC.CursorPos.y);
|
||||||
window->DC.CursorPos = ImVec2((float)(int)(window->Pos.x + window->DC.ColumnStartX), (float)(int)(window->DC.CursorPos.y + line_height + g.Style.ItemSpacing.y));
|
window->DC.CursorPos = ImVec2((float)(int)(window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX), (float)(int)(window->DC.CursorPos.y + line_height + g.Style.ItemSpacing.y));
|
||||||
|
|
||||||
window->SizeContentsFit = ImMax(window->SizeContentsFit, ImVec2(window->DC.CursorPosPrevLine.x, window->DC.CursorPos.y) - window->Pos + ImVec2(0.0f, window->ScrollY));
|
window->SizeContentsFit = ImMax(window->SizeContentsFit, ImVec2(window->DC.CursorPosPrevLine.x, window->DC.CursorPos.y) - window->Pos + ImVec2(0.0f, window->ScrollY));
|
||||||
|
|
||||||
@ -4979,10 +4989,22 @@ void ImGui::NextColumn()
|
|||||||
{
|
{
|
||||||
ImGui::PopItemWidth();
|
ImGui::PopItemWidth();
|
||||||
PopClipRect();
|
PopClipRect();
|
||||||
if (++window->DC.ColumnCurrent < window->DC.ColumnsCount)
|
|
||||||
SameLine((int)(ImGui::GetColumnOffset(window->DC.ColumnCurrent) + g.Style.ItemSpacing.x));
|
window->DC.ColumnsCellMaxY = ImMax(window->DC.ColumnsCellMaxY, window->DC.CursorPos.y);
|
||||||
|
if (++window->DC.ColumnsCurrent < window->DC.ColumnsCount)
|
||||||
|
{
|
||||||
|
window->DC.ColumnsOffsetX = ImGui::GetColumnOffset(window->DC.ColumnsCurrent) - window->DC.ColumnsStartX + g.Style.ItemSpacing.x;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
window->DC.ColumnCurrent = 0;
|
{
|
||||||
|
window->DC.ColumnsCurrent = 0;
|
||||||
|
window->DC.ColumnsOffsetX = 0.0f;
|
||||||
|
window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY;
|
||||||
|
}
|
||||||
|
window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX);
|
||||||
|
window->DC.CursorPos.y = window->DC.ColumnsCellMinY;
|
||||||
|
window->DC.CurrentLineHeight = 0.0f;
|
||||||
|
|
||||||
PushColumnClipRect();
|
PushColumnClipRect();
|
||||||
ImGui::PushItemWidth(ImGui::GetColumnWidth() * 0.65f);
|
ImGui::PushItemWidth(ImGui::GetColumnWidth() * 0.65f);
|
||||||
}
|
}
|
||||||
@ -5052,14 +5074,14 @@ float ImGui::GetColumnOffset(int column_index)
|
|||||||
ImGuiState& g = GImGui;
|
ImGuiState& g = GImGui;
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
if (column_index < 0)
|
if (column_index < 0)
|
||||||
column_index = window->DC.ColumnCurrent;
|
column_index = window->DC.ColumnsCurrent;
|
||||||
|
|
||||||
const ImGuiID column_id = window->DC.ColumnsSetID + ImGuiID(column_index);
|
const ImGuiID column_id = window->DC.ColumnsSetID + ImGuiID(column_index);
|
||||||
RegisterAliveId(column_id);
|
RegisterAliveId(column_id);
|
||||||
const float default_t = column_index / (float)window->DC.ColumnsCount;
|
const float default_t = column_index / (float)window->DC.ColumnsCount;
|
||||||
const float t = (float)window->StateStorage.GetInt(column_id, (int)(default_t * 8192)) / 8192; // Cheaply store our floating point value inside the integer (could store an union into the map?)
|
const float t = (float)window->StateStorage.GetInt(column_id, (int)(default_t * 8192)) / 8192; // Cheaply store our floating point value inside the integer (could store an union into the map?)
|
||||||
|
|
||||||
const float offset = window->DC.ColumnStartX + t * (window->Size.x - g.Style.ScrollBarWidth - window->DC.ColumnStartX);
|
const float offset = window->DC.ColumnsStartX + t * (window->Size.x - g.Style.ScrollBarWidth - window->DC.ColumnsStartX);
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5068,10 +5090,10 @@ void ImGui::SetColumnOffset(int column_index, float offset)
|
|||||||
ImGuiState& g = GImGui;
|
ImGuiState& g = GImGui;
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
if (column_index < 0)
|
if (column_index < 0)
|
||||||
column_index = window->DC.ColumnCurrent;
|
column_index = window->DC.ColumnsCurrent;
|
||||||
|
|
||||||
const ImGuiID column_id = window->DC.ColumnsSetID + ImGuiID(column_index);
|
const ImGuiID column_id = window->DC.ColumnsSetID + ImGuiID(column_index);
|
||||||
const float t = (offset - window->DC.ColumnStartX) / (window->Size.x - g.Style.ScrollBarWidth - window->DC.ColumnStartX);
|
const float t = (offset - window->DC.ColumnsStartX) / (window->Size.x - g.Style.ScrollBarWidth - window->DC.ColumnsStartX);
|
||||||
window->StateStorage.SetInt(column_id, (int)(t*8192));
|
window->StateStorage.SetInt(column_id, (int)(t*8192));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5079,7 +5101,7 @@ float ImGui::GetColumnWidth(int column_index)
|
|||||||
{
|
{
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
if (column_index < 0)
|
if (column_index < 0)
|
||||||
column_index = window->DC.ColumnCurrent;
|
column_index = window->DC.ColumnsCurrent;
|
||||||
|
|
||||||
const float w = GetColumnOffset(column_index+1) - GetColumnOffset(column_index);
|
const float w = GetColumnOffset(column_index+1) - GetColumnOffset(column_index);
|
||||||
return w;
|
return w;
|
||||||
@ -5089,7 +5111,7 @@ static void PushColumnClipRect(int column_index)
|
|||||||
{
|
{
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
if (column_index < 0)
|
if (column_index < 0)
|
||||||
column_index = window->DC.ColumnCurrent;
|
column_index = window->DC.ColumnsCurrent;
|
||||||
|
|
||||||
const float x1 = window->Pos.x + ImGui::GetColumnOffset(column_index) - 1;
|
const float x1 = window->Pos.x + ImGui::GetColumnOffset(column_index) - 1;
|
||||||
const float x2 = window->Pos.x + ImGui::GetColumnOffset(column_index+1) - 1;
|
const float x2 = window->Pos.x + ImGui::GetColumnOffset(column_index+1) - 1;
|
||||||
@ -5105,16 +5127,19 @@ void ImGui::Columns(int columns_count, const char* id, bool border)
|
|||||||
|
|
||||||
if (window->DC.ColumnsCount != 1)
|
if (window->DC.ColumnsCount != 1)
|
||||||
{
|
{
|
||||||
if (window->DC.ColumnCurrent != 0)
|
if (window->DC.ColumnsCurrent != 0)
|
||||||
ItemSize(ImVec2(0,0)); // Advance to column 0
|
ItemSize(ImVec2(0,0)); // Advance to column 0
|
||||||
ImGui::PopItemWidth();
|
ImGui::PopItemWidth();
|
||||||
PopClipRect();
|
PopClipRect();
|
||||||
|
|
||||||
|
window->DC.ColumnsCellMaxY = ImMax(window->DC.ColumnsCellMaxY, window->DC.CursorPos.y);
|
||||||
|
window->DC.CursorPos.y = window->DC.ColumnsCellMaxY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Draw columns borders and handle resize at the time of "closing" a columns set
|
||||||
if (window->DC.ColumnsCount != columns_count && window->DC.ColumnsCount != 1 && window->DC.ColumnsShowBorders)
|
if (window->DC.ColumnsCount != columns_count && window->DC.ColumnsCount != 1 && window->DC.ColumnsShowBorders)
|
||||||
{
|
{
|
||||||
// Draw columns and handle resize
|
const float y1 = window->DC.ColumnsStartPos.y;
|
||||||
const float y1 = window->DC.ColumnsStartCursorPos.y;
|
|
||||||
const float y2 = window->DC.CursorPos.y;
|
const float y2 = window->DC.CursorPos.y;
|
||||||
for (int i = 1; i < window->DC.ColumnsCount; i++)
|
for (int i = 1; i < window->DC.ColumnsCount; i++)
|
||||||
{
|
{
|
||||||
@ -5144,11 +5169,15 @@ void ImGui::Columns(int columns_count, const char* id, bool border)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set state for first column
|
||||||
window->DC.ColumnsSetID = window->GetID(id ? id : "");
|
window->DC.ColumnsSetID = window->GetID(id ? id : "");
|
||||||
window->DC.ColumnCurrent = 0;
|
window->DC.ColumnsCurrent = 0;
|
||||||
window->DC.ColumnsCount = columns_count;
|
window->DC.ColumnsCount = columns_count;
|
||||||
window->DC.ColumnsShowBorders = border;
|
window->DC.ColumnsShowBorders = border;
|
||||||
window->DC.ColumnsStartCursorPos = window->DC.CursorPos;
|
window->DC.ColumnsStartPos = window->DC.CursorPos;
|
||||||
|
window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY = window->DC.CursorPos.y;
|
||||||
|
window->DC.ColumnsOffsetX = 0.0f;
|
||||||
|
window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX);
|
||||||
|
|
||||||
if (window->DC.ColumnsCount != 1)
|
if (window->DC.ColumnsCount != 1)
|
||||||
{
|
{
|
||||||
@ -5161,8 +5190,8 @@ void ImGui::TreePush(const char* str_id)
|
|||||||
{
|
{
|
||||||
ImGuiState& g = GImGui;
|
ImGuiState& g = GImGui;
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
window->DC.ColumnStartX += g.Style.TreeNodeSpacing;
|
window->DC.ColumnsStartX += g.Style.TreeNodeSpacing;
|
||||||
window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnStartX;
|
window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX;
|
||||||
window->DC.TreeDepth++;
|
window->DC.TreeDepth++;
|
||||||
PushID(str_id ? str_id : "#TreePush");
|
PushID(str_id ? str_id : "#TreePush");
|
||||||
}
|
}
|
||||||
@ -5171,8 +5200,8 @@ void ImGui::TreePush(const void* ptr_id)
|
|||||||
{
|
{
|
||||||
ImGuiState& g = GImGui;
|
ImGuiState& g = GImGui;
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
window->DC.ColumnStartX += g.Style.TreeNodeSpacing;
|
window->DC.ColumnsStartX += g.Style.TreeNodeSpacing;
|
||||||
window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnStartX;
|
window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX;
|
||||||
window->DC.TreeDepth++;
|
window->DC.TreeDepth++;
|
||||||
PushID(ptr_id ? ptr_id : (const void*)"#TreePush");
|
PushID(ptr_id ? ptr_id : (const void*)"#TreePush");
|
||||||
}
|
}
|
||||||
@ -5181,8 +5210,8 @@ void ImGui::TreePop()
|
|||||||
{
|
{
|
||||||
ImGuiState& g = GImGui;
|
ImGuiState& g = GImGui;
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
window->DC.ColumnStartX -= g.Style.TreeNodeSpacing;
|
window->DC.ColumnsStartX -= g.Style.TreeNodeSpacing;
|
||||||
window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnStartX;
|
window->DC.CursorPos.x = window->Pos.x + window->DC.ColumnsStartX + window->DC.ColumnsOffsetX;
|
||||||
window->DC.TreeDepth--;
|
window->DC.TreeDepth--;
|
||||||
PopID();
|
PopID();
|
||||||
}
|
}
|
||||||
@ -6687,8 +6716,6 @@ void ImGui::ShowTestWindow(bool* open)
|
|||||||
|
|
||||||
if (ImGui::CollapsingHeader("Columns"))
|
if (ImGui::CollapsingHeader("Columns"))
|
||||||
{
|
{
|
||||||
ImGui::TextWrapped("NB: columns are not well supported by all corners of the API so far. Please fill a report on GitHub if you run into issues.");
|
|
||||||
|
|
||||||
ImGui::Columns(4, "data", true);
|
ImGui::Columns(4, "data", true);
|
||||||
ImGui::Text("ID"); ImGui::NextColumn();
|
ImGui::Text("ID"); ImGui::NextColumn();
|
||||||
ImGui::Text("Name"); ImGui::NextColumn();
|
ImGui::Text("Name"); ImGui::NextColumn();
|
||||||
@ -6704,7 +6731,7 @@ void ImGui::ShowTestWindow(bool* open)
|
|||||||
ImGui::Text("0001"); ImGui::NextColumn();
|
ImGui::Text("0001"); ImGui::NextColumn();
|
||||||
ImGui::Text("Stephanie"); ImGui::NextColumn();
|
ImGui::Text("Stephanie"); ImGui::NextColumn();
|
||||||
ImGui::Text("/path/stephanie"); ImGui::NextColumn();
|
ImGui::Text("/path/stephanie"); ImGui::NextColumn();
|
||||||
ImGui::Text("line 1\nline 2"); ImGui::NextColumn(); // two lines!
|
ImGui::Text("line 1"); ImGui::Text("line 2"); ImGui::NextColumn(); // two lines, two items
|
||||||
|
|
||||||
ImGui::Text("0002"); ImGui::NextColumn();
|
ImGui::Text("0002"); ImGui::NextColumn();
|
||||||
ImGui::Text("C64"); ImGui::NextColumn();
|
ImGui::Text("C64"); ImGui::NextColumn();
|
||||||
@ -6716,25 +6743,27 @@ void ImGui::ShowTestWindow(bool* open)
|
|||||||
|
|
||||||
ImGui::Columns(3, "mixed");
|
ImGui::Columns(3, "mixed");
|
||||||
|
|
||||||
// NB: it is may be more efficient to fill all contents of a column and then go to the next one.
|
// Filling all contents of a column
|
||||||
// However for the user it is more likely you want to fill all columns before proceeding to the next item, so this example does that.
|
|
||||||
ImGui::Text("Hello"); ImGui::NextColumn();
|
|
||||||
ImGui::Text("World"); ImGui::NextColumn();
|
|
||||||
ImGui::Text("Hmm..."); ImGui::NextColumn();
|
|
||||||
|
|
||||||
ImGui::Button("Banana"); ImGui::NextColumn();
|
|
||||||
ImGui::Button("Apple"); ImGui::NextColumn();
|
|
||||||
ImGui::Button("Corniflower"); ImGui::NextColumn();
|
|
||||||
|
|
||||||
static int e = 0;
|
static int e = 0;
|
||||||
ImGui::RadioButton("radio a", &e, 0); ImGui::NextColumn();
|
ImGui::Text("Hello");
|
||||||
ImGui::RadioButton("radio b", &e, 1); ImGui::NextColumn();
|
ImGui::Button("Banana");
|
||||||
ImGui::RadioButton("radio c", &e, 2); ImGui::NextColumn();
|
ImGui::RadioButton("radio a", &e, 0);
|
||||||
|
ImGui::NextColumn();
|
||||||
|
|
||||||
// FIXME: Exhibit bug of CurrentLineHeight bleeding between columns
|
ImGui::Text("ImGui");
|
||||||
//if (ImGui::CollapsingHeader("Category A")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
|
ImGui::Button("Apple");
|
||||||
//if (ImGui::CollapsingHeader("Category B")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
|
ImGui::RadioButton("radio b", &e, 1);
|
||||||
//if (ImGui::CollapsingHeader("Category C")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
|
ImGui::Text("An extra line here.");
|
||||||
|
ImGui::NextColumn();
|
||||||
|
|
||||||
|
ImGui::Text("World!");
|
||||||
|
ImGui::Button("Corniflower");
|
||||||
|
ImGui::RadioButton("radio c", &e, 2);
|
||||||
|
ImGui::NextColumn();
|
||||||
|
|
||||||
|
if (ImGui::CollapsingHeader("Category A")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
|
||||||
|
if (ImGui::CollapsingHeader("Category B")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
|
||||||
|
if (ImGui::CollapsingHeader("Category C")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
|
||||||
|
|
||||||
ImGui::Columns(1);
|
ImGui::Columns(1);
|
||||||
|
|
||||||
@ -6749,11 +6778,12 @@ void ImGui::ShowTestWindow(bool* open)
|
|||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
// FIXME: Exhibit bug of CurrentLineHeight bleeding between columns (notice how dragging the columns far left or far right gets your different vertical alignment on the other side)
|
|
||||||
ImGui::Columns(2, "word wrapping");
|
ImGui::Columns(2, "word wrapping");
|
||||||
ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
|
ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
|
||||||
|
ImGui::Text("Hello Left");
|
||||||
ImGui::NextColumn();
|
ImGui::NextColumn();
|
||||||
ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
|
ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
|
||||||
|
ImGui::Text("Hello Right");
|
||||||
ImGui::Columns(1);
|
ImGui::Columns(1);
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
Loading…
Reference in New Issue
Block a user