All pastes #813467 Raw Edit

Mine

public text v1 · immutable
·published 2007-12-12 15:46 UTC
rendered paste body
#python version of mouse_events.c
#from http://webcvs.cairographics.org/cairo-demo/gtk/mouse_events.c?revision=1.2

import gtk
import cairo

DEFAULT_WIDTH= 400
DEFAULT_HEIGHT =200

#/* a structure keeping information about
# * the selection */
class SelectionInfo:
	def __init__(self):
		self.active = False  # /* whether the selection is active or not */
		self.x, self.y = 0, 0
		self.w, self.h = 0, 0

def main():
	
	selection = SelectionInfo()
		
	window   = gtk.Window()
	window.connect("delete-event", gtk.main_quit)
	canvas = gtk.DrawingArea()
	canvas.set_size_request(DEFAULT_WIDTH, DEFAULT_HEIGHT)
	canvas.connect("expose-event", paint, selection)
	canvas.add_events(gtk.gdk.BUTTON1_MOTION_MASK
					| gtk.gdk.BUTTON_PRESS_MASK
					| gtk.gdk.BUTTON_RELEASE_MASK)
	#canvas.add_events(gtk.gdk.BUTTON1_MOTION_MASK)
	#canvas.add_events(gtk.gdk.BUTTON_PRESS_MASK)
	#canvas.add_events(gtk.gdk.BUTTON_RELEASE_MASK)
	canvas.connect("button_press_event", event_press, selection)
	canvas.connect("button_release_event", event_release, selection)
	canvas.connect("motion_notify_event", event_motion, selection)
	window.add(canvas)
	window.show_all()
	gtk.main()


def paint_selection(cr, sel_info):
	if sel_info.active:
		return
	cr.save()
	cr.rectangle(sel_info.x, sel_info.y, sel_info.w, sel_info.h)
	cr.set_source_rgba(0,0,1,0.2)
	cr.fill_preserve()
	cr.set_source_rgba(0,0,0,0.5)
	cr.stroke()
	cr.restore()
	

def paint(widget, event, sel_info):
	width = widget.get_allocation().width
	height = widget.get_allocation().height
	cr = widget.window.cairo_create()
	cr.set_source_rgb(1,1,1)
	cr.paint()
	cr.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
	
	cr.save()
	cr.set_font_size(20)
	cr.move_to(40,60)
	cr.set_source_rgb(0,0,0)
	cr.show_text("Drag your mouse here")
	cr.restore()
	
	cr.set_source_rgb(1,0,0)
	cr.set_font_size(15)
	cr.move_to(50,100)
	cr.show_text("(and see alpha blended selection")
	cr.set_source_rgb(0,0,1)
	
	cr.move_to(0,150)
	for i in range(width/10):
		cr.rel_line_to(5,10)
		cr.rel_line_to(5,-10)
		
	cr.stroke()
	paint_selection(cr, sel_info)
	#cr.destroy()
	
def event_press(widget, event, sel_info):
	print "event_press"
	sel_info.active = True
	sel_info.x = event.x
	sel_info.y = event.y
	sel_info.w = 0
	sel_info.h = 0
	widget.queue_draw() #  gtk_widget_queue_draw (widget);

def event_motion(widget, event, sel_info):
	print "event_motion"
	sel_info.w = event.x - sel_info.x
	sel_info.h = event.y - sel_info.y
	widget.queue_draw()

def event_release(widget, event, sel_info):
	print "event_release"
	sel_info.active = False
	widget.queue_draw()

main()