Skip to content

Commit 92f73dd

Browse files
authored
DPL GUI: Fix activity display (#14916)
1 parent 303fbca commit 92f73dd

File tree

1 file changed

+31
-29
lines changed

1 file changed

+31
-29
lines changed

Framework/GUISupport/src/FrameworkGUIDataRelayerUsage.cxx

Lines changed: 31 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,19 +75,22 @@ 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
}
9090
}
91+
if (active) {
92+
break;
93+
}
9194
}
9295
drawList->PrimRect(
9396
xOffset + yOffset + winPos,
@@ -96,47 +99,46 @@ struct HeatMapHelper {
9699
}
97100

98101
// display the grid
99-
size_t recordsWindow = v * WND;
100102
auto boxSizeX = std::min(size.x / WND, MAX_BOX_X_SIZE);
101-
auto numInputs = getNumInputs();
103+
auto boxSizeY = std::min(size.y / getNumInputs(), MAX_BOX_Y_SIZE);
104+
102105
winPos = ImGui::GetCursorScreenPos() + ImVec2{0, 7};
103-
ImGui::InvisibleButton("sensible area", ImVec2(size.x, size.y));
106+
ImGui::InvisibleButton("sensitive area", ImVec2(size.x, size.y));
104107
if (ImGui::IsItemHovered()) {
105108
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));
109+
auto slot = (v - 1) * WND + std::lround(std::trunc(pos.x / boxSizeX));
110+
auto row = std::lround(std::trunc(pos.y / boxSizeY));
108111
describeCell(row, slot);
109112
}
110113

114+
// background
111115
drawList->AddRectFilled(
112116
ImVec2(0., 0.) + winPos,
113117
ImVec2{size.x, size.y} + winPos,
114118
BACKGROUND_COLOR);
119+
// border
115120
drawList->AddRect(
116121
ImVec2(0. - 1, -1) + winPos,
117122
ImVec2{size.x + 1, size.y - 1} + winPos,
118123
BORDER_COLOR);
119124

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++) {
125+
// heatmap
126+
size_t totalPrims = WND * getNumInputs();
127+
drawList->PrimReserve(totalPrims * 6, totalPrims * 4);
128+
for (size_t ri = (v - 1) * WND; ri < (((size_t)(v)*WND > getNumRecords()) ? getNumRecords() : v * WND); ++ri) {
128129
auto record = getRecord(ri);
129-
ImVec2 xOffset{((ri - (v - 1) * WND) * boxSizeX) + padding, 0};
130+
ImVec2 xOffset{((float)(ri - (v - 1) * WND) * boxSizeX) + padding, 0};
130131
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};
132+
133+
for (auto mi = 0U; mi < getNumItems(record); mi++) {
134+
ImVec2 yOffSet{0, ((float)mi * boxSizeY) + padding};
135135
ImVec2 ySize{0, boxSizeY - 2 * padding};
136136

137+
ImVec2 A = xOffset + yOffSet + winPos;
138+
ImVec2 B = xOffset + xSize + yOffSet + ySize + winPos;
139+
137140
drawList->PrimRect(
138-
xOffset + yOffSet + winPos,
139-
xOffset + xSize + yOffSet + ySize + winPos,
141+
A, B,
140142
getColor(getValue(*getItem(record, mi))));
141143
}
142144
}

0 commit comments

Comments
 (0)