diff options
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/UI/UI_Templates.cpp | 64 |
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> |