[gcompris/gcomprixogoo] iniital support for text items.



commit 22c05cb156e0b308b8186676a976d85184f5c0a9
Author: Bruno Coudoin <bruno coudoin free fr>
Date:   Sat Nov 7 21:56:43 2009 +0100

    iniital support for text items.

 src/anim-activity/AnimItem.py |  117 +++++++++++++++++++++++++++++++++++++++++
 src/anim-activity/anim.py     |   59 +++++---------------
 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
     # ------------



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]