Skip to content

Commit 36895ec

Browse files
authored
Prevent scan autosolve if initiated with multiple GuiScanDialogs (#2682)
1 parent d22b703 commit 36895ec

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

src/screenComponents/scanningDialog.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ GuiScanningDialog::GuiScanningDialog(GuiContainer* owner, string id)
1919
setSize(GuiElement::GuiSizeMax, GuiElement::GuiSizeMax);
2020

2121
box = new GuiPanel(this, id + "_BOX");
22-
box->setSize(500, 545)->setPosition(0, 0, sp::Alignment::Center);
22+
box
23+
->setSize(500.0f, 545.0f)
24+
->setPosition(0.0f, 0.0f, sp::Alignment::Center)
25+
->hide();
2326

2427
signal_label = new GuiLabel(box, id + "_LABEL", tr("scanning", "Electric signature"), 30);
2528
signal_label->addBackground()->setPosition(0, 20, sp::Alignment::TopCenter)->setSize(450, 50);
@@ -111,6 +114,10 @@ void GuiScanningDialog::setupParameters()
111114
{
112115
auto [complexity, depth] = getScanComplexityDepth();
113116

117+
// Reset lock state when setting up new scan parameters
118+
locked = false;
119+
lock_start_time = 0.0f;
120+
114121
for(int n=0; n<max_sliders; n++)
115122
{
116123
if (n < complexity)
@@ -120,12 +127,13 @@ void GuiScanningDialog::setupParameters()
120127
}
121128
box->setSize(500, 265 + 70 * complexity);
122129

123-
for(int n=0; n<max_sliders; n++)
130+
for (int n = 0; n < max_sliders; n++)
124131
{
125-
target[n] = random(0.0, 1.0);
126-
sliders[n]->setValue(random(0.0, 1.0));
127-
while(fabsf(target[n] - sliders[n]->getValue()) < 0.2f)
128-
sliders[n]->setValue(random(0.0, 1.0));
132+
target[n] = random(0.0f, 1.0f);
133+
float slider_value = random(0.0f, 1.0f);
134+
while(fabsf(target[n] - slider_value) < 0.2f)
135+
slider_value = random(0.0f, 1.0f);
136+
sliders[n]->setValue(slider_value);
129137
}
130138
updateSignal();
131139

@@ -153,6 +161,7 @@ void GuiScanningDialog::updateSignal()
153161
float noise = 0.0;
154162
float period = 0.0;
155163
float phase = 0.0;
164+
int visible_slider_count = 0;
156165

157166
for(int n=0; n<max_sliders; n++)
158167
{
@@ -161,9 +170,11 @@ void GuiScanningDialog::updateSignal()
161170
noise += fabsf(target[n] - sliders[n]->getValue());
162171
period += fabsf(target[n] - sliders[n]->getValue());
163172
phase += fabsf(target[n] - sliders[n]->getValue());
173+
visible_slider_count++;
164174
}
165175
}
166-
if (noise < 0.05f && period < 0.05f && phase < 0.05f)
176+
// Only check for lock if there are visible sliders (i.e., scan is active)
177+
if (visible_slider_count > 0 && noise < 0.05f && period < 0.05f && phase < 0.05f)
167178
{
168179
if (!locked)
169180
{

src/screenComponents/signalQualityIndicator.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@ GuiSignalQualityIndicator::GuiSignalQualityIndicator(GuiContainer* owner, string
1313

1414
void GuiSignalQualityIndicator::onDraw(sp::RenderTarget& renderer)
1515
{
16+
int point_count = rect.size.x / 4 - 1;
17+
// Bail if there's not enough space to draw the signal.
18+
if (point_count < 2) return;
19+
1620
renderer.drawStretchedHV(rect, 25.0f, "gui/widget/PanelBackground.png");
1721

18-
int point_count = rect.size.x / 4 - 1;
1922
std::vector<glm::vec2> r;
2023
std::vector<glm::vec2> g;
2124
std::vector<glm::vec2> b;

0 commit comments

Comments
 (0)