Skip to content

Commit f17528e

Browse files
committed
Engine: fix weird Slider's MaxValue increment if = MinValue
+ allow set free min and max values surpassing opposite range, clamping the range in case it becomes invalid.
1 parent c626d85 commit f17528e

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

Common/gui/guislider.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ void GUISlider::SetMinValue(int minval)
3535
if (_minValue != minval)
3636
{
3737
_minValue = minval;
38+
_maxValue = std::max(_minValue, _maxValue);
3839
_value = Math::Clamp(_value, _minValue, _maxValue);
3940
MarkChanged();
4041
}
@@ -45,6 +46,7 @@ void GUISlider::SetMaxValue(int maxval)
4546
if (_maxValue != maxval)
4647
{
4748
_maxValue = maxval;
49+
_minValue = std::min(_minValue, _maxValue);
4850
_value = Math::Clamp(_value, _minValue, _maxValue);
4951
MarkChanged();
5052
}
@@ -122,11 +124,6 @@ void GUISlider::UpdateMetrics()
122124
assert(GUI::Context.Spriteset);
123125
SpriteCache &spriteset = *GUI::Context.Spriteset;
124126

125-
// Clamp value
126-
// TODO: this is necessary here because some Slider fields are still public
127-
if (_minValue >= _maxValue)
128-
_maxValue = _minValue + 1;
129-
_value = Math::Clamp(_value, _minValue, _maxValue);
130127
// Test if sprite is available; // TODO: return a placeholder from spriteset instead!
131128
const int handle_im = ((_handleImage > 0) && spriteset.DoesSpriteExist(_handleImage)) ? _handleImage : 0;
132129

@@ -329,6 +326,11 @@ void GUISlider::ReadFromFile(Stream *in, GuiVersion gui_version)
329326
_cachedHandle = Rect();
330327
_handleRange = 0;
331328

329+
// Clamp value range, in case the data is wrong
330+
_maxValue = std::max(_minValue, _maxValue);
331+
_minValue = std::min(_minValue, _maxValue);
332+
_value = Math::Clamp(_value, _minValue, _maxValue);
333+
332334
//UpdateMetrics();
333335
//UpdateGraphicSpace(); // can't do here, because sprite infos may not be loaded yet
334336
}
@@ -359,6 +361,11 @@ void GUISlider::ReadFromSavegame(Stream *in, GuiSvgVersion svg_ver)
359361
_cachedHandle = Rect();
360362
_handleRange = 0;
361363

364+
// Clamp value range, in case the data is wrong
365+
_maxValue = std::max(_minValue, _maxValue);
366+
_minValue = std::min(_minValue, _maxValue);
367+
_value = Math::Clamp(_value, _minValue, _maxValue);
368+
362369
UpdateMetrics();
363370
UpdateGraphicSpace();
364371
}

Engine/ac/slider.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,11 @@
1313
//=============================================================================
1414
#include "ac/slider.h"
1515
#include "ac/common.h"
16+
#include "debug/debug_log.h"
1617

1718
using namespace AGS::Common;
1819

1920
void Slider_SetMax(GUISlider *guisl, int valn) {
20-
21-
if (guisl->GetMinValue() > valn)
22-
quit("!Slider.Max: minimum cannot be greater than maximum");
23-
2421
guisl->SetMaxValue(valn);
2522
}
2623

@@ -29,9 +26,6 @@ int Slider_GetMax(GUISlider *guisl) {
2926
}
3027

3128
void Slider_SetMin(GUISlider *guisl, int valn) {
32-
if (valn > guisl->GetMaxValue())
33-
quit("!Slider.Min: minimum cannot be greater than maximum");
34-
3529
guisl->SetMinValue(valn);
3630
}
3731

0 commit comments

Comments
 (0)