Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgnacio 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)
commit6c3d04902f271b0360df3f129bc753228704fc2c (patch)
tree2af93603bc066577d0152fb72b7b444686592cc7
parentb062293858158924957cdbea01715c700bb17710 (diff)
Port to GTK3 Completed!
-rw-r--r--StoryActivity.py10
-rw-r--r--activity/ - flavi.o D0
-rw-r--r--game.py35
-rw-r--r--game.pyobin0 -> 9718 bytes
-rw-r--r--grecord.pyobin0 -> 7704 bytes
-rw-r--r--sprites.py49
-rw-r--r--utils.py88
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
diff --git a/game.py b/game.py
index cc5f450..0d7e56a 100644
--- a/game.py
+++ b/game.py
@@ -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
new file mode 100644
index 0000000..8086263
--- /dev/null
+++ b/game.pyo
Binary files differ
diff --git a/grecord.pyo b/grecord.pyo
new file mode 100644
index 0000000..d3f8744
--- /dev/null
+++ b/grecord.pyo
Binary files differ
diff --git a/sprites.py b/sprites.py
index e35f67b..8cad6a6 100644
--- a/sprites.py
+++ b/sprites.py
@@ -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
diff --git a/utils.py b/utils.py
index 230ab45..ea9a27e 100644
--- a/utils.py
+++ b/utils.py
@@ -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