1 2 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