| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 
 | #!/usr/bin/env python
 
import gtk, gtk.gdk, cairo
 
 
class ShapedWindow(gtk.Window):
	def __init__(self, x, y, w, h):
		gtk.Window.__init__(self)
		gtk.gdk.Drawable.__init__(self)
		self.set_decorated(False)
		self.set_app_paintable(True)
		self.set_keep_above(True)
		self.stick()
		self.set_property('skip-taskbar-hint', True)
		self.set_property('skip-pager-hint', True)
		self.set_property('accept-focus', False)
		self.set_property('has-focus', False)
		self.move(x, y)
		self.resize(w, h)
 
		self.connect("expose_event", self.expose)
 
		self.show_all()
 
	def expose(self, widget, event):
		w,h = self.get_size()
		context =self.window.cairo_create()
 
		context.set_source_rgb(0, 1, 0)
		context.rectangle(50, 50, 100, 100)
		context.fill()
 
 
		mask = gtk.gdk.Pixmap(None, w, h, 1)# pixmap 1 bits
		context = mask.cairo_create()
 
		# on vide la pixmap
		context.set_source_rgb(0,0,0)
		context.set_operator(cairo.OPERATOR_DEST_OUT)
		context.paint()
		context.set_operator(cairo.OPERATOR_OVER)
 
 
		context.set_source_rgb(0, 0, 0)
		context.rectangle(50, 50, 100, 100)
		#~ context.arc(100, 100, 50, 0, 6.15)
		context.fill()
 
		self.shape_combine_mask(mask, 0, 0)
 
 
win = ShapedWindow(100, 100, 200, 200)
gtk.main() | 
Partager