Moviendo un cuadrado :P
Jugando con GooCanvas logre finalmente mover un elemento (item) sobre el canvas :)
video
Here is the code (python code, using pygoocanvas)
import goocanvas
import cairo
import gtk
def boton_presionado(item, target_item, event):
print "boton presionado"
fleur = gtk.gdk.Cursor(gtk.gdk.FLEUR)
canvas = item.get_canvas ()
canvas.pointer_grab(item,
gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.BUTTON_RELEASE_MASK,
fleur, event.time)
return True
def on_button_release(item, target, event):
canvas = item.get_canvas ()
canvas.pointer_ungrab(item, event.time)
return True
def on_enter_notify (item,target,event):
item.props.fill_color = "red"
return True
def on_leave_notify(item, target, event):
item.props.fill_color = "black"
return True
def on_motion(item, target, event):
canvas = item.get_canvas ()
change = False
if not event.state == gtk.gdk.BUTTON1_MASK:
return False
y = event.y
x = event.x
item.props.x = x - 5.0
item.props.y = y - 5.0
return True
def main():
window = gtk.Window();
window.set_title("titulo")
window.set_default_size(640,480)
window.connect("delete-event",gtk.main_quit)
scrolled_win = gtk.ScrolledWindow()
window.add(scrolled_win)
canvas = goocanvas.Canvas()
canvas.set_size_request(600,450)
canvas.set_bounds(0,0,1000,1000)
scrolled_win.add(canvas)
root = goocanvas.Group()
rect_item = goocanvas.Rect(parent=root,x=100, y=100,
width=200, height=100,
stroke_color="red", fill_color="blue",
line_width=5.0)
rect_item.connect("enter_notify_event", on_enter_notify)
rect_item.connect("leave_notify_event", on_leave_notify)
rect_item.connect("button_press_event", boton_presionado)
rect_item.connect("button_release_event", on_button_release)
rect_item.connect("motion_notify_event", on_motion)
#rect_item.connect("key_press_event",tecla_presionada)
text_item = goocanvas.Text(parent=root,text="Hello, World!",
x=250, y=150,
width=200, anchor=gtk.ANCHOR_SE,
fill_color="blue")
text_item.rotate(45, 300, 300)
canvas.set_root_item(root)
window.show_all()
gtk.main()
if __name__ == "__main__":
main()
nota: por desgracias los tabs se pierden en el blog, si alguien quiere el .py deje un comentario.