aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/UI/UI_Templates.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/core/src/UI/UI_Templates.cpp b/core/src/UI/UI_Templates.cpp
index e140add..182cfa4 100644
--- a/core/src/UI/UI_Templates.cpp
+++ b/core/src/UI/UI_Templates.cpp
@@ -53,6 +53,14 @@ private:
};
std::vector<UIArrayGroup> mUIArrayGroups;
+ struct Sizer
+ {
+ bool Hovered = false;
+ bool Held = false;
+ };
+ std::vector<Sizer> mRowSizers;
+ std::vector<Sizer> mColSizers;
+
/* Selection range */
Vec2i mSelectionTL;
Vec2i mSelectionBR;
@@ -165,6 +173,8 @@ public:
mTable->Resize(width, height);
mUICells.resize(width * height);
mUIArrayGroups.resize(mTable->GetArrayGroupCount());
+ mRowSizers.resize(width);
+ mColSizers.resize(height);
for (size_t i = 0; i < mUIArrayGroups.size(); ++i) {
auto& ag = mTable->GetArrayGroup(i);
@@ -543,6 +553,8 @@ private:
auto navHighlight = ImGui::GetColorU32(ImGuiCol_NavHighlight);
+ auto initialCursorPos = ImGui::GetCurrentWindow()->DC.CursorPos;
+
int colCount = mTable->GetTableWidth();
int rowCount = mTable->GetTableHeight();
for (int rowIdx = 0; rowIdx < rowCount; ++rowIdx) {
@@ -656,6 +668,58 @@ private:
uag.Pos + uag.Size + ImVec2(1, 1),
kArrayGroupOutline);
}
+
+ // Display row/column sizers
+
+ if (true) { // TODO add shortcut
+ constexpr int kLongEdge = 24;
+ constexpr int kShortEdge = 10;
+
+ auto window = ImGui::GetCurrentWindow();
+ auto spacing = ImGui::GetStyle().ItemSpacing;
+
+ auto regularColor = ImGui::GetColorU32(ImGuiCol_Button);
+ auto hoveredColor = ImGui::GetColorU32(ImGuiCol_ButtonHovered);
+ auto activeColor = ImGui::GetColorU32(ImGuiCol_ButtonActive);
+
+ auto GetColor = [&](const Sizer& sizer) -> ImU32 {
+ if (sizer.Held) {
+ return activeColor;
+ } else if (sizer.Hovered) {
+ return hoveredColor;
+ } else {
+ return regularColor;
+ }
+ };
+
+ int x = 0;
+ for (int ix = 0; ix < mTable->GetTableWidth(); ++ix) {
+ x += mTable->GetColumnWidth(ix);
+
+ auto& sizer = mColSizers[ix];
+ int middle = x + spacing.x / 2;
+ window->DrawList->AddRectFilled(
+ initialCursorPos + ImVec2(middle - kShortEdge / 2, 0),
+ initialCursorPos + ImVec2(middle + kShortEdge / 2, 0 + kLongEdge),
+ GetColor(sizer));
+
+ x += spacing.x;
+ }
+
+ int y = 0;
+ for (int iy = 0; iy < mTable->GetTableHeight(); ++iy) {
+ y += mTable->GetRowHeight(iy);
+
+ auto& sizer = mRowSizers[iy];
+ int middle = y + spacing.y / 2;
+ window->DrawList->AddRectFilled(
+ initialCursorPos + ImVec2(middle - kShortEdge / 2, 0),
+ initialCursorPos + ImVec2(middle + kShortEdge / 2, 0 + kLongEdge),
+ GetColor(sizer));
+
+ y += spacing.y;
+ }
+ }
}
template <class TFunction>