pygoocanvas r250 - in trunk: . demo/simple_demo
- From: gianmt svn gnome org
- To: svn-commits-list gnome org
- Subject: pygoocanvas r250 - in trunk: . demo/simple_demo
- Date: Tue, 30 Dec 2008 17:04:03 +0000 (UTC)
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]