Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions ignis/widgets/scale.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class Scale(Gtk.Scale, BaseWidget):
step=1,
value=20,
on_change=lambda x: print(x.value),
on_release=lambda x: print(x.value),
draw_value=True,
value_pos='top'
)
Expand All @@ -46,6 +47,7 @@ def __init__(self, **kwargs):
)
self._dragging: bool = False
self._on_change: Callable | None = None
self._on_release: Callable | None = None
self.override_enum("value_pos", Gtk.PositionType)
BaseWidget.__init__(self, **kwargs)

Expand Down Expand Up @@ -116,6 +118,17 @@ def on_change(self) -> Callable:
def on_change(self, value: Callable) -> None:
self._on_change = value

@IgnisProperty
def on_release(self) -> Callable:
"""
The function to call when any user action ends.
"""
return self._on_release

@on_release.setter
def on_release(self, value: Callable) -> None:
self._on_release = value

@IgnisProperty
def step(self) -> float:
"""
Expand All @@ -141,6 +154,10 @@ def vertical(self, value: bool) -> None:
else:
self.set_property("orientation", Gtk.Orientation.HORIZONTAL)

def __invoke_on_release(self):
if self.on_release:
self.on_release(self)

def __invoke_on_change(self):
if self._dragging and self.on_change:
self.on_change(self)
Expand All @@ -155,12 +172,14 @@ def __on_button_event(self, controller: Gtk.EventControllerLegacy, *args):
self._dragging = True
case Gdk.EventType.BUTTON_RELEASE | Gdk.EventType.TOUCH_END:
self._dragging = False
self.__invoke_on_release()

def __on_key_press(self, *args):
self._dragging = True

def __on_key_release(self, *args):
self._dragging = False
self.__invoke_on_release()

def __on_scroll(
self, event_controller: Gtk.EventControllerScroll, dx: float, dy: float
Expand All @@ -172,3 +191,4 @@ def __on_scroll(
super().set_value(self.value + self.step)

self._dragging = False
self.__invoke_on_release()