From 8e33a6d00c1f2f46ebbf8aab11d18ed0ad2348e5 Mon Sep 17 00:00:00 2001 From: Agustin Zubiaga Date: Sat, 18 Aug 2012 01:05:09 +0000 Subject: Initial commit --- diff --git a/PortfolioActivity.py b/PortfolioActivity.py index 193c4f0..0291992 100644 --- a/PortfolioActivity.py +++ b/PortfolioActivity.py @@ -11,8 +11,9 @@ # Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import Gdk +from gi.repository import GObject import subprocess import os import time @@ -21,28 +22,23 @@ from shutil import copyfile from math import sqrt, ceil -from sugar.activity import activity -from sugar import profile -try: - from sugar.graphics.toolbarbox import ToolbarBox - HAVE_TOOLBOX = True -except ImportError: - HAVE_TOOLBOX = False +from sugar3.activity import activity +from sugar3 import profile -if HAVE_TOOLBOX: - from sugar.activity.widgets import ActivityToolbarButton - from sugar.activity.widgets import StopButton - from sugar.graphics.toolbarbox import ToolbarButton +from sugar3.graphics.toolbarbox import ToolbarBox +from sugar3.activity.widgets import ActivityToolbarButton +from sugar3.activity.widgets import StopButton +from sugar3.graphics.toolbarbox import ToolbarButton -from sugar.datastore import datastore -from sugar.graphics.alert import Alert +from sugar3.datastore import datastore +from sugar3.graphics.alert import Alert from sprites import Sprites, Sprite from exportpdf import save_pdf from utils import get_path, lighter_color, svg_str_to_pixbuf, svg_rectangle, \ play_audio_from_file, get_pixbuf_from_journal, genblank, get_hardware, \ pixbuf_to_base64, base64_to_pixbuf, get_pixbuf_from_file - + from toolbar_utils import radio_factory, button_factory, separator_factory, \ combo_factory, label_factory from grecord import Grecord @@ -53,35 +49,26 @@ import logging _logger = logging.getLogger("portfolio-activity") try: - from sugar.graphics import style + from sugar3.graphics import style GRID_CELL_SIZE = style.GRID_CELL_SIZE except ImportError: GRID_CELL_SIZE = 0 -try: - _OLD_SUGAR_SYSTEM = False - import json - from json import load as jload - from json import dump as jdump -except(ImportError, AttributeError): - try: - import simplejson as json - from simplejson import load as jload - from simplejson import dump as jdump - except ImportError: - _OLD_SUGAR_SYSTEM = True +import json +from json import load as jload +from json import dump as jdump from StringIO import StringIO import telepathy from dbus.service import signal from dbus.gobject_service import ExportedGObject -from sugar.presence import presenceservice -from sugar.presence.tubeconn import TubeConnection +from sugar3.presence import presenceservice +from sugar3.presence.tubeconn import TubeConnection -SERVICE = 'org.sugarlabs.PortfolioActivity' +SERVICE = 'org.sugar3labs.PortfolioActivity' IFACE = SERVICE -PATH = '/org/sugarlabs/PortfolioActivity' +PATH = '/org/sugar3labs/PortfolioActivity' # Size and position of title, preview image, and description PREVIEWW = 600 @@ -177,9 +164,9 @@ class PortfolioActivity(activity.Activity): self._playing = False self._first_time = True - self._width = gtk.gdk.screen_width() - self._height = gtk.gdk.screen_height() - self._scale = gtk.gdk.screen_height() / 900. + self._width = Gdk.Screen.width() + self._height = Gdk.Screen.height() + self._scale = Gdk.Screen.height() / 900. self._titlewh = [self._width, TITLEH * self._scale] self._titlexy = [0, 0] @@ -223,19 +210,19 @@ class PortfolioActivity(activity.Activity): def _setup_canvas(self): ''' Create a canvas ''' - self._canvas = gtk.DrawingArea() - self._canvas.set_size_request(int(gtk.gdk.screen_width()), - int(gtk.gdk.screen_height())) + self._canvas = Gtk.DrawingArea() + self._canvas.set_size_request(int(Gdk.Screen.width()), + int(Gdk.Screen.height())) self._canvas.show() self.set_canvas(self._canvas) self.show_all() - self._canvas.set_flags(gtk.CAN_FOCUS) - self._canvas.add_events(gtk.gdk.BUTTON_PRESS_MASK) - self._canvas.add_events(gtk.gdk.POINTER_MOTION_MASK) - self._canvas.add_events(gtk.gdk.BUTTON_RELEASE_MASK) - self._canvas.add_events(gtk.gdk.KEY_PRESS_MASK) - self._canvas.add_events(gtk.gdk.CONFIGURE) + self._canvas.set_flags(Gtk.CAN_FOCUS) + self._canvas.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) + self._canvas.add_events(Gdk.EventMask.POINTER_MOTION_MASK) + self._canvas.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK) + self._canvas.add_events(Gdk.EventMask.KEY_PRESS_MASK) + self._canvas.add_events(Gdk.CONFIGURE) self._canvas.connect('expose-event', self._expose_cb) self._canvas.connect('button-press-event', self._button_press_cb) self._canvas.connect('button-release-event', self._button_release_cb) @@ -247,12 +234,12 @@ class PortfolioActivity(activity.Activity): def _configure_cb(self, win, event): # landscape or portrait? - self._width = gtk.gdk.screen_width() - self._height = gtk.gdk.screen_height() + self._width = Gdk.Screen.width() + self._height = Gdk.Screen.height() if self._width > self._height: - self._scale = gtk.gdk.screen_height() / 900. + self._scale = Gdk.Screen.height() / 900. else: - self._scale = gtk.gdk.screen_width() / 1200. + self._scale = Gdk.Screen.width() / 1200. self._my_canvas.hide() self._title.hide() @@ -282,7 +269,7 @@ class PortfolioActivity(activity.Activity): self._colors[0] = self._colors[1] self._colors[1] = tmp - if not HAVE_TOOLBOX and self._hw[0:2] == 'xo': + if self._hw[0:2] == 'xo': self._titlef = 18 self._descriptionf = 12 else: @@ -296,23 +283,23 @@ class PortfolioActivity(activity.Activity): star_size = 55 else: star_size = int(150. / int(ceil(sqrt(self._nobjects)))) - self._fav_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( + self._fav_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(activity.get_bundle_path(), 'icons', 'favorite-on.svg'), star_size, star_size) - self._unfav_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( + self._unfav_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(activity.get_bundle_path(), 'icons', 'favorite-off.svg'), star_size, star_size) - self.record_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( + self.record_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(activity.get_bundle_path(), 'icons', 'media-audio.svg'), 55, 55) - self.recording_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( + self.recording_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(activity.get_bundle_path(), 'icons', 'media-audio-recording.svg'), 55, 55) - self.playback_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( + self.playback_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(activity.get_bundle_path(), 'icons', 'speaker-100.svg'), 55, 55) - self.playing_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( + self.playing_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(activity.get_bundle_path(), 'icons', 'speaker-0.svg'), 55, 55) @@ -325,16 +312,16 @@ class PortfolioActivity(activity.Activity): self._playback_button.type = 'noplay' self._playback_button.hide() - self.prev_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( + self.prev_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(activity.get_bundle_path(), 'icons', 'go-previous.svg'), 55, 55) - self.next_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( + self.next_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(activity.get_bundle_path(), 'icons', 'go-next.svg'), 55, 55) - self.prev_off_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( + self.prev_off_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(activity.get_bundle_path(), 'icons', 'go-previous-inactive.svg'), 55, 55) - self.next_off_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( + self.next_off_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(activity.get_bundle_path(), 'icons', 'go-next-inactive.svg'), 55, 55) @@ -348,7 +335,7 @@ class PortfolioActivity(activity.Activity): self._help = Sprite(self._sprites, 0, 0, - gtk.gdk.pixbuf_new_from_file_at_size( + GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(activity.get_bundle_path(), 'help.png'), int(self._previewwh[0]), int(self._previewwh[1]))) @@ -415,41 +402,27 @@ class PortfolioActivity(activity.Activity): self.max_participants = 5 # sharing - if HAVE_TOOLBOX: - toolbox = ToolbarBox() + toolbox = ToolbarBox() - # Activity toolbar - activity_button_toolbar = ActivityToolbarButton(self) + # Activity toolbar + activity_button_toolbar = ActivityToolbarButton(self) - toolbox.toolbar.insert(activity_button_toolbar, 0) - activity_button_toolbar.show() + toolbox.toolbar.insert(activity_button_toolbar, 0) + activity_button_toolbar.show() - self.set_toolbar_box(toolbox) - toolbox.show() - self.toolbar = toolbox.toolbar + self.set_toolbar_box(toolbox) + toolbox.show() + self.toolbar = toolbox.toolbar - adjust_toolbar = gtk.Toolbar() - adjust_toolbar_button = ToolbarButton( - label=_('Adjust'), - page=adjust_toolbar, - icon_name='preferences-system') - adjust_toolbar.show_all() - adjust_toolbar_button.show() - else: - # Use pre-0.86 toolbar design - primary_toolbar = gtk.Toolbar() - toolbox = activity.ActivityToolbox(self) - self.set_toolbox(toolbox) - toolbox.add_toolbar(_('Page'), primary_toolbar) - adjust_toolbar = gtk.Toolbar() - toolbox.add_toolbar(_('Adjust'), adjust_toolbar) - toolbox.show() - toolbox.set_current_toolbar(1) - self.toolbar = primary_toolbar - - if HAVE_TOOLBOX: - # toolbox.toolbar.insert(record_toolbar_button, -1) - toolbox.toolbar.insert(adjust_toolbar_button, -1) + adjust_toolbar = Gtk.Toolbar() + adjust_toolbar_button = ToolbarButton( + label=_('Adjust'), + page=adjust_toolbar, + icon_name='preferences-system') + adjust_toolbar.show_all() + adjust_toolbar_button.show() + + toolbox.toolbar.insert(adjust_toolbar_button, -1) button_factory('view-fullscreen', self.toolbar, self.do_fullscreen_cb, tooltip=_('Fullscreen'), @@ -498,17 +471,16 @@ class PortfolioActivity(activity.Activity): self._save_as_pdf_cb, tooltip=_('Save as PDF')) - if HAVE_TOOLBOX: - separator_factory(toolbox.toolbar, True, False) + separator_factory(toolbox.toolbar, True, False) - stop_button = StopButton(self) - stop_button.props.accelerator = 'q' - toolbox.toolbar.insert(stop_button, -1) - stop_button.show() + stop_button = StopButton(self) + stop_button.props.accelerator = 'q' + toolbox.toolbar.insert(stop_button, -1) + stop_button.show() def _destroy_cb(self, win, event): ''' Clean up on the way out. ''' - gtk.main_quit() + Gtk.main_quit() def _thumb_to_slide(self, spr): if spr is None: @@ -639,7 +611,7 @@ class PortfolioActivity(activity.Activity): self._playing = False self._auto_button.set_icon('media-playback-start') if hasattr(self, '_timeout_id') and self._timeout_id is not None: - gobject.source_remove(self._timeout_id) + GObject.source_remove(self._timeout_id) def _loop(self): ''' Show a slide and then call oneself with a timeout. ''' @@ -647,7 +619,7 @@ class PortfolioActivity(activity.Activity): if self.i == self._nobjects: self.i = 0 self._show_slide() - self._timeout_id = gobject.timeout_add(int(self._rate * 1000), + self._timeout_id = GObject.timeout_add(int(self._rate * 1000), self._loop) def _save_as_pdf_cb(self, button=None): @@ -668,7 +640,7 @@ class PortfolioActivity(activity.Activity): dsobject.metadata['icon-color'] = profile.get_color().to_string() dsobject.metadata['mime_type'] = 'application/pdf' dsobject.set_file_path(tmp_file) - dsobject.metadata['activity'] = 'org.laptop.sugar.ReadActivity' + dsobject.metadata['activity'] = 'org.laptop.sugar3.ReadActivity' datastore.write(dsobject) dsobject.destroy() return @@ -720,7 +692,7 @@ class PortfolioActivity(activity.Activity): return slide = self._slides[self.i] - if self.i == 0: + if self.i == 0: self._prev.set_image(self.prev_off_pixbuf) else: self._prev.set_image(self.prev_pixbuf) @@ -735,7 +707,7 @@ class PortfolioActivity(activity.Activity): self._preview.set_shape(pixbuf.scale_simple( int(PREVIEWW * self._scale), int(PREVIEWH * self._scale), - gtk.gdk.INTERP_NEAREST)) + GdkPixbuf.InterpType.NEAREST)) self._preview.set_layer(MIDDLE) else: if self._preview is not None: @@ -753,7 +725,7 @@ class PortfolioActivity(activity.Activity): if slide.sound is not None: if self._playing: _logger.debug('Playing audio note') - gobject.idle_add(play_audio_from_file, + GObject.idle_add(play_audio_from_file, slide.sound.file_path) self._playback_button.set_image(self.playback_pixbuf) self._playback_button.type = 'play' @@ -834,7 +806,7 @@ class PortfolioActivity(activity.Activity): if slide.thumb is None: if slide.preview is not None: pixbuf_thumb = slide.preview.scale_simple(int(w), int(h), - gtk.gdk.INTERP_TILES) + GdkPixbuf.InterpType.TILES) else: pixbuf_thumb = svg_str_to_pixbuf(genblank(int(w), int(h), self._colors)) @@ -878,13 +850,13 @@ class PortfolioActivity(activity.Activity): os.remove(os.path.join(self.datapath, 'output.ogg')) def do_fullscreen_cb(self, button): - ''' Hide the Sugar toolbars. ''' + ''' Hide the sugar3 toolbars. ''' self.fullscreen() def invalt(self, x, y, w, h): ''' Mark a region for refresh ''' self._canvas.window.invalidate_rect( - gtk.gdk.Rectangle(int(x), int(y), int(w), int(h)), False) + (int(x), int(y), int(w), int(h)), False) def _button_press_cb(self, win, event): ''' The mouse button was pressed. Is it on a thumbnail sprite? ''' @@ -1084,7 +1056,7 @@ class PortfolioActivity(activity.Activity): slide = self._slides[self.i] _logger.debug('Autosaving recording') self._notify_successful_save(title=_('Save recording')) - gobject.timeout_add(100, self._wait_for_transcoding_to_finish) + GObject.timeout_add(100, self._wait_for_transcoding_to_finish) else: # Wasn't recording, so start _logger.debug('recording...False. Start recording.') self._record_button.set_image(self.recording_pixbuf) @@ -1107,8 +1079,8 @@ class PortfolioActivity(activity.Activity): self._playback_button.set_image(self.playing_pixbuf) self._playback_button.set_layer(DRAG) self._playback_button.type = 'playing' - gobject.timeout_add(1000, self._playback_button_reset) - gobject.idle_add(play_audio_from_file, + GObject.timeout_add(1000, self._playback_button_reset) + GObject.idle_add(play_audio_from_file, self._slides[self.i].sound.file_path) def _playback_button_reset(self): @@ -1191,9 +1163,9 @@ class PortfolioActivity(activity.Activity): def _keypress_cb(self, area, event): ''' Keyboard ''' - keyname = gtk.gdk.keyval_name(event.keyval) - keyunicode = gtk.gdk.keyval_to_unicode(event.keyval) - if event.get_state() & gtk.gdk.MOD1_MASK: + keyname = Gdk.keyval_name(event.keyval) + keyunicode = Gdk.keyval_to_unicode(event.keyval) + if event.get_state() & Gdk.ModifierType.MOD1_MASK: alt_mask = True alt_flag = 'T' else: @@ -1338,7 +1310,7 @@ class PortfolioActivity(activity.Activity): if hasattr(self.get_window(), 'get_cursor'): self.get_window().set_cursor(self.old_cursor) else: - self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR)) + self.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR)) def _waiting_cursor(self): ''' Waiting, so set watch cursor. ''' @@ -1346,7 +1318,7 @@ class PortfolioActivity(activity.Activity): return if hasattr(self.get_window(), 'get_cursor'): self.old_cursor = self.get_window().get_cursor() - self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + self.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) # Serialize @@ -1363,12 +1335,7 @@ class PortfolioActivity(activity.Activity): return self._data_dumper(data) def _data_dumper(self, data): - if _OLD_SUGAR_SYSTEM: - return json.write(data) - else: - io = StringIO() - jdump(data, io) - return io.getvalue() + return json.write(data) def _load(self, data): ''' Load slide data from a sharer. ''' @@ -1407,11 +1374,7 @@ class PortfolioActivity(activity.Activity): self._show_thumbs() def _data_loader(self, data): - if _OLD_SUGAR_SYSTEM: - return json.read(data) - else: - io = StringIO(data) - return jload(io) + return json.read(data) # When portfolio is shared, only sharer sends out slides, joiners # send back comments. @@ -1607,7 +1570,7 @@ class PortfolioActivity(activity.Activity): for slide in self._slides: if slide.active and slide.fav: _logger.debug('sharing %s' % (slide.uid)) - gobject.idle_add(self._send_event, 's:%s' % ( + GObject.idle_add(self._send_event, 's:%s' % ( str(self._dump(slide)))) def _send_star(self, uid, status): diff --git a/exportpdf.py b/exportpdf.py index e01a788..eef14bd 100644 --- a/exportpdf.py +++ b/exportpdf.py @@ -11,14 +11,14 @@ # Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA -import pygtk -pygtk.require('2.0') -import gtk +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk from glib import GError import os.path import time import cairo -import pango +from gi.repository import Pango import pangocairo from gettext import gettext as _ @@ -42,7 +42,7 @@ def save_pdf(activity, nick, description=None): tmp_file = os.path.join(activity.datapath, 'output.pdf') pdf_surface = cairo.PDFSurface(tmp_file, 504, 648) - fd = pango.FontDescription('Sans') + fd = Pango.FontDescription('Sans') cr = cairo.Context(pdf_surface) cr.set_source_rgb(0, 0, 0) @@ -67,7 +67,7 @@ def save_pdf(activity, nick, description=None): try: w = int(PAGE_WIDTH - LEFT_MARGIN * 2) h = int(w * 3 / 4) - pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(dsobj.file_path, + pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(dsobj.file_path, w, h) except(GError, IOError): try: @@ -81,7 +81,7 @@ def save_pdf(activity, nick, description=None): if pixbuf is not None: cr.save() - cr = gtk.gdk.CairoContext(cr) + cr = Gdk.CairoContext(cr) cr.set_source_pixbuf(pixbuf, LEFT_MARGIN, TOP_MARGIN + 150) cr.rectangle(LEFT_MARGIN, TOP_MARGIN + 150, w, h) cr.fill() @@ -97,13 +97,13 @@ def save_pdf(activity, nick, description=None): def show_text(cr, fd, label, size, x, y): cr = pangocairo.CairoContext(cr) pl = cr.create_layout() - fd.set_size(int(size * pango.SCALE)) + fd.set_size(int(size * Pango.SCALE)) pl.set_font_description(fd) if type(label) == str or type(label) == unicode: pl.set_text(label.replace('\0', ' ')) else: pl.set_text(str(label)) - pl.set_width((PAGE_WIDTH - LEFT_MARGIN * 2) * pango.SCALE) + pl.set_width((PAGE_WIDTH - LEFT_MARGIN * 2) * Pango.SCALE) cr.save() cr.translate(x, y) cr.update_layout(pl) diff --git a/grecord.py b/grecord.py index ae353be..6f35886 100644 --- a/grecord.py +++ b/grecord.py @@ -22,14 +22,14 @@ import os import time -import gtk +from gi.repository import Gtk import gst import logging _logger = logging.getLogger("portfolio-activity") -import gobject -gobject.threads_init() +from gi.repository import GObject +GObject.threads_init() class Grecord: @@ -147,7 +147,7 @@ filesink name=audioFilesink' audioBus.add_signal_watch() self._audio_transcode_handler = audioBus.connect( 'message', self._onMuxedAudioMessageCb, self._audioline) - self._transcode_id = gobject.timeout_add(200, self._transcodeUpdateCb, + self._transcode_id = GObject.timeout_add(200, self._transcodeUpdateCb, self._audioline) self._audiopos = 0 self._audioline.set_state(gst.STATE_PLAYING) @@ -213,9 +213,9 @@ filesink name=audioFilesink' return False def _clean_up_transcoding_pipeline(self, pipe): - gobject.source_remove(self._audio_transcode_handler) + GObject.source_remove(self._audio_transcode_handler) self._audio_transcode_handler = None - gobject.source_remove(self._transcode_id) + GObject.source_remove(self._transcode_id) self._transcode_id = None pipe.set_state(gst.STATE_NULL) pipe.get_bus().remove_signal_watch() diff --git a/setup.py b/setup.py index e5026ee..79bd6d4 100755 --- a/setup.py +++ b/setup.py @@ -26,7 +26,7 @@ if len(sys.argv) > 1 and '--no-sugar' == sys.argv[1]: data_files = DATA_FILES, ) else: - from sugar.activity import bundlebuilder + from sugar3.activity import bundlebuilder if __name__ == "__main__": bundlebuilder.start() diff --git a/sprites.py b/sprites.py index baae94f..aab92cc 100644 --- a/sprites.py +++ b/sprites.py @@ -24,7 +24,7 @@ ''' sprites.py is a simple sprites library for managing graphics objects, -'sprites', on a gtk.DrawingArea. It manages multiple sprites with +'sprites', on a Gtk.DrawingArea. It manages multiple sprites with methods such as move, hide, set_layer, etc. There are two classes: @@ -68,7 +68,7 @@ Example usage: # method for converting SVG to a gtk pixbuf def svg_str_to_pixbuf(svg_string): - pl = gtk.gdk.PixbufLoader('svg') + pl = GdkPixbuf.PixbufLoader('svg') pl.write(svg_string) pl.close() pixbuf = pl.get_pixbuf() @@ -76,10 +76,10 @@ def svg_str_to_pixbuf(svg_string): ''' -import pygtk -pygtk.require('2.0') -import gtk -import pango +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk +from gi.repository import Pango import pangocairo import cairo @@ -160,7 +160,7 @@ class Sprite: ''' Initialize an individual sprite ''' self._sprites = sprites self.save_xy = (x, y) # remember initial (x, y) position - self.rect = gtk.gdk.Rectangle(int(x), int(y), 0, 0) + self.rect = (int(x), int(y), 0, 0) self._scale = [12] self._rescale = [True] self._horiz_align = ["center"] @@ -187,7 +187,7 @@ class Sprite: self._dy.append(0) self._dx[i] = dx self._dy[i] = dy - if isinstance(image, gtk.gdk.Pixbuf): + if isinstance(image, GdkPixbuf.Pixbuf): w = image.get_width() h = image.get_height() else: @@ -203,7 +203,7 @@ class Sprite: surface = cairo.ImageSurface( cairo.FORMAT_ARGB32, self.rect.width, self.rect.height) context = cairo.Context(surface) - context = gtk.gdk.CairoContext(context) + context = Gdk.CairoContext(context) context.set_source_pixbuf(image, 0, 0) context.rectangle(0, 0, self.rect.width, self.rect.height) context.fill() @@ -282,7 +282,7 @@ class Sprite: def set_font(self, font): ''' Set the font for a label ''' - self._fd = pango.FontDescription(font) + self._fd = Pango.FontDescription(font) def set_label_color(self, rgb): ''' Set the font color for a label ''' @@ -365,23 +365,23 @@ class Sprite: for i in range(len(self.labels)): pl = cr.create_layout() pl.set_text(str(self.labels[i])) - self._fd.set_size(int(self._scale[i] * pango.SCALE)) + self._fd.set_size(int(self._scale[i] * Pango.SCALE)) pl.set_font_description(self._fd) - w = pl.get_size()[0] / pango.SCALE + w = pl.get_size()[0] / Pango.SCALE if w > my_width: if self._rescale[i]: self._fd.set_size( - int(self._scale[i] * pango.SCALE * my_width / w)) + int(self._scale[i] * Pango.SCALE * my_width / w)) pl.set_font_description(self._fd) - w = pl.get_size()[0] / pango.SCALE + w = pl.get_size()[0] / Pango.SCALE else: j = len(self.labels[i]) - 1 while(w > my_width and j > 0): pl.set_text( "…" + self.labels[i][len(self.labels[i]) - j:]) - self._fd.set_size(int(self._scale[i] * pango.SCALE)) + self._fd.set_size(int(self._scale[i] * Pango.SCALE)) pl.set_font_description(self._fd) - w = pl.get_size()[0] / pango.SCALE + w = pl.get_size()[0] / Pango.SCALE j -= 1 if self._horiz_align[i] == "center": x = int(self.rect.x + self._margins[0] + (my_width - w) / 2) @@ -389,7 +389,7 @@ class Sprite: x = int(self.rect.x + self._margins[0]) else: # right x = int(self.rect.x + self.rect.width - w - self._margins[2]) - h = pl.get_size()[1] / pango.SCALE + h = pl.get_size()[1] / Pango.SCALE if self._vert_align[i] == "middle": y = int(self.rect.y + self._margins[1] + (my_height - h) / 2) elif self._vert_align[i] == "top": @@ -411,9 +411,9 @@ class Sprite: for i in range(len(self.labels)): pl = cr.create_layout() pl.set_text(self.labels[i]) - self._fd.set_size(int(self._scale[i] * pango.SCALE)) + self._fd.set_size(int(self._scale[i] * Pango.SCALE)) pl.set_font_description(self._fd) - w = pl.get_size()[0] / pango.SCALE + w = pl.get_size()[0] / Pango.SCALE if w > max: max = w return max diff --git a/toolbar_utils.py b/toolbar_utils.py index 563147e..788817d 100644 --- a/toolbar_utils.py +++ b/toolbar_utils.py @@ -11,12 +11,12 @@ # Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA -import gtk +from gi.repository import Gtk -from sugar.graphics.radiotoolbutton import RadioToolButton -from sugar.graphics.toolbutton import ToolButton -from sugar.graphics.combobox import ComboBox -from sugar.graphics.toolcombobox import ToolComboBox +from sugar3.graphics.radiotoolbutton import RadioToolButton +from sugar3.graphics.toolbutton import ToolButton +from sugar3.graphics.combobox import ComboBox +from sugar3.graphics.toolcombobox import ToolComboBox def combo_factory(combo_array, toolbar, callback, cb_arg=None, @@ -32,7 +32,7 @@ def combo_factory(combo_array, toolbar, callback, cb_arg=None, for i, selection in enumerate(combo_array): combo.append_item(i, selection, None) combo.show() - toolitem = gtk.ToolItem() + toolitem = Gtk.ToolItem() toolitem.add(combo) if hasattr(toolbar, 'insert'): # the main toolbar toolbar.insert(toolitem, -1) @@ -46,13 +46,13 @@ def combo_factory(combo_array, toolbar, callback, cb_arg=None, def entry_factory(default_string, toolbar, tooltip=None, max=3): ''' Factory for adding a text box to a toolbar ''' - entry = gtk.Entry() + entry = Gtk.Entry() entry.set_text(default_string) if tooltip is not None and hasattr(entry, 'set_tooltip_text'): entry.set_tooltip_text(tooltip) entry.set_width_chars(max) entry.show() - toolitem = gtk.ToolItem() + toolitem = Gtk.ToolItem() toolitem.add(entry) if hasattr(toolbar, 'insert'): # the main toolbar toolbar.insert(toolitem, -1) @@ -105,12 +105,12 @@ def radio_factory(button_name, toolbar, callback, cb_arg=None, tooltip=None, def label_factory(toolbar, label_text, width=None): ''' Factory for adding a label to a toolbar ''' - label = gtk.Label(label_text) + label = Gtk.Label(label=label_text) label.set_line_wrap(True) if width is not None: label.set_size_request(width, -1) # doesn't work on XOs label.show() - toolitem = gtk.ToolItem() + toolitem = Gtk.ToolItem() toolitem.add(label) if hasattr(toolbar, 'insert'): # the main toolbar toolbar.insert(toolitem, -1) @@ -122,7 +122,7 @@ def label_factory(toolbar, label_text, width=None): def separator_factory(toolbar, expand=False, visible=True): ''' add a separator to a toolbar ''' - separator = gtk.SeparatorToolItem() + separator = Gtk.SeparatorToolItem() separator.props.draw = visible separator.set_expand(expand) if hasattr(toolbar, 'insert'): # the main toolbar @@ -134,9 +134,9 @@ def separator_factory(toolbar, expand=False, visible=True): def image_factory(image, toolbar, tooltip=None): ''' Add an image to the toolbar ''' - img = gtk.Image() + img = Gtk.Image() img.set_from_pixbuf(image) - img_tool = gtk.ToolItem() + img_tool = Gtk.ToolItem() img_tool.add(img) if tooltip is not None: img.set_tooltip_text(tooltip) @@ -149,12 +149,12 @@ def image_factory(image, toolbar, tooltip=None): def spin_factory(default, min, max, callback, toolbar): - spin_adj = gtk.Adjustment(default, min, max, 1, 32, 0) - spin = gtk.SpinButton(spin_adj, 0, 0) + spin_adj = Gtk.Adjustment(default, min, max, 1, 32, 0) + spin = Gtk.SpinButton(spin_adj, 0, 0) spin_id = spin.connect('value-changed', callback) spin.set_numeric(True) spin.show() - toolitem = gtk.ToolItem() + toolitem = Gtk.ToolItem() toolitem.add(spin) if hasattr(toolbar, 'insert'): # the main toolbar toolbar.insert(toolitem, -1) diff --git a/utils.py b/utils.py index fc45b41..563008e 100644 --- a/utils.py +++ b/utils.py @@ -11,7 +11,7 @@ # Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA -import gtk +from gi.repository import Gtk import os import subprocess @@ -88,7 +88,7 @@ def lighter_color(colors): def svg_str_to_pixbuf(svg_string): ''' Load pixbuf from SVG string ''' - pl = gtk.gdk.PixbufLoader('svg') + pl = GdkPixbuf.PixbufLoader('svg') pl.write(svg_string) pl.close() pixbuf = pl.get_pixbuf() @@ -124,7 +124,7 @@ def svg_rectangle(width, height, colors): def load_svg_from_file(file_path, width, height): '''Create a pixbuf from SVG in a file. ''' - return gtk.gdk.pixbuf_new_from_file_at_size(file_path, width, height) + return GdkPixbuf.Pixbuf.new_from_file_at_size(file_path, width, height) def file_to_base64(activity, path): @@ -143,7 +143,7 @@ def pixbuf_to_base64(activity, pixbuf, width=100, height=75): ''' Convert pixbuf to base64-encoded data ''' png_file = os.path.join(get_path(activity, 'instance'), 'imagetmp.png') if pixbuf != None: - pixbuf = pixbuf.scale_simple(width, height, gtk.gdk.INTERP_NEAREST) + pixbuf = pixbuf.scale_simple(width, height, GdkPixbuf.InterpType.NEAREST) pixbuf.save(png_file, "png") data = file_to_base64(activity, png_file) os.remove(png_file) @@ -165,7 +165,7 @@ def base64_to_pixbuf(activity, data, width=300, height=225): ''' Convert base64-encoded data to a pixbuf ''' png_file = os.path.join(get_path(activity, 'instance'), 'imagetmp.png') base64_to_file(activity, data, png_file) - pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(png_file, width, height) + pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(png_file, width, height) os.remove(png_file) return pixbuf @@ -173,7 +173,7 @@ def base64_to_pixbuf(activity, data, width=300, height=225): def get_pixbuf_from_journal(dsobject, w, h): """ Load a pixbuf from a Journal object. """ pixbufloader = \ - gtk.gdk.pixbuf_loader_new_with_mime_type('image/png') + GdkPixbuf.Pixbuf.loader_new_with_mime_type('image/png') pixbufloader.set_size(min(300, int(w)), min(225, int(h))) try: pixbufloader.write(dsobject.metadata['preview']) @@ -186,7 +186,7 @@ def get_pixbuf_from_journal(dsobject, w, h): def get_pixbuf_from_file(file_path, w, h): """ Load a pixbuf from a file. """ - return gtk.gdk.pixbuf_new_from_file_at_size(file_path, w, h) + return GdkPixbuf.Pixbuf.new_from_file_at_size(file_path, w, h) def genblank(w, h, colors, stroke_width=1.0): -- cgit v0.9.1