Skip to content

Commit 069861b

Browse files
authored
Merge pull request #2655 from csd4ni3l/csd4ni3l-add-uislider-step
Add step argument to UISliders
2 parents c98afc3 + c1d6edb commit 069861b

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

arcade/gui/widgets/slider.py

+17-3
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class UIBaseSlider(UIInteractiveWidget, metaclass=ABCMeta):
4747
size_hint_min: Minimum size hint of the slider.
4848
size_hint_max: Maximum size hint of the slider.
4949
style: Used to style the slider for different states.
50+
step: Smallest change the slider value can move by.
5051
**kwargs: Passed to UIInteractiveWidget.
5152
5253
"""
@@ -67,6 +68,7 @@ def __init__(
6768
size_hint_min=None,
6869
size_hint_max=None,
6970
style: Union[Mapping[str, UISliderStyle], None] = None,
71+
step: Union[float, None] = None,
7072
**kwargs,
7173
):
7274
super().__init__(
@@ -81,7 +83,8 @@ def __init__(
8183
**kwargs,
8284
)
8385

84-
self.value = value
86+
self.step = step
87+
self.value = self._apply_step(value)
8588
self.min_value = min_value
8689
self.max_value = max_value
8790

@@ -95,6 +98,13 @@ def __init__(
9598

9699
self.register_event_type("on_change")
97100

101+
def _apply_step(self, value: float):
102+
if self.step:
103+
inverse = 1 / self.step
104+
return round(value * inverse) / inverse
105+
106+
return value
107+
98108
def _x_for_value(self, value: float):
99109
"""Provides the x coordinate for the given value."""
100110

@@ -110,7 +120,9 @@ def norm_value(self):
110120
@norm_value.setter
111121
def norm_value(self, value):
112122
"""Normalized value between 0.0 and 1.0"""
113-
self.value = min(value * (self.max_value - self.min_value) + self.min_value, self.max_value)
123+
self.value = self._apply_step(
124+
min(value * (self.max_value - self.min_value) + self.min_value, self.max_value)
125+
)
114126

115127
@property
116128
def _thumb_x(self):
@@ -254,7 +266,7 @@ class UISlider(UIStyledWidget[UISliderStyle], UIBaseSlider):
254266
width: Width of the slider.
255267
height: Height of the slider.
256268
style: Used to style the slider for different states.
257-
269+
step: Smallest change the slider value can move by.
258270
"""
259271

260272
UIStyle = UISliderStyle
@@ -294,6 +306,7 @@ def __init__(
294306
size_hint_min=None,
295307
size_hint_max=None,
296308
style: Union[dict[str, UISliderStyle], None] = None,
309+
step: Union[float, None] = None,
297310
**kwargs,
298311
):
299312
super().__init__(
@@ -308,6 +321,7 @@ def __init__(
308321
size_hint_min=size_hint_min,
309322
size_hint_max=size_hint_max,
310323
style=style or UISlider.DEFAULT_STYLE,
324+
step=step,
311325
**kwargs,
312326
)
313327

0 commit comments

Comments
 (0)