From 3f792924ddf4dba301d06e496ac6e29296fbd4e9 Mon Sep 17 00:00:00 2001 From: flavio Date: Fri, 09 Nov 2012 23:58:22 +0000 Subject: Gtk 3 Port Base --- (limited to 'toolkit/temposlider.py') 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() -- cgit v0.9.1