Skip to content

Commit 66c1f75

Browse files
committed
DPL: adjust heatmap display in GUI
1 parent cdb610c commit 66c1f75

File tree

1 file changed

+28
-29
lines changed

1 file changed

+28
-29
lines changed

Framework/GUISupport/src/FrameworkGUIDataRelayerUsage.cxx

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@ struct HeatMapHelper {
4343
{
4444
float padding = 1;
4545
// add slider to scroll between the grid display windows
46-
size_t nw = getNumRecords() / WND;
46+
size_t nw = getNumRecords() < WND? 1 : getNumRecords() / WND;
4747
ImGui::PushItemWidth(sizeHint.x);
4848
ImGui::SliderInt("##window", &v, 1, nw, "wnd: %d", ImGuiSliderFlags_AlwaysClamp);
4949
ImVec2 sliderMin = ImGui::GetItemRectMin();
5050

5151
constexpr float MAX_BOX_X_SIZE = 16.f;
5252
constexpr float MAX_BOX_Y_SIZE = 16.f;
5353

54-
ImVec2 size = ImVec2(sizeHint.x, std::min(sizeHint.y, MAX_BOX_Y_SIZE * getNumItems(0) + 2));
54+
ImVec2 size = ImVec2(sizeHint.x, std::min(sizeHint.y, MAX_BOX_Y_SIZE * getNumInputs() + 2));
5555
ImU32 BORDER_COLOR = ImColor(200, 200, 200, 255);
5656
ImU32 BACKGROUND_COLOR = ImColor(20, 20, 20, 255);
5757
ImU32 BORDER_COLOR_A = ImColor(200, 200, 200, 0);
@@ -75,15 +75,15 @@ struct HeatMapHelper {
7575
const static auto colorE = ImColor(ImVec4{0, 0, 0, 0});
7676

7777
drawList->PrimReserve(nw * 6, nw * 4);
78-
for (size_t iw = 0; iw < nw; ++iw) {
79-
ImVec2 xOffset{iw * xsz + 2 * padding, 0};
78+
for (size_t iw = 1; iw <= nw; ++iw) {
79+
ImVec2 xOffset{(iw - 1) * xsz + 2 * padding, 0};
8080
ImVec2 xSize{xsz - 2 * padding, 0};
8181
ImVec2 yOffset{0, 2 * padding};
82-
ImVec2 ySize{0, 16 - 4 * padding};
83-
bool active = 0;
84-
for (size_t ir = iw; ir < ((iw + WND > getNumRecords()) ? getNumRecords() : iw + WND); ++ir) {
85-
for (size_t i = 0; i < getNumItems(ir); ++i) {
86-
active = getValue(*getItem(ir, i)) > 0;
82+
ImVec2 ySize{0, MAX_BOX_Y_SIZE - 4 * padding};
83+
bool active = false;
84+
for (size_t ir = (iw - 1) * WND; ir < ((iw * WND > getNumRecords()) ? getNumRecords() : iw * WND); ++ir) {
85+
for (size_t i = 0; i < getNumItems(getRecord(ir)); ++i) {
86+
active = getValue(*getItem(getRecord(ir), i)) > 0;
8787
if (active) {
8888
break;
8989
}
@@ -96,47 +96,46 @@ struct HeatMapHelper {
9696
}
9797

9898
// display the grid
99-
size_t recordsWindow = v * WND;
10099
auto boxSizeX = std::min(size.x / WND, MAX_BOX_X_SIZE);
101-
auto numInputs = getNumInputs();
100+
auto boxSizeY = std::min(size.y / getNumInputs(), MAX_BOX_Y_SIZE);
101+
102102
winPos = ImGui::GetCursorScreenPos() + ImVec2{0, 7};
103-
ImGui::InvisibleButton("sensible area", ImVec2(size.x, size.y));
103+
ImGui::InvisibleButton("sensitive area", ImVec2(size.x, size.y));
104104
if (ImGui::IsItemHovered()) {
105105
auto pos = ImGui::GetMousePos() - winPos;
106-
auto slot = (v - 1) * WND + std::lround(std::trunc(pos.x / size.x * WND));
107-
auto row = std::lround(std::trunc(pos.y / size.y * numInputs));
106+
auto slot = (v - 1) * WND + std::lround(std::trunc(pos.x / boxSizeX));
107+
auto row = std::lround(std::trunc(pos.y / boxSizeY));
108108
describeCell(row, slot);
109109
}
110110

111+
// background
111112
drawList->AddRectFilled(
112113
ImVec2(0., 0.) + winPos,
113114
ImVec2{size.x, size.y} + winPos,
114115
BACKGROUND_COLOR);
116+
// border
115117
drawList->AddRect(
116118
ImVec2(0. - 1, -1) + winPos,
117119
ImVec2{size.x + 1, size.y - 1} + winPos,
118120
BORDER_COLOR);
119121

120-
size_t totalRects = 0;
121-
for (size_t ri = (v - 1) * WND; ri < recordsWindow; ri++) {
122-
auto record = getRecord(ri);
123-
totalRects += getNumItems(record);
124-
}
125-
126-
drawList->PrimReserve(totalRects * 6, totalRects * 4);
127-
for (size_t ri = (v - 1) * WND; ri < recordsWindow; ri++) {
122+
// heatmap
123+
size_t totalPrims = WND * getNumInputs();
124+
drawList->PrimReserve(totalPrims * 6, totalPrims * 4);
125+
for (size_t ri = (v - 1) * WND; ri < (((size_t)(v) * WND > getNumRecords()) ? getNumRecords() : v * WND); ++ri) {
128126
auto record = getRecord(ri);
129-
ImVec2 xOffset{((ri - (v - 1) * WND) * boxSizeX) + padding, 0};
127+
ImVec2 xOffset{((float)(ri - (v - 1) * WND) * boxSizeX) + padding, 0};
130128
ImVec2 xSize{boxSizeX - 2 * padding, 0};
131-
auto me = getNumItems(record);
132-
auto boxSizeY = std::min(size.y / me, MAX_BOX_Y_SIZE);
133-
for (size_t mi = 0; mi < me; mi++) {
134-
ImVec2 yOffSet{0, (mi * boxSizeY) + padding};
129+
130+
for (auto mi = 0U; mi < getNumItems(record); mi++) {
131+
ImVec2 yOffSet{0, ((float)mi * boxSizeY) + padding};
135132
ImVec2 ySize{0, boxSizeY - 2 * padding};
136133

134+
ImVec2 A = xOffset + yOffSet + winPos;
135+
ImVec2 B = xOffset + xSize + yOffSet + ySize + winPos;
136+
137137
drawList->PrimRect(
138-
xOffset + yOffSet + winPos,
139-
xOffset + xSize + yOffSet + ySize + winPos,
138+
A, B,
140139
getColor(getValue(*getItem(record, mi))));
141140
}
142141
}

0 commit comments

Comments
 (0)