aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sword2/controls.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/sword2/controls.cpp b/sword2/controls.cpp
index d8b353bec0..095d814ff6 100644
--- a/sword2/controls.cpp
+++ b/sword2/controls.cpp
@@ -677,6 +677,7 @@ private:
bool _dragging;
int _value, _targetValue;
int _maxValue;
+ int _valueStep;
int _dragOffset;
int posFromValue(int value) {
@@ -689,12 +690,15 @@ private:
public:
Slider(Dialog *parent, Widget *background, int max,
- int x, int y, int w, int h, Widget *base = NULL)
+ int x, int y, int w, int h, int step, Widget *base = NULL)
: Widget(parent, 1), _background(background),
_dragging(false), _value(0), _targetValue(0),
- _maxValue(max) {
+ _maxValue(max), _valueStep(step) {
setHitRect(x, y, w, h);
+ if (_valueStep <= 0)
+ _valueStep = 1;
+
if (base)
linkSurfaceImages(base, x, y);
else
@@ -748,11 +752,15 @@ public:
_dragging = true;
_dragOffset = x - _sprites[0].x;
} else if (x < _sprites[0].x) {
- if (_targetValue > 0)
- _targetValue--;
+ if (_targetValue >= _valueStep)
+ _targetValue -= _valueStep;
+ else
+ _targetValue = 0;
} else {
- if (_targetValue < _maxValue)
- _targetValue++;
+ if (_targetValue < _maxValue - _valueStep)
+ _targetValue += _valueStep;
+ else
+ _targetValue = _maxValue;
}
}
@@ -897,10 +905,12 @@ public:
_fxSwitch->linkSurfaceImages(_musicSwitch, 516, 250);
_fxSwitch->reverseStates();
- _musicSlider = new Slider(this, _panel, SoundMixer::kMaxMixerVolume, 309, 161, 170, 27);
- _speechSlider = new Slider(this, _panel, SoundMixer::kMaxMixerVolume, 309, 208, 170, 27, _musicSlider);
- _fxSlider = new Slider(this, _panel, SoundMixer::kMaxMixerVolume, 309, 254, 170, 27, _musicSlider);
- _gfxSlider = new Slider(this, _panel, 3, 309, 341, 170, 27, _musicSlider);
+ int volStep = SoundMixer::kMaxMixerVolume / 10;
+
+ _musicSlider = new Slider(this, _panel, SoundMixer::kMaxMixerVolume, 309, 161, 170, 27, volStep);
+ _speechSlider = new Slider(this, _panel, SoundMixer::kMaxMixerVolume, 309, 208, 170, 27, volStep, _musicSlider);
+ _fxSlider = new Slider(this, _panel, SoundMixer::kMaxMixerVolume, 309, 254, 170, 27, volStep, _musicSlider);
+ _gfxSlider = new Slider(this, _panel, 3, 309, 341, 170, 27, 1, _musicSlider);
_gfxPreview = new Widget(this, 4);
_gfxPreview->createSurfaceImages(256, 495, 310);