diff options
author | Ignacio RodrÃguez <ignaciorodriguez@sugarlabs.org> | 2012-10-13 19:17:03 (GMT) |
---|---|---|
committer | Ignacio RodrÃguez <ignaciorodriguez@sugarlabs.org> | 2012-10-13 19:17:03 (GMT) |
commit | 6c3d04902f271b0360df3f129bc753228704fc2c (patch) | |
tree | 2af93603bc066577d0152fb72b7b444686592cc7 | |
parent | b062293858158924957cdbea01715c700bb17710 (diff) |
Port to GTK3 Completed!
-rw-r--r-- | StoryActivity.py | 10 | ||||
-rw-r--r-- | activity/ - flavi.o D | 0 | ||||
-rw-r--r-- | game.py | 35 | ||||
-rw-r--r-- | game.pyo | bin | 0 -> 9718 bytes | |||
-rw-r--r-- | grecord.pyo | bin | 0 -> 7704 bytes | |||
-rw-r--r-- | sprites.py | 49 | ||||
-rw-r--r-- | utils.py | 88 |
7 files changed, 90 insertions, 92 deletions
diff --git a/StoryActivity.py b/StoryActivity.py index 50c217d..18d3008 100644 --- a/StoryActivity.py +++ b/StoryActivity.py @@ -67,7 +67,7 @@ class StoryActivity(activity.Activity): _logger.error(str(e)) self.path = activity.get_bundle_path() - + print self.path self.nick = profile.get_nick_name() if profile.get_color() is not None: self.colors = profile.get_color().to_string().split(',') @@ -206,17 +206,17 @@ class StoryActivity(activity.Activity): _logger.debug('recording...True. Preparing to save.') self._grecord.stop_recording_audio() self._recording = False - self._record_button.set_icon('media-record') + self._record_button.set_icon_name('media-record') self._record_button.set_tooltip(_('Start recording')) - self._playback_button.set_icon('media-playback-start') + self._playback_button.set_icon_name('media-playback-start') self._playback_button.set_tooltip(_('Play 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._grecord.record_audio() self._recording = True - self._record_button.set_icon('media-recording') + self._record_button.set_icon_name('media-recording') self._record_button.set_tooltip(_('Stop recording')) def _wait_for_transcoding_to_finish(self, button=None): diff --git a/activity/ - flavi.o D b/activity/ - flavi.o D new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/activity/ - flavi.o D @@ -2,7 +2,7 @@ #Copyright (c) 2012 Walter Bender # Port to GTK3: # Ignacio Rodriguez <ignaciorodriguez@sugarlabs.org> - +# No aparecen las imagenes >( # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or @@ -51,6 +51,7 @@ class Game(): # self._canvas.set_flags(Gtk.CAN_FOCUS) # self._canvas.connect("expose-event", self._expose_cb) + self._canvas.connect("draw", self.__draw_cb) self._width = Gdk.Screen.width() self._height = Gdk.Screen.height() - (GRID_CELL_SIZE * 1.5) @@ -65,7 +66,6 @@ class Game(): # Find the image files self._PATHS = glob.glob(os.path.join(self._path, 'images', '*.svg')) - # Generate the sprites we'll need... self._sprites = Sprites(self._canvas) self._dots = [] @@ -85,7 +85,7 @@ class Game(): def _all_clear(self): ''' Things to reinitialize when starting up a new game. ''' if self._timeout_id is not None: - gobject.source_remove(self._timeout_id) + GObject.source_remove(self._timeout_id) for dot in self._dots: if dot.type != -1: @@ -95,7 +95,9 @@ class Game(): dot.set_label('?') self._dance_counter = 0 self._dance_step() - + def __draw_cb(self,canvas,cr): + self._sprites.redraw_sprites(cr=cr) + print ' Drawed!! ' def _dance_step(self): ''' Short animation before loading new game ''' for dot in self._dots: @@ -103,7 +105,7 @@ class Game(): self._colors[int(uniform(0, 3))])) self._dance_counter += 1 if self._dance_counter < 10: - self._timeout_id = gobject.timeout_add(500, self._dance_step) + self._timeout_id = GObject.timeout_add(500, self._dance_step) else: self._new_game() @@ -119,11 +121,11 @@ class Game(): _logger.debug(self._dots[i].type) self._dots[i].set_shape(self._new_dot_surface( image=self._dots[i].type)) - + print ' New Game! ' if self.we_are_sharing: _logger.debug('sending a new game') self._parent.send_new_game() - + def restore_game(self, dot_list): ''' Restore a game from the Journal or share ''' for i, dot in enumerate(dot_list): @@ -153,16 +155,15 @@ class Game(): def _expose_cb(self, win, event): self.do_expose_event(event) - + return True def do_expose_event(self, event): - ''' Handle the expose-event by drawing ''' - # Restrict Cairo to the exposed area cr = self._canvas.window.cairo_create() cr.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) cr.clip() # Refresh sprite list - self._sprites.redraw_sprites(cr=cr) + if cr is not None: + self._sprites.redraw_sprites(cr=cr) def _destroy_cb(self, win, event): Gtk.main_quit() @@ -179,7 +180,7 @@ class Game(): y = self._space + int(i / 3.) * (self._dot_size + self._space) x = self._space + (i % 3) * (self._dot_size + self._space) cr.save() - cr = cairo.CairoContext(cr) + cr = cairo.Context(cr) # Walter.. This a confused part >( cr.set_source_surface(self._dots[i].cached_surfaces[0], x, y) cr.rectangle(x, y, self._dot_size, self._dot_size) cr.fill() @@ -220,10 +221,11 @@ class Game(): surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, self._svg_width, self._svg_height) context = cairo.Context(surface) - context = cairo.Context(context) - context.set_source_pixbuf(pixbuf, 0, 0) - context.rectangle(0, 0, self._svg_width, self._svg_height) - context.fill() + #context = cairo.Context(context) + Gdk.cairo_set_source_pixbuf(context,pixbuf,0,0) + #context.set_source_pixbuf(pixbuf, 0, 0) + #context.rectangle(0, 0, self._svg_width, self._svg_height) + #context.fill() if image is None: self._dot_cache[color] = surface return surface @@ -263,4 +265,5 @@ def svg_str_to_pixbuf(svg_string, w=None, h=None): pl.set_size(w, h) pl.write(svg_string) pl.close() + print pl.get_pixbuf() return pl.get_pixbuf() diff --git a/game.pyo b/game.pyo Binary files differnew file mode 100644 index 0000000..8086263 --- /dev/null +++ b/game.pyo diff --git a/grecord.pyo b/grecord.pyo Binary files differnew file mode 100644 index 0000000..d3f8744 --- /dev/null +++ b/grecord.pyo @@ -79,6 +79,7 @@ def svg_str_to_pixbuf(svg_string): import gi from gi.repository import Gtk, GdkPixbuf, Gdk from gi.repository import Pango, PangoCairo +import cairo class Sprites: @@ -86,6 +87,7 @@ class Sprites: def __init__(self, widget): ''' Initialize an empty array of sprites ''' + self.cr = None self.widget = widget self.list = [] @@ -156,11 +158,14 @@ class Sprite: def __init__(self, sprites, x, y, image): ''' Initialize an individual sprite ''' self._sprites = sprites + self.save_xy = (x, y) # remember initial (x, y) position self.rect = [int(x), int(y), 0, 0] self._scale = [12] self._rescale = [True] self._horiz_align = ["center"] self._vert_align = ["middle"] + self._x_pos = [None] + self._y_pos = [None] self._fd = None self._bold = False self._italic = False @@ -184,7 +189,7 @@ class Sprite: self.images[i] = image self._dx[i] = dx self._dy[i] = dy - if isinstance(self.images[i], GdkPixbuf.Pixbuf): + if hasattr(self.images[i], 'get_width'): w = self.images[i].get_width() h = self.images[i].get_height() else: @@ -229,12 +234,13 @@ class Sprite: self.set_image(image, i) self.inval() - def set_layer(self, layer): + def set_layer(self, layer=None): ''' Set the layer for a sprite ''' self._sprites.remove_from_list(self) - self.layer = layer + if layer is not None: + self.layer = layer for i in range(self._sprites.length_of_list()): - if layer < self._sprites.get_sprite(i).layer: + if self.layer < self._sprites.get_sprite(i).layer: self._sprites.insert_in_list(self, i) self.inval() return @@ -260,13 +266,15 @@ class Sprite: if self._fd is None: self.set_font('Sans') if self._color is None: - self._color = (0.5, 0.5, 0.5) + self._color = (0., 0., 0.) while len(self.labels) < i + 1: self.labels.append(" ") self._scale.append(self._scale[0]) self._rescale.append(self._rescale[0]) self._horiz_align.append(self._horiz_align[0]) self._vert_align.append(self._vert_align[0]) + self._x_pos.append(self._x_pos[0]) + self._y_pos.append(self._y_pos[0]) def set_font(self, font): ''' Set the font for a label ''' @@ -288,19 +296,25 @@ class Sprite: return def set_label_attributes(self, scale, rescale=True, horiz_align="center", - vert_align="middle", i=0): + vert_align="middle", x_pos=None, y_pos=None, i=0): ''' Set the various label attributes ''' self._extend_labels_array(i) self._scale[i] = scale self._rescale[i] = rescale self._horiz_align[i] = horiz_align self._vert_align[i] = vert_align + self._x_pos[i] = x_pos + self._y_pos[i] = y_pos def hide(self): ''' Hide a sprite ''' self.inval() self._sprites.remove_from_list(self) + def restore(self): + ''' Restore a hidden sprite ''' + self.set_layer() + def inval(self): ''' Invalidate a region for gtk ''' # self._sprites.window.invalidate_rect(self.rect, False) @@ -326,6 +340,14 @@ class Sprite: self.rect[2], self.rect[3]) cr.fill() + elif type(img) == cairo.ImageSurface: + cr.set_source_surface(img, self.rect[0] + self._dx[i], + self.rect[1] + self._dy[i]) + cr.rectangle(self.rect[0] + self._dx[i], + self.rect[1] + self._dy[i], + self.rect[2], + self.rect[3]) + cr.fill() else: print 'sprite.draw: source not a pixbuf (%s)' % (type(img)) if len(self.labels) > 0: @@ -371,14 +393,18 @@ class Sprite: pl.set_font_description(self._fd) w = pl.get_size()[0] / Pango.SCALE j -= 1 - if self._horiz_align[i] == "center": + if self._x_pos[i] is not None: + x = int(self.rect[0] + self._x_pos[i]) + elif self._horiz_align[i] == "center": x = int(self.rect[0] + self._margins[0] + (my_width - w) / 2) elif self._horiz_align[i] == 'left': x = int(self.rect[0] + self._margins[0]) else: # right x = int(self.rect[0] + self.rect[2] - w - self._margins[2]) h = pl.get_size()[1] / Pango.SCALE - if self._vert_align[i] == "middle": + if self._y_pos[i] is not None: + y = int(self.rect[1] + self._y_pos[i]) + elif self._vert_align[i] == "middle": y = int(self.rect[1] + self._margins[1] + (my_height - h) / 2) elif self._vert_align[i] == "top": y = int(self.rect[1] + self._margins[1]) @@ -391,11 +417,14 @@ class Sprite: PangoCairo.show_layout(cr, pl) cr.restore() - def label_width(self): + def label_width(self, cr=None): ''' Calculate the width of a label ''' + if cr is None: + cr = self._sprites.cr max = 0 for i in range(len(self.labels)): - pl = self._sprites.canvas.create_pango_layout(self.labels[i]) + pl = PangoCairo.create_layout(cr) + pl.set_text(str(self.labels[i]), -1) self._fd.set_size(int(self._scale[i] * Pango.SCALE)) pl.set_font_description(self._fd) w = pl.get_size()[0] / Pango.SCALE @@ -1,61 +1,27 @@ -#Copyright (c) 2011 Walter Bender - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# You should have received a copy of the GNU General Public License -# along with this library; if not, write to the Free Software -# Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA - -import subprocess -from StringIO import StringIO -try: - OLD_SUGAR_SYSTEM = False - import json - json.dumps - 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: - OLD_SUGAR_SYSTEM = True - - -def json_load(text): - """ Load JSON data using what ever resources are available. """ - if OLD_SUGAR_SYSTEM is True: - listdata = json.read(text) - else: - # strip out leading and trailing whitespace, nulls, and newlines - io = StringIO(text) - try: - listdata = jload(io) - except ValueError: - # assume that text is ascii list - listdata = text.split() - for i, value in enumerate(listdata): - listdata[i] = int(value) - return listdata - - -def json_dump(data): - """ Save data using available JSON tools. """ - if OLD_SUGAR_SYSTEM is True: - return json.write(data) - else: - _io = StringIO() - jdump(data, _io) - return _io.getvalue() - - -def play_audio_from_file(file_path): - """ Audio media """ - command_line = ['gst-launch', 'filesrc', 'location=' + file_path, - '! oggdemux', '! vorbisdec', '! audioconvert', - '! alsasink'] - subprocess.call(command_line) +5sg31DHV+k5BUR1dr/MHzZbtvvWygbryso9uv+VGTFxksnbPRd2lF +i1fessNulxYf4z+fuZtzLa+JW2JuZTzp1wCPf+b5vP1euNaMTPQn2oeYhhga/3reqKqmOs4u +SXWnQ7R+mZ6B9m+rxv5VB//vfl/cAA2MtH69RPt3H9g/+HnYygKk8R9K9HDjym+2KvMKNWf9 +2uEgJ331yry8R/cbuiPC3HV/7ef/07+PG7YKXEN7D7bG2wkDPtSmpsYSDiAC1tXVHo+UqxOH +i7ZcvTTtrLGx/k8+PDKwQeVk+3MRncbfx85Q64rsHES5P/usaqBlk2hL8z7Dx3OO65CWE7qk +os3gmK6+5t+8F4reZ9TF+Xt726mAELl53py0OE1NdWYzwffF4g+Lnd8STEOCXDSxE3PudNn+ +mmW2c7JXqVCCrPHENleS2GRLDlsnKOy1i9dcymYZSC+1dCz5SFtAbZbWICullMhySQVyXs2S +3Aak75qpE3noGUFuu4dAAeJCHvrFkL7YXNKub0aWT1Qkm2S1YEMG6hW81nEcmxEl/Gd//auS +5X/2cb79fri+ULuDWg1sp3PMjCVdXQSKSQlerHWtWVOSk3zZeE9RtBod5aU/vyUt1s3NRgnf +A3/+3OnK7dghedUzZ2RGbYLfL10D7HAl17KXNOzV786pF+SzzQwn/tzmNBE6KjbOBqq/lgT9 +3msjryD3pykLzFpmdWpTzUe16JkH9XoDom2Yc/xXf+FzwzIzmOjmx9WJyrR2yqi1yJkEHae/ +9wuP+fesufAEZ8um/TqvqzeYHozJETprQGGAn433JWcGd8qcY3rDLSf0aAAe6NHroy1u3Gvw +OGmK0Bfvx9/zJRCxFao26p8uWWqxNL3CNjYwxsaMa82WGaNo/j3v+e/8HS1tjfGR6QL7yrWm +7QUtpo3+kTyTzYeyVlx6OP3R2XtFzysbw0Px+v2zjwnXvXOYZaBtjuSQTY4Esc6eQPgZ4yj/ +GumRnAZ+yVjBjGtAwGJLL+e7VnyoL3p0XVs4fFXbhqFVXdLgkSsAyvQEJzNgzDO3aNIflkle +eMSSG1CUXNaxJpuVdckSiKOn1cwJdkWeBaW+uRORfiXDxYPzc8UiW99A4lB0asvnMdl3PovN +vvo6oeDNk7icR5EOTn/db/G4sCCaJDWJsXPnWVhItRSXBn20cv2WL7btvXRrw46D1dl5zvL/ +BRqxf/a9fTf+5mQFW507VdlePCVc9Hue53/0uHhCjio/XqaTw2XJ/5b38vSxU73wsOzlqc8z +6A0fOVG1W0xPObhz1JrWO7d+0jONuvOqkdz8so5c7i6lO+8nUAt2ee129bJRQ7Dy3wmyYGxx +C+W7idLkL9imS99hmf00jXvsnLH4s/Pj2FtnSr4R5U0cSW9gz0OA5rdck//6n8EFF5rMt47J +5bv/PZugsqr8+//ORTt2wfFYlYDCwLU2lXH352m7egs0rEVm8oASjceiAxc1101PyOIY/UMd +CK6NiWz9br0HU5earopIsxU6uFuq/VRbT8C3mHT6WOV6EMeKAckfTEzw+03cXCUQ2jlYceV8 +RHYq5kbGMCLi/2wNiPfSBFqXYUm2gpw6QU7FSv5STFSQqz72ZWNtLr19c27Nqc6K9Vs3FtTk +5QTyykoinKZXx3rg8ft62KvOyAgLyHJ24ZZEBdqV5ofa40Pp4mKjWJgfbI1txswMPwsrK1Op +PbsKF+6+7D0y57ieGJIP6Hpok7kn9cjMwzqDc5YFVzQ3JgZ5egiVx9YmgyoY6U7IywnhHdlf +vAppXhA47VpX5OTU1iR4mUA347c8lLi5tcxKiegDPcGXPbPEOy66DSctUqSw8LDNlSKw6dI2 +2eMp62wJsbO/elWbodX64yqm1GlVDiB6tgT
\ No newline at end of file |