mirror of
https://github.com/Drezil/imgui.git
synced 2024-12-25 17:16:35 +00:00
This commit is contained in:
parent
a9009b133c
commit
4ca34a879d
29
imgui.cpp
29
imgui.cpp
@ -410,6 +410,7 @@
|
|||||||
- window: get size/pos helpers given names (see discussion in #249)
|
- window: get size/pos helpers given names (see discussion in #249)
|
||||||
- window: a collapsed window can be stuck behind the main menu bar?
|
- window: a collapsed window can be stuck behind the main menu bar?
|
||||||
- window: detect extra End() call that pop the "Debug" window out and assert at call site instead of later.
|
- window: detect extra End() call that pop the "Debug" window out and assert at call site instead of later.
|
||||||
|
- draw-list: maintaining bounding box per command would allow to merge draw command when clipping isn't relied on (typical non-scrolling window or non-overflowing column would merge with previous command).
|
||||||
!- scrolling: allow immediately effective change of scroll if we haven't appended items yet
|
!- scrolling: allow immediately effective change of scroll if we haven't appended items yet
|
||||||
- splitter: formalize the splitter idiom into an official api (we want to handle n-way split)
|
- splitter: formalize the splitter idiom into an official api (we want to handle n-way split)
|
||||||
- widgets: display mode: widget-label, label-widget (aligned on column or using fixed size), label-newline-tab-widget etc.
|
- widgets: display mode: widget-label, label-widget (aligned on column or using fixed size), label-newline-tab-widget etc.
|
||||||
@ -8718,6 +8719,7 @@ void ImGui::NextColumn()
|
|||||||
window->DC.ColumnsCellMaxY = ImMax(window->DC.ColumnsCellMaxY, window->DC.CursorPos.y);
|
window->DC.ColumnsCellMaxY = ImMax(window->DC.ColumnsCellMaxY, window->DC.CursorPos.y);
|
||||||
if (++window->DC.ColumnsCurrent < window->DC.ColumnsCount)
|
if (++window->DC.ColumnsCurrent < window->DC.ColumnsCount)
|
||||||
{
|
{
|
||||||
|
// Columns 1+ cancel out IndentX
|
||||||
window->DC.ColumnsOffsetX = ImGui::GetColumnOffset(window->DC.ColumnsCurrent) - window->DC.IndentX + g.Style.ItemSpacing.x;
|
window->DC.ColumnsOffsetX = ImGui::GetColumnOffset(window->DC.ColumnsCurrent) - window->DC.IndentX + g.Style.ItemSpacing.x;
|
||||||
window->DrawList->ChannelsSetCurrent(window->DC.ColumnsCurrent);
|
window->DrawList->ChannelsSetCurrent(window->DC.ColumnsCurrent);
|
||||||
}
|
}
|
||||||
@ -8734,7 +8736,7 @@ void ImGui::NextColumn()
|
|||||||
window->DC.CurrentLineTextBaseOffset = 0.0f;
|
window->DC.CurrentLineTextBaseOffset = 0.0f;
|
||||||
|
|
||||||
PushColumnClipRect();
|
PushColumnClipRect();
|
||||||
ImGui::PushItemWidth(ImGui::GetColumnWidth() * 0.65f); // FIXME
|
ImGui::PushItemWidth(ImGui::GetColumnWidth() * 0.65f); // FIXME: Move on columns setup
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8779,33 +8781,24 @@ float ImGui::GetColumnOffset(int column_index)
|
|||||||
return GetDraggedColumnOffset(column_index);
|
return GetDraggedColumnOffset(column_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read from cache
|
|
||||||
IM_ASSERT(column_index < window->DC.ColumnsData.Size);
|
IM_ASSERT(column_index < window->DC.ColumnsData.Size);
|
||||||
const float t = window->DC.ColumnsData[column_index].OffsetNorm;
|
const float t = window->DC.ColumnsData[column_index].OffsetNorm;
|
||||||
|
const float x_offset = window->DC.ColumnsMinX + t * (window->DC.ColumnsMaxX - window->DC.ColumnsMinX);
|
||||||
const float content_region_width = window->SizeContentsExplicit.x ? window->SizeContentsExplicit.x : window->Size.x;
|
return (float)(int)x_offset;
|
||||||
const float min_x = window->DC.IndentX;
|
|
||||||
const float max_x = content_region_width - window->Scroll.x - ((window->Flags & ImGuiWindowFlags_NoScrollbar) ? 0.0f : g.Style.ScrollbarSize);// - window->WindowPadding().x;
|
|
||||||
const float x = min_x + t * (max_x - min_x);
|
|
||||||
return (float)(int)x;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::SetColumnOffset(int column_index, float offset)
|
void ImGui::SetColumnOffset(int column_index, float offset)
|
||||||
{
|
{
|
||||||
ImGuiState& g = *GImGui;
|
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
if (column_index < 0)
|
if (column_index < 0)
|
||||||
column_index = window->DC.ColumnsCurrent;
|
column_index = window->DC.ColumnsCurrent;
|
||||||
|
|
||||||
IM_ASSERT(column_index < window->DC.ColumnsData.Size);
|
IM_ASSERT(column_index < window->DC.ColumnsData.Size);
|
||||||
const ImGuiID column_id = window->DC.ColumnsSetID + ImGuiID(column_index);
|
const float t = (offset - window->DC.ColumnsMinX) / (window->DC.ColumnsMaxX - window->DC.ColumnsMinX);
|
||||||
|
|
||||||
const float content_region_width = window->SizeContentsExplicit.x ? window->SizeContentsExplicit.x : window->Size.x;
|
|
||||||
const float min_x = window->DC.IndentX;
|
|
||||||
const float max_x = content_region_width - window->Scroll.x - ((window->Flags & ImGuiWindowFlags_NoScrollbar) ? 0 : g.Style.ScrollbarSize);// - window->WindowPadding().x;
|
|
||||||
const float t = (offset - min_x) / (max_x - min_x);
|
|
||||||
window->DC.StateStorage->SetFloat(column_id, t);
|
|
||||||
window->DC.ColumnsData[column_index].OffsetNorm = t;
|
window->DC.ColumnsData[column_index].OffsetNorm = t;
|
||||||
|
|
||||||
|
const ImGuiID column_id = window->DC.ColumnsSetID + ImGuiID(column_index);
|
||||||
|
window->DC.StateStorage->SetFloat(column_id, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
float ImGui::GetColumnWidth(int column_index)
|
float ImGui::GetColumnWidth(int column_index)
|
||||||
@ -8891,6 +8884,10 @@ void ImGui::Columns(int columns_count, const char* id, bool border)
|
|||||||
window->DC.ColumnsCurrent = 0;
|
window->DC.ColumnsCurrent = 0;
|
||||||
window->DC.ColumnsCount = columns_count;
|
window->DC.ColumnsCount = columns_count;
|
||||||
window->DC.ColumnsShowBorders = border;
|
window->DC.ColumnsShowBorders = border;
|
||||||
|
|
||||||
|
const float content_region_width = window->SizeContentsExplicit.x ? window->SizeContentsExplicit.x : window->Size.x;
|
||||||
|
window->DC.ColumnsMinX = window->DC.IndentX; // Lock our horizontal range
|
||||||
|
window->DC.ColumnsMaxX = content_region_width - window->Scroll.x - ((window->Flags & ImGuiWindowFlags_NoScrollbar) ? 0 : g.Style.ScrollbarSize);// - window->WindowPadding().x;
|
||||||
window->DC.ColumnsStartPosY = window->DC.CursorPos.y;
|
window->DC.ColumnsStartPosY = window->DC.CursorPos.y;
|
||||||
window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY = window->DC.CursorPos.y;
|
window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY = window->DC.CursorPos.y;
|
||||||
window->DC.ColumnsOffsetX = 0.0f;
|
window->DC.ColumnsOffsetX = 0.0f;
|
||||||
|
@ -536,6 +536,8 @@ struct IMGUI_API ImGuiDrawContext
|
|||||||
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.
|
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 ColumnsCurrent;
|
||||||
int ColumnsCount;
|
int ColumnsCount;
|
||||||
|
float ColumnsMinX;
|
||||||
|
float ColumnsMaxX;
|
||||||
float ColumnsStartPosY;
|
float ColumnsStartPosY;
|
||||||
float ColumnsCellMinY;
|
float ColumnsCellMinY;
|
||||||
float ColumnsCellMaxY;
|
float ColumnsCellMaxY;
|
||||||
@ -568,6 +570,7 @@ struct IMGUI_API ImGuiDrawContext
|
|||||||
ColumnsOffsetX = 0.0f;
|
ColumnsOffsetX = 0.0f;
|
||||||
ColumnsCurrent = 0;
|
ColumnsCurrent = 0;
|
||||||
ColumnsCount = 1;
|
ColumnsCount = 1;
|
||||||
|
ColumnsMinX = ColumnsMaxX = 0.0f;
|
||||||
ColumnsStartPosY = 0.0f;
|
ColumnsStartPosY = 0.0f;
|
||||||
ColumnsCellMinY = ColumnsCellMaxY = 0.0f;
|
ColumnsCellMinY = ColumnsCellMaxY = 0.0f;
|
||||||
ColumnsShowBorders = true;
|
ColumnsShowBorders = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user