Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/toolkit/temposlider.py
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/temposlider.py')
-rw-r--r--toolkit/temposlider.py68
1 files changed, 43 insertions, 25 deletions
diff --git a/toolkit/temposlider.py b/toolkit/temposlider.py
index 44b23d2..d2bf3ad 100644
--- a/toolkit/temposlider.py
+++ b/toolkit/temposlider.py
@@ -14,46 +14,54 @@
# Widget was copy&pasted from TamTam activities
-import gtk
-import rsvg
+import gi
+from gi.repository import Gtk
+from gi.repository import GdkPixbuf
+from gi.repository 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)
slider.connect("button-release-event", self._release_cb)
- self.pack_start(slider, True, True)
- self.pack_end(self._image, False, False)
+ self.pack_start(slider, True, True, 0)
+ self.pack_end(self._image, False, False, 0)
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,20 +69,23 @@ 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))
+ float(iupper-ilower))
- img = map_range(tempo, self.adjustment.lower,
- self.adjustment.upper, 0, 7)
+ img = map_range(tempo, self.adjustment.get_lower(),
+ self.adjustment.get_upper(), 0, 7)
if not self._pixbuf[img]:
- svg = rsvg.Handle(data=IMAGE[img])
+ svg = Rsvg.Handle()
+ svg.new_from_data(IMAGE[img])
self._pixbuf[img] = _from_svg_at_size(handle=svg,
- width=style.STANDARD_ICON_SIZE,
- height=style.STANDARD_ICON_SIZE)
+ width=style.STANDARD_ICON_SIZE,
+ height=style.STANDARD_ICON_SIZE)
self._image.set_from_pixbuf(self._pixbuf[img])
@@ -82,6 +93,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)
@@ -92,24 +104,30 @@ def _from_svg_at_size(filename=None, width=None, height=None, handle=None,
""" import from pixbuf.py """
if not handle:
- handle = rsvg.Handle(filename)
-
- dimensions = handle.get_dimension_data()
- icon_width = dimensions[0]
- icon_height = dimensions[1]
-
- if icon_width != width or icon_height != height:
+ svg = Rsvg.Handle()
+ svg.new_from_file(IMAGE[img])
+
+ dimensions = handle.get_dimensions()
+ icon_width = dimensions.height
+ icon_height = dimensions.width
+
+ if (icon_width != width or icon_height != height) and \
+ icon_width != 0 and icon_height != 0:
+
ratio_width = float(width) / icon_width
ratio_height = float(height) / icon_height
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 +137,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()