Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruno Coudoin <bruno.coudoin@free.fr>2009-11-07 20:56:43 (GMT)
committer Bruno Coudoin <bruno.coudoin@free.fr>2009-11-07 20:56:43 (GMT)
commit22c05cb156e0b308b8186676a976d85184f5c0a9 (patch)
treea9dae917ee42ca951119c658f08fa42f5b3fac75
parenta2047bc64b0aa57e03a2df5755ba5864c8497cf4 (diff)
iniital support for text items.
-rw-r--r--src/anim-activity/AnimItem.py117
-rw-r--r--src/anim-activity/anim.py59
2 files changed, 132 insertions, 44 deletions
diff --git a/src/anim-activity/AnimItem.py b/src/anim-activity/AnimItem.py
index 48e4de9..2a444e3 100644
--- a/src/anim-activity/AnimItem.py
+++ b/src/anim-activity/AnimItem.py
@@ -26,6 +26,7 @@ import gtk
import gtk.gdk
import math
import cairo
+import pango
import sys
class AnimItem:
@@ -967,3 +968,119 @@ class AnimItemPixmap(AnimItem):
# Unsupported
pass
+
+#
+# The Text
+#
+class AnimItemText(AnimItem):
+
+ def __init__(self, anim, center_x, center_y,
+ color_stroke):
+ AnimItem.__init__(self, anim)
+ center_x, center_y = self.snap_to_grid(center_x, center_y)
+
+ self.item = \
+ goocanvas.Text(
+ parent = self.rootitem,
+ x = center_x,
+ y = center_y,
+ text=("?"),
+ fill_color_rgba=color_stroke,
+ anchor = gtk.ANCHOR_CENTER,
+ alignment = pango.ALIGN_CENTER,
+ )
+
+ AnimItem.init_item(self)
+ self.last_commit = None
+
+
+ # This is called when an animation file is loaded
+ def restore(self, anim_):
+ AnimItem.restore(self, anim_)
+ self.item = \
+ goocanvas.Text(
+ parent = self.rootitem
+ )
+ AnimItem.init_item(self)
+
+ def set_bounds(self, p1, p2):
+ (x1, y1, x2, y2) = self.snap_obj_to_grid(p1, p2)
+ center_x = ( x2 - x1 )/ 2
+ center_y = ( y2 - y1) / 2
+ self.item.set_properties(x = center_x,
+ y = center_y)
+
+ def get_x1y1(self):
+ bounds = self.item.get_bounds()
+ return(bounds.x1, bounds.y1)
+
+ def get_x2y1(self):
+ bounds = self.item.get_bounds()
+ return(bounds.x2, bounds.y1)
+
+ def get_x2y2(self):
+ bounds = self.item.get_bounds()
+ return(bounds.x2, bounds.y2)
+
+ def get_x1y2(self):
+ bounds = self.item.get_bounds()
+ return(bounds.x1, bounds.y2)
+
+ # Return the list of properties that have to be saved for
+ # this object
+ def get_properties(self):
+ return('x', 'y',
+ 'fill_color_rgba',
+ 'text')
+
+ def fill(self, fill, stroke):
+ gcompris.sound.play_ogg("sounds/paint1.wav")
+ self.item.set_properties(fill_color_rgba = stroke)
+
+ def key_press(self, keyval, commit_str, preedit_str):
+ #
+ # I suppose codec is the stdin one.
+ #
+ codec = sys.stdin.encoding
+ textItem = self.item
+ if (not self.last_commit):
+ oldtext = textItem.get_property('text').decode('UTF-8')
+ else:
+ oldtext = self.last_commit
+
+ if ((keyval == gtk.keysyms.BackSpace) or
+ (keyval == gtk.keysyms.Delete)):
+ if (len(oldtext) != 1):
+ newtext = oldtext[:-1]
+ else:
+ newtext = u'?'
+ self.last_commit = newtext
+
+ elif (keyval == gtk.keysyms.Return):
+ newtext = oldtext + '\n'
+ self.last_commit = newtext
+
+ else:
+ if ((oldtext[:1] == u'?') and (len(oldtext)==1)):
+ oldtext = u' '
+ oldtext = oldtext.strip()
+
+ if (commit_str):
+ str = commit_str
+ self.last_commit = oldtext + str
+ if (preedit_str):
+ str = preedit_str
+ self.last_commit = oldtext
+
+ if (len(oldtext) < 100):
+ newtext = oldtext + str
+ else:
+ newtext = oldtext
+
+ textItem.set_properties(text = newtext.encode('UTF-8'))
+
+ print "Text item extend: "
+ a = textItem.get_natural_extends()
+ print a
+
+
diff --git a/src/anim-activity/anim.py b/src/anim-activity/anim.py
index b6204aa..386e20e 100644
--- a/src/anim-activity/anim.py
+++ b/src/anim-activity/anim.py
@@ -103,8 +103,6 @@ class Gcompris_anim:
self.file_type = ".gcanim"
- self.MAX_TEXT_CHAR = 50
-
# Part of UI : tools buttons
# TOOL SELECTION
self.tools = [
@@ -160,8 +158,6 @@ class Gcompris_anim:
def start(self):
- self.last_commit = None
-
# GCompris initialisation
self.gcomprisBoard.level=1
self.gcomprisBoard.maxlevel=1
@@ -267,51 +263,17 @@ class Gcompris_anim:
if (not self.selected):
return False
- if (self.selected.type_name() != "GooCanvasText"):
- # Process shortcuts on non text items
- if ((keyval == gtk.keysyms.BackSpace) or
- (keyval == gtk.keysyms.Delete)):
- self.selected.delete()
+ if (self.selected.type_name() == "GooCanvasText"):
+ self.selected.key_press(keyval, commit_str, preedit_str)
return True
- textItem = self.selected.get_child(0)
- if (not self.last_commit):
- oldtext = textItem.get_property('text').decode('UTF-8')
- else:
- oldtext = self.last_commit
-
+ # Process shortcuts on non text items
if ((keyval == gtk.keysyms.BackSpace) or
(keyval == gtk.keysyms.Delete)):
- if (len(oldtext) != 1):
- newtext = oldtext[:-1]
- else:
- newtext = u'?'
- self.last_commit = newtext
-
- elif (keyval == gtk.keysyms.Return):
- newtext = oldtext + '\n'
- self.last_commit = newtext
-
- else:
- if ((oldtext[:1] == u'?') and (len(oldtext)==1)):
- oldtext = u' '
- oldtext = oldtext.strip()
-
- if (commit_str):
- str = commit_str
- self.last_commit = oldtext + str
- if (preedit_str):
- str = '<span foreground="red">'+ preedit_str +'</span>'
- self.last_commit = oldtext
-
- if (len(oldtext) < self.MAX_TEXT_CHAR):
- newtext = oldtext + str
- else:
- newtext = oldtext
-
- textItem.set_properties(text = newtext.encode('UTF-8'))
+ self.selected.delete()
+ return True
- return True
+ return False
# Display the tools
def draw_tools(self):
@@ -640,6 +602,10 @@ class Gcompris_anim:
self.created_object = AnimItemLine(self,
event.x, event.y,
None, self.color.stroke, 7)
+ elif self.tools[self.current_tool][0] == "TEXT":
+ self.created_object = AnimItemText(self,
+ event.x, event.y,
+ self.color.stroke)
if self.created_object:
self.created_object.create_item_event(item,
@@ -648,6 +614,11 @@ class Gcompris_anim:
# We keep all object in a unique list
self.animlist.append(self.created_object)
+ # Mark it as selected so we can write in it without
+ # having to make a real selection and keys shortcuts
+ # works
+ self.selected = self.created_object
+
#
# MOTION EVENT
# ------------