diff options
Diffstat (limited to 'toolkit/temposlider.py')
-rw-r--r-- | toolkit/temposlider.py | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/toolkit/temposlider.py b/toolkit/temposlider.py index 44b23d2..d8e633d 100644 --- a/toolkit/temposlider.py +++ b/toolkit/temposlider.py @@ -14,30 +14,35 @@ # Widget was copy&pasted from TamTam activities -import gtk +import gi +from gi.repository import Gtk +from gi.repository import GdkPixbuf + import rsvg import cairo -from sugar.graphics import style +from sugar3.graphics import style -class TempoSlider(gtk.HBox): +class TempoSlider(Gtk.HBox): + def __init__(self, min_value, max_value): - gtk.HBox.__init__(self) + + Gtk.HBox.__init__(self) self._pixbuf = [None] * 8 - self._image = gtk.Image() + self._image = Gtk.Image() self._image.show() # used to store tempo updates while the slider is active self._delayed = 0 self._active = False - self.adjustment = gtk.Adjustment(min_value, min_value, max_value, - (max_value - min_value) / 8, (max_value - min_value) / 8, 0) + self.adjustment = Gtk.Adjustment(min_value, min_value, max_value, + (max_value - min_value) / 8, (max_value - min_value) / 8, 0) self._adjustment_h = self.adjustment.connect('value-changed', self._changed_cb) - slider = gtk.HScale(adjustment = self.adjustment) + slider = Gtk.HScale(adjustment = self.adjustment) slider.show() slider.set_draw_value(False) slider.connect("button-press-event", self._press_cb) @@ -47,13 +52,16 @@ class TempoSlider(gtk.HBox): self.pack_end(self._image, False, False) def set_value(self, tempo, quiet = False): + if self._active: self._delayed = tempo + elif quiet: self.adjustment.handler_block(self._adjustment_h) self.adjustment.set_value(tempo) self._update(tempo) self.adjustment.handler_unblock(self._adjustment_h) + else: self.adjustment.set_value(tempo) @@ -61,9 +69,11 @@ class TempoSlider(gtk.HBox): self._update(widget.get_value()) def _update(self, tempo): + def map_range(value, ilower, iupper, olower, oupper): if value == iupper: return oupper + return olower + int((oupper-olower+1) * (value-ilower) / float(iupper-ilower)) @@ -82,6 +92,7 @@ class TempoSlider(gtk.HBox): self._active = True def _release_cb(self, widget, event): + self._active = False if self._delayed != 0: self.set_value(self._delayed, True) @@ -104,12 +115,15 @@ def _from_svg_at_size(filename=None, width=None, height=None, handle=None, if keep_ratio: ratio = min(ratio_width, ratio_height) + if ratio_width != ratio: ratio_width = ratio width = int(icon_width * ratio) + elif ratio_height != ratio: ratio_height = ratio height = int(icon_height * ratio) + else: ratio_width = 1 ratio_height = 1 @@ -119,7 +133,7 @@ def _from_svg_at_size(filename=None, width=None, height=None, handle=None, context.scale(ratio_width, ratio_height) handle.render_cairo(context) - loader = gtk.gdk.pixbuf_loader_new_with_mime_type('image/png') + loader = GdkPixbuf.PixbufLoader.new_with_mime_type('image/png') surface.write_to_png(loader) loader.close() |