pygoocanvas r250 - in trunk: . demo/simple_demo



Author: gianmt
Date: Tue Dec 30 17:04:03 2008
New Revision: 250
URL: http://svn.gnome.org/viewvc/pygoocanvas?rev=250&view=rev

Log:
Add an export SVG function in demo

Modified:
   trunk/ChangeLog
   trunk/demo/simple_demo/demo.py

Modified: trunk/demo/simple_demo/demo.py
==============================================================================
--- trunk/demo/simple_demo/demo.py	(original)
+++ trunk/demo/simple_demo/demo.py	Tue Dec 30 17:04:03 2008
@@ -49,27 +49,27 @@
 
     def center_toggled (button, data):
         pass
-    
+
     def anchor_toggled (self, button, canvas):
         anchor = button.get_data("anchor")
         canvas.props.anchor = anchor
-        
+
     def scroll_to_50_50_clicked (self, button, canvas):
         canvas.scroll_to (50, 50)
-    
+
     def scroll_to_250_250_clicked (self, button, canvas):
         canvas.scroll_to (250, 250)
-    
+
     def scroll_to_500_500_clicked (self, button, canvas):
         canvas.scroll_to (500, 500)
-        
+
     def animate_ellipse_clicked (self, button, canvas):
         self.ellipse2.animate (100, 100, 1, 90, True, 1000, 40,
                                goocanvas.ANIMATE_BOUNCE)
-    
+
     def stop_animation_clicked (self, button, canvas):
         self.ellipse2.stop_animation()
-    
+
     def move_ellipse_clicked (self, button, canvas):
         self.ellipse2.set_transform(None)
         if self.last_state == 0:
@@ -102,7 +102,7 @@
             self.ellipse2.props.line_width = 4
             self.ellipse2.props.title = "A purple ellipse"
             self.last_state = 0
-    
+
     def setup_item_signals (self, item):
         item.connect ("motion_notify_event", self.on_motion_notify)
         item.connect ("button_press_event", self.on_button_press)
@@ -114,7 +114,7 @@
             new_y = event.y
             item.translate (new_x - self.drag_x, new_y - self.drag_y)
         return True
-    
+
     def on_button_press (self, item, target, event):
         if event.button == 1:
             if event.state & gtk.gdk.SHIFT_MASK:
@@ -142,159 +142,166 @@
         canvas = item.get_canvas ()
         canvas.pointer_ungrab (item, event.time)
         self.dragging = False
-    
+
     def on_background_button_press (self, item, target, event):
         print "background received 'button-press' signal"
         return True
 
     def create_canvas_primitives (self):
         bg_color = gtk.gdk.Color (50000, 50000, 65535, 0)
-        
+
         vbox = gtk.VBox (False, 4)
         vbox.set_border_width (4)
-        
+
         w = gtk.Label ("Drag an item with button 1.  Click button 2 on an item to lower it, or button 3 to raise it.")
-        
+
         hbox = gtk.HBox (False, 4)
-        
+
         vbox.pack_start (w, False, False, 0)
         vbox.pack_start (hbox, False, False, 0)
-        
-        ''' Create the canvas'''   
-        
+
+        ''' Create the canvas'''
+
         canvas = goocanvas.Canvas()
         canvas.modify_base (gtk.STATE_NORMAL, bg_color)
         canvas.set_bounds (0, 0, 604, 454)
-        
+
         ''' Zoom '''
-        
+
         w = gtk.Label ("Zoom:")
-        
+
         hbox.pack_start (w, False, False, 0)
-        
+
         adj = gtk.Adjustment (1.00, 0.05, 100.00, 0.05, 0.50, 0.50)
         adj.connect("value_changed", self.zoom_changed, canvas)
-        
+
         w = gtk.SpinButton (adj, 0.0, 2)
         w.set_size_request (50, -1)
-        
+
         hbox.pack_start (w, False, False, 0)
-        
+
         ''' Center '''
-        
+
         w = gtk.CheckButton("Center scroll region")
-        
+
         hbox.pack_start (w, False, False, 0)
-        
+
         w.connect ("toggled", self.center_toggled, canvas)
-    
+
         ''' Move Ellipse '''
-    
+
         w = gtk.Button ("Move Ellipse")
         hbox.pack_start (w, False, False, 0)
         w.connect ("clicked", self.move_ellipse_clicked, canvas)
-    
+
         ''' Animate Ellipse '''
-    
+
         w = gtk.Button ("Animate Ellipse")
         hbox.pack_start (w, False, False, 0)
         w.connect ("clicked", self.animate_ellipse_clicked, canvas)
-        
+
         ''' Stop Animation '''
-    
+
         w = gtk.Button ("Stop Animation")
         hbox.pack_start (w, False, False, 0)
         w.connect ("clicked", self.stop_animation_clicked, canvas)
-        
-    
+
+
         if cairo.HAS_PDF_SURFACE:
             '''Create PDF '''
-    
+
             w = gtk.Button ("Write PDF")
             hbox.pack_start (w, False, False, 0)
             w.connect ("clicked", self.write_pdf_clicked, canvas)
-    
+
+        if cairo.HAS_SVG_SURFACE:
+            '''Create SVG '''
+
+            w = gtk.Button ("Write SVG")
+            hbox.pack_start (w, False, False, 0)
+            w.connect ("clicked", self.write_svg_clicked, canvas)
+
         hbox = gtk.HBox (False, 4)
         vbox.pack_start (hbox, False, False, 0)
-    
+
         ''' Scroll to '''
-    
+
         w = gtk.Label ("Scroll To:")
         hbox.pack_start (w, False, False, 0)
-    
+
         w = gtk.Button ("50,50")
         hbox.pack_start (w, False, False, 0)
         w.connect ("clicked", self.scroll_to_50_50_clicked, canvas)
-    
+
         w = gtk.Button ("250,250")
         hbox.pack_start (w, False, False, 0)
         w.connect ("clicked", self.scroll_to_250_250_clicked, canvas)
-    
+
         w = gtk.Button ("500,500")
         hbox.pack_start (w, False, False, 0)
         w.connect ("clicked", self.scroll_to_500_500_clicked, canvas)
-    
+
         ''' Scroll anchor '''
-    
+
         w = gtk.Label ("Anchor:")
         hbox.pack_start (w, False, False, 0)
-    
+
         group = gtk.RadioButton (None, "NW")
         hbox.pack_start (group, False, False, 0)
         group.connect ("toggled", self.anchor_toggled, canvas)
         group.set_data ("anchor", gtk.ANCHOR_NW)
-    
+
         w = gtk.RadioButton (group, "N")
         hbox.pack_start (w, False, False, 0)
         w.connect ("toggled", self.anchor_toggled, canvas)
         w.set_data ("anchor", gtk.ANCHOR_N)
-    
+
         w = gtk.RadioButton (group, "NE")
         hbox.pack_start (w, False, False, 0)
         w.connect ("toggled", self.anchor_toggled, canvas)
         w.set_data ("anchor", gtk.ANCHOR_NE)
-    
+
         w = gtk.RadioButton (group, "W")
         hbox.pack_start (w, False, False, 0)
         w.connect ("toggled", self.anchor_toggled, canvas)
         w.set_data ("anchor", gtk.ANCHOR_W)
-    
+
         w = gtk.RadioButton (group, "C")
         hbox.pack_start (w, False, False, 0)
         w.connect ("toggled", self.anchor_toggled, canvas)
         w.set_data ("anchor", gtk.ANCHOR_CENTER)
-    
+
         w = gtk.RadioButton (group, "E")
         hbox.pack_start (w, False, False, 0)
         w.connect ("toggled", self.anchor_toggled, canvas)
         w.set_data ("anchor", gtk.ANCHOR_E)
-    
+
         w = gtk.RadioButton (group, "SW")
         hbox.pack_start (w, False, False, 0)
         w.connect ("toggled", self.anchor_toggled, canvas)
         w.set_data ("anchor", gtk.ANCHOR_SW)
-    
+
         w = gtk.RadioButton (group, "S")
         hbox.pack_start (w, False, False, 0)
         w.connect ("toggled", self.anchor_toggled, canvas)
         w.set_data ("anchor", gtk.ANCHOR_S)
-    
+
         w = gtk.RadioButton (group, "SE")
         hbox.pack_start (w, False, False, 0)
         w.connect ("toggled", self.anchor_toggled, canvas)
         w.set_data ("anchor", gtk.ANCHOR_SE)
-    
-        
+
+
         ''' Layout the stuff '''
-    
+
         scrolled_win = gtk.ScrolledWindow ()
         vbox.pack_start (scrolled_win, True, True, 0)
-    
+
         scrolled_win.add(canvas)
-    
+
         ''' Add all the canvas items. '''
         self.setup_canvas (canvas)
-    
+
         return vbox
 
     def write_pdf_clicked (self, button, canvas):
@@ -309,42 +316,56 @@
         canvas.render (cr, None, 1.0)
 
         cr.show_page ()
-    
+
+
+    def write_svg_clicked (self, button, canvas):
+        print "In write_svg_clicked"
+
+        surface = cairo.SVGSurface ("demo.svg", 9 * 72, 10 * 72)
+        cr = cairo.Context (surface)
+
+        ''' Place it in the middle of our 9x10 page. '''
+        cr.translate (20, 130)
+
+        canvas.render (cr, None, 1.0)
+
+        cr.show_page ()
+
     def setup_heading (self, root, text, pos):
         x = (pos % 3) * 200 + 100
         y = (pos / 3) * 150 + 5
-        
-        item = goocanvas.Text (text=text, 
-                               x=x, 
-                               y=y, 
+
+        item = goocanvas.Text (text=text,
+                               x=x,
+                               y=y,
                                width=-1,
                                anchor=gtk.ANCHOR_N,
                                font = "Sans 12")
         item.skew_y (30, x, y)
-    
+
     def setup_divisions (self, root):
         group = goocanvas.Group (parent = root)
         group.translate (2, 2)
-        
+
         item = goocanvas.Rect (parent = group,
                                x = 0,
                                y = 0,
                                width = 600,
                                height = 450,
                                line_width = 4.0)
-        
+
         item = goocanvas.polyline_new_line (group, 0, 150, 600, 150,
                                             line_width = 4.0)
-        
+
         item = goocanvas.polyline_new_line (group, 0, 300, 600, 300,
                                             line_width = 4.0)
-        
+
         item = goocanvas.polyline_new_line (group, 200, 0, 200, 450,
                                             line_width = 4.0)
-        
+
         item = goocanvas.polyline_new_line (group, 400, 0, 400, 450,
                                             line_width = 4.0)
-        
+
         self.setup_heading(group, "Rectangles", 0)
         self.setup_heading(group, "Ellipses", 1)
         self.setup_heading(group, "Texts", 2)
@@ -354,10 +375,10 @@
 
     def create_stipple (self, color_name):
         color = gtk.gdk.color_parse (color_name)
-        
-        stipple_data = array.array('B', [0, 0, 0, 255,   0, 0, 0, 0,   
+
+        stipple_data = array.array('B', [0, 0, 0, 255,   0, 0, 0, 0,
                                          0, 0, 0, 0,   0, 0, 0, 255])
-        
+
         stipple_data[2] = stipple_data[14] = color.red >> 8
         stipple_data[1] = stipple_data[13] = color.green >> 8
         stipple_data[0] = stipple_data[12] = color.blue >> 8
@@ -367,14 +388,14 @@
                                                       2, 2, 8)
         pattern = cairo.SurfacePattern(surface)
         pattern.set_extend (cairo.EXTEND_REPEAT)
-    
+
         ## FIXME workaround a bug into pycairo
         ## https://bugs.freedesktop.org/show_bug.cgi?id=18947
         global foo
         foo.append(stipple_data)
 
-        return pattern    
-    
+        return pattern
+
     def setup_rectangles (self, root):
         item = goocanvas.Rect (parent = root,
                                x = 20,
@@ -384,7 +405,7 @@
                                stroke_color = "red",
                                line_width = 8.0)
         self.setup_item_signals (item)
-        
+
         pattern = self.create_stipple ("mediumseagreen")
         item = goocanvas.Rect (parent = root,
                                x = 90,
@@ -395,7 +416,7 @@
                                stroke_color = "black",
                                line_width = 4.0)
         self.setup_item_signals (item)
-        
+
         item = goocanvas.Rect (parent = root,
                                x = 10,
                                y = 80,
@@ -403,7 +424,7 @@
                                height = 60,
                                fill_color = "steelblue")
         self.setup_item_signals (item)
-    
+
         item = goocanvas.Rect (parent = root,
                                x = 20,
                                y = 90,
@@ -413,7 +434,7 @@
                                stroke_color = "blue",
                                line_width = 2.0)
         self.setup_item_signals (item)
-    
+
         item = goocanvas.Rect (parent = root,
                                x = 110,
                                y = 80,
@@ -424,7 +445,7 @@
                                stroke_color = "yellow",
                                fill_color_rgba = 0x3cb3f180)
         self.setup_item_signals (item)
-    
+
         item = goocanvas.Rect (parent = root,
                                x = 30,
                                y = 20,
@@ -432,7 +453,7 @@
                                height = 30,
                                fill_color = "yellow")
         self.setup_item_signals (item)
-        
+
     def setup_ellipses (self, root):
         ellipse1 = goocanvas.Ellipse (parent = root,
                                       center_x = 245,
@@ -442,7 +463,7 @@
                                       stroke_color = "goldenrod",
                                       line_width = 8.0)
         self.setup_item_signals (ellipse1)
-        
+
         self.ellipse2 = goocanvas.Ellipse (parent = root,
                                            center_x = 335,
                                            center_y = 70,
@@ -453,7 +474,7 @@
                                            line_width = 4.0,
                                            title = "An ellipse")
         self.setup_item_signals (self.ellipse2)
-        
+
         pattern = self.create_stipple ("cadetblue")
         ellipse3 = goocanvas.Ellipse (parent = root,
                                       center_x = 245,
@@ -463,7 +484,7 @@
                                       fill_pattern = pattern,
                                       stroke_color = "black",
                                       line_width = 1.0)
-        self.setup_item_signals (ellipse3)    
+        self.setup_item_signals (ellipse3)
 
     def polish_diamond (self, root):
         group = goocanvas.Group (parent = root,
@@ -471,7 +492,7 @@
                                  line_cap = cairo.LINE_CAP_ROUND)
         group.translate (270, 230)
         self.setup_item_signals (group)
-        
+
         i = 0
         while i < self.VERTICES:
             a = 2.0 * math.pi * i / self.VERTICES
@@ -492,7 +513,7 @@
 
         points = [(340, 290),]
         count = 0
-        
+
         for letter in hilbert:
             if letter == 'u':
                 p = points[count][0]
@@ -513,9 +534,9 @@
             count += 1
 
         points = goocanvas.Points(points)
-        
+
         pattern = self.create_stipple("red")
-        
+
         item = goocanvas.Polyline (parent = root,
                                    close_path = False,
 				   points = points,
@@ -523,16 +544,16 @@
 				   stroke_pattern = pattern,
 				   line_cap = cairo.LINE_CAP_SQUARE,
 				   line_join = cairo.LINE_JOIN_MITER)
-        
+
         self.setup_item_signals (item)
 
-    
+
     def setup_lines (self, root):
         self.polish_diamond (root)
         self.make_hilbert (root)
-        
+
         ''' Arrow tests '''
-        p = goocanvas.Points ([(340.0, 170.0), (340.0, 230.0), 
+        p = goocanvas.Points ([(340.0, 170.0), (340.0, 230.0),
                                     (390.0, 230.0), (390.0, 170.0)])
         polyline1 = goocanvas.Polyline (parent = root,
                                         points = p,
@@ -545,7 +566,7 @@
                                         arrow_length = 4.0,
                                         arrow_width = 3.5)
         self.setup_item_signals (polyline1)
-        
+
         p = goocanvas.Points ([(356.0, 180.0), (374.0, 220.0)])
         polyline2 = goocanvas.Polyline (parent = root,
                                         points = p,
@@ -558,7 +579,7 @@
                                         arrow_length = 6.0,
                                         arrow_width = 6.5)
         self.setup_item_signals (polyline2)
-        
+
         p = goocanvas.Points ([(356.0, 220.0), (374.0, 180.0)])
         polyline3 = goocanvas.Polyline (parent = root,
                                         points = p,
@@ -583,9 +604,9 @@
                                         start_arrow = True,
                                         end_arrow = True)
         self.setup_item_signals (polyline5)
-    
+
     def setup_polygons (self, root):
-        points = goocanvas.Points ([(210.0, 320.0), (210.0, 380.0), 
+        points = goocanvas.Points ([(210.0, 320.0), (210.0, 380.0),
                                     (260.0, 350.0)])
         pattern = self.create_stipple ("blue")
         polyline1 = goocanvas.Polyline (parent = root,
@@ -595,7 +616,7 @@
                                         fill_pattern = pattern,
                                         stroke_color = "black")
         self.setup_item_signals (polyline1)
-        
+
         points = goocanvas.Points ([(270.0, 330.0), (270.0, 430.0),
                                     (390.0, 430.0), (390.0, 330.0),
                                     (310.0, 330.0), (310.0, 390.0),
@@ -609,7 +630,7 @@
                                         points = points,
                                         fill_color = "tan",
                                         stroke_color = "black")
-        self.setup_item_signals (polyline2)    
+        self.setup_item_signals (polyline2)
 
     def make_anchor (self, root, x, y):
         trans = cairo.Matrix(0.8, 0.2, -0.3, 0.5, x, y)
@@ -635,14 +656,14 @@
         par = self.make_anchor (root, 420.0, 20.0)
         item = goocanvas.Text (parent = par,
                                text = "Anchor NW",
-                               x = 0, 
+                               x = 0,
                                y = 0,
                                width = -1,
                                anchor = gtk.ANCHOR_NW,
                                font = "Sans Bold 24",
                                fill_pattern = pattern)
         self.setup_item_signals (item)
-        
+
         par = self.make_anchor (root, 470, 75)
         item = goocanvas.Text (parent = par,
                                text = "Anchor center\nJustify center\nMultiline text\nb8bit text",
@@ -654,7 +675,7 @@
                                alignment = pango.ALIGN_CENTER,
                                fill_color = "firebrick")
         self.setup_item_signals (item);
-        
+
         par = self.make_anchor (root, 420, 240)
         textitem = goocanvas.Text (parent = par,
                                    text = "This is a very long paragraph that will need to be wrapped over several lines so we can see what happens to line-breaking as the view is zoomed in and out.",
@@ -665,7 +686,7 @@
                                    font = "Sans 12",
                                    fill_color = "goldenrod")
         self.setup_item_signals (textitem)
-        
+
         textitem = goocanvas.Text (parent = root,
                                    text = "Ellipsized text.",
                                    x = 20,
@@ -676,7 +697,7 @@
                                    fill_color = "blue",
                                    ellipsize = pango.ELLIPSIZE_END)
         self.setup_item_signals (textitem)
-        
+
 
     def setup_invisible_texts (self, root):
         text = goocanvas.Text (parent = root,
@@ -687,7 +708,7 @@
                                anchor = gtk.ANCHOR_CENTER,
                                visibility = goocanvas.ITEM_VISIBLE_ABOVE_THRESHOLD,
                                visibility_threshold = 0.8)
-        
+
         goocanvas.Rect (parent = root,
                         x = 410.5,
                         y = 322.5,
@@ -696,7 +717,7 @@
                         line_width = 1.0,
                         visibility = goocanvas.ITEM_VISIBLE_ABOVE_THRESHOLD,
                         visibility_threshold = 0.8)
-        
+
         text = goocanvas.Text (parent = root,
                                text = "Visible above 1.5x",
                                x = 500,
@@ -732,7 +753,7 @@
                         line_width = 1.0,
                         visibility = goocanvas.ITEM_VISIBLE_ABOVE_THRESHOLD,
                         visibility_threshold = 3.0)
-        
+
         ''' This should never be seen. '''
         text = goocanvas.Text (parent = root,
                                text = "Always Invisible",
@@ -755,11 +776,11 @@
 
         w = surface.get_width ()
         h = surface.get_height ()
-        
+
         pattern = cairo.SurfacePattern(surface)
-        
+
         image = goocanvas.Image (parent = root,
-                                 x = x, 
+                                 x = x,
                                  y = y,
                                  pattern = pattern,
                                  width = w,
@@ -768,7 +789,7 @@
 
     def setup_images (self, root):
         im = gtk.gdk.pixbuf_new_from_file ("../images/toroid.png")
-        
+
         if im:
             w = im.get_width ()
             h = im.get_height ()
@@ -788,12 +809,12 @@
 
     def setup_static_items (self, canvas):
         static_root = canvas.get_static_root_item ()
-      
+
         ''' All static items in one place in the canvas should be placed in the
             same group. '''
 
         group = goocanvas.Group (parent=static_root)
-      
+
         item = goocanvas.polyline_new_line (group,
                                             40.0, 410.0,
                                             40.0, 330.0,
@@ -804,14 +825,14 @@
                                             arrow_length = 4.0,
                                             arrow_width = 3.5)
         self.setup_item_signals (item)
-      
+
         item = goocanvas.polyline_new_line (group,
                                             32.0, 370.0,
                                             48.0, 370.0,
                                             stroke_color = "midnightblue",
                                             line_width = 3.0)
         self.setup_item_signals (item);
-      
+
         item = goocanvas.Text (parent = group,
                                text = "N",
                                x = 40,
@@ -820,7 +841,7 @@
                                anchor = gtk.ANCHOR_S,
                                font = "Sans 12")
         self.setup_item_signals (item);
-        
+
     def setup_grids (self, root):
         item = goocanvas.Grid (parent = root,
                               x = 80,
@@ -839,7 +860,7 @@
                               horz_grid_line_width = 1.0,
                               vert_grid_line_width = 1.0,
                               vert_grid_lines_on_top =  True)
-    
+
     def setup_canvas (self, canvas):
         root = canvas.get_root_item ()
         root.connect("button_press_event", self.on_background_button_press)



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