[Commits] typing-turtle branch master updated.

Wade Brainerd wadetb at gmail.com
Mon Dec 15 22:30:55 EST 2008


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "/home/olpc-code/git/activities/typing-turtle".

The branch, master has been updated
       via  096a9758f7410a01d6fd8b76cc61f31d64a340df (commit)
       via  f9ff467b4000ce3e509e0a2824d522065ba2832f (commit)
      from  d279c4680c0bdff198fdc7f880a105a882eed9ec (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

 images/r_homerow.svg |   21 +++++++++++++
 keyboard.py          |   82 ++++++++++++++++++++++++++++++++-----------------
 2 files changed, 74 insertions(+), 29 deletions(-)
 create mode 100755 images/r_homerow.svg

- Log -----------------------------------------------------------------
commit 096a9758f7410a01d6fd8b76cc61f31d64a340df
Merge: f9ff467... d279c46...
Author: Wade Brainerd <wadetb at gmail.com>
Date:   Tue Dec 16 03:30:44 2008 +0000

    Merge branch 'master' of git+ssh://wadeb@dev.laptop.org/git/activities/typing-turtle

commit f9ff467b4000ce3e509e0a2824d522065ba2832f
Author: Wade Brainerd <wadetb at gmail.com>
Date:   Tue Dec 16 03:30:22 2008 +0000

    WIP on keyboard overlays.

diff --git a/images/r_homerow.svg b/images/r_homerow.svg
new file mode 100755
index 0000000..66acd42
--- /dev/null
+++ b/images/r_homerow.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="987.274px" height="1619.987px" viewBox="0 0 987.274 1619.987" enable-background="new 0 0 987.274 1619.987"
+	 xml:space="preserve">
+<path fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="M564.638,1572.356
+	c-20.131-151.191-58.518-299.367-69.832-451.723c-4.541-61.139-20.056-77.17-72.176-103.727
+	c-58.36-29.736-107.368-91.171-161.106-129.753c-55.319-39.717-85.746-90.433-122.6-146.227
+	C106.517,691.853,87.012,629.111,53.42,584.11C35.162,559.651-11.631,481.239,3.061,452.654
+	c25.577-49.707,111.793,0.158,133.86,24.371c64.295,70.547,70.284,152.069,157.089,199.44c8.545,4.663-9.014-118.235-11.692-131.273
+	c-14.503-70.591-34.967-139.859-55.289-208.942c-18.213-61.913-43.449-124.849-53.674-188.737
+	c-8.294-51.823,16.741-129.36,79.813-74.817c50.884,44.003,86.21,353.286,172.488,345.575
+	c21.054-74.923-2.098-161.041-15.168-235.526c-7.948-45.297-50.25-196.176,40.983-181.492
+	c64.797,10.428,66.693,104.694,78.904,153.955c7.66,30.903,31.077,223.268,61.601,228.504
+	c64.418-86.787-52.426-282.233,40.399-355.982c85.646-68.046,85.365,125.045,86.547,158.913
+	c1.41,40.439-16.075,201.321,32.894,220.829c57.853-90.469,0.957-214.106,48.11-310.045c21.765-44.282,84.195-50.96,95.019,4.542
+	c8.84,45.31-10.969,110.773-14.85,157.326c-10.18,122.136,11.189,235.617,16.438,356.979
+	c5.678,131.335-21.525,268.258,4.545,395.594c26.381,128.846,42.131,259.675,60.357,389.854
+	c11.896,84.961,67.592,176.936-36.132,195.151C850.704,1609.973,613.405,1652.12,564.638,1572.356"/>
+</svg>
diff --git a/keyboard.py b/keyboard.py
index 1eb340f..6e93a48 100644
--- a/keyboard.py
+++ b/keyboard.py
@@ -19,6 +19,9 @@
 import pygtk
 pygtk.require('2.0')
 import gtk
+import cairo
+import os, sugar.activity.activity
+import rsvg
 
 # List of all key properties in the keyboard layout description.
 #
@@ -246,7 +249,7 @@ class Keyboard(gtk.EventBox):
         self.area = gtk.DrawingArea()
         self.area.connect("expose-event", self._expose_cb)
         self.add(self.area)
-
+        
         # Initialize the default cairo context to None. 
         cr = None
         
@@ -265,6 +268,11 @@ class Keyboard(gtk.EventBox):
         
         self.shift_down = False
         
+        # Load SVG files.
+        bundle_path = sugar.activity.activity.get_bundle_path() 
+        #self.rhand_svg = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(bundle_path, 'images', 'r_homerow.svg'), 775, 300)
+        self.rhand_svg = rsvg.Handle(os.path.join(bundle_path, 'images', 'r_homerow.svg'))
+        
         # Connect keyboard grabbing and releasing callbacks.        
         self.area.connect('realize', self._realize_cb)
         self.area.connect('unrealize', self._unrealize_cb)
@@ -375,23 +383,23 @@ class Keyboard(gtk.EventBox):
         """Applies the scaling factor to the layout given the current
            allocation."""
         bounds = self.get_allocation()
- 
+        
+        # This calculates a ratio from layout coordinates to the DrawingArea's
+        # dimensions.  This ratio allows the layout coordinates to be *anything* -
+        # inches, millimeters, percentage, whatever.  They just have to be
+        # relative to layout-width and layout-height.
+        ratio_x = 100 * bounds.width / self.keys[0].props['layout-width']
+        ratio_y = 100 * bounds.height / self.keys[0].props['layout-height']
+        
+        # Pick the smaller ratio to fit while preserving aspect ratio.
+        self.screen_ratio = min(ratio_x, ratio_y)
+        
         for k in self.keys:
-            # This calculates a ratio from layout coordinates to the DrawingArea's
-            # dimensions.  This ratio allows the layout coordinates to be *anything* -
-            # inches, millimeters, percentage, whatever.  They just have to be
-            # relative to layout-width and layout-height.
-            ratio_x = 100 * bounds.width / k.props['layout-width']
-            ratio_y = 100 * bounds.height / k.props['layout-height']
-            
-            # Pick the smaller ratio to fit while preserving aspect ratio.
-            ratio = min(ratio_x, ratio_y)
-            
             # Make sure the final coordinates are integers, for the drawing routines.
-            k.screen_x = int(k.x * ratio / 100)
-            k.screen_y = int(k.y * ratio / 100)
-            k.screen_width = int(k.width * ratio / 100)
-            k.screen_height = int(k.height * ratio / 100)
+            k.screen_x = int(k.x * self.screen_ratio / 100)
+            k.screen_y = int(k.y * self.screen_ratio / 100)
+            k.screen_width = int(k.width * self.screen_ratio / 100)
+            k.screen_height = int(k.height * self.screen_ratio / 100)
 
     def _expose_key(self, k, cr=None):
         # Create cairo context if need be.
@@ -399,14 +407,14 @@ class Keyboard(gtk.EventBox):
             if not self.area.window:
                 return
             cr = self.area.window.cairo_create()
-
+        
         cr.save()
-
+        
         x1 = k.screen_x
         y1 = k.screen_y
         x2 = k.screen_x + k.screen_width
         y2 = k.screen_y + k.screen_height
-
+        
         # Outline rounded box.
         corner = 5
         cr.move_to(x1 + corner, y1)
@@ -418,7 +426,7 @@ class Keyboard(gtk.EventBox):
         cr.line_to(x1, y2 - corner)
         cr.line_to(x1, y1 + corner)
         cr.close_path()
-
+        
         if k.pressed:
             cr.set_source_rgb(1.0, 0.6, 0.6)
         elif k.hilite:
@@ -426,12 +434,12 @@ class Keyboard(gtk.EventBox):
         else:
             cr.set_source_rgb(1.0, 1.0, 1.0)
         cr.fill_preserve()
-
+        
         cr.set_source_rgb(0.1, 0.1, 0.1)
         cr.stroke_preserve()
-
+        
         cr.clip()
-
+        
         # Inner text.
         text = ''
         if k.props['key-label']:
@@ -445,28 +453,44 @@ class Keyboard(gtk.EventBox):
                     text = unichr(key).encode('utf-8')
                 except:
                     pass
-
+        
         cr.set_font_size(16)
         x_bearing, y_bearing, width, height = cr.text_extents(text)[:4]
-
+        
         cr.move_to(x1+8 - x_bearing, y2-8 - height - y_bearing)
         cr.show_text(text)
-
+        
         cr.restore()
 
     def _expose_cb(self, area, event):
         # Update layout given widget size.
         self._update_screen_layout()
-
+        
         # Draw the keys.
         cr = self.area.window.cairo_create()
-
+        
         cr.rectangle(event.area.x, event.area.y, event.area.width, event.area.height)
         cr.clip()
-
+        
         for k in self.keys:
             self._expose_key(k, cr)
+        
+        # Render overlay images.
+        ratio = self.keys[0].props['layout-width'] / 3146.0
+        ratio = self.screen_ratio / 100.0 * ratio
+
+        cr.save()
+        cr.scale(ratio, ratio)
+        cr.translate(1350, 625)
+        self.rhand_svg.render_cairo(cr)
+        cr.restore()
 
+        cr.save()
+        cr.scale(-ratio, ratio)
+        cr.translate(-100, 625)
+        self.rhand_svg.render_cairo(cr)
+        cr.restore()
+        
         return True
 
     def _key_press_release_cb(self, widget, event):
-----------------------------------------------------------------------


--
/home/olpc-code/git/activities/typing-turtle


More information about the Commits mailing list