I have modified it slightly in order to expunge the last traces of gdk.GC and gdk.draw_* APIs, which are now deprecated.
Cheers. Sáb, 2006-06-03 às 20:13 -0300, Johan Dahlin escreveu: > anexo mensagem de e-mail (Using cairo to shape windows) > > ------ Mensagem Reencaminhada ------ > > De: Natan Zohar <[EMAIL PROTECTED]> > > Para: [EMAIL PROTECTED] > > Assunto: Using cairo to shape windows > > Data: Sat, 03 Jun 2006 16:31:50 -0400 > > Aplicação de Email: Sylpheed-Claws 2.2.0 (GTK+ 2.8.17; > > i686-pc-linux-gnu) > > > > Hi, > > > > pachi (from #pygtk on GIMPNet) told me to shoot along an email over > > here with some sample pygtk code for shaping windows (as there isn't > > much out there about it). Attached is some code for shaping a window > > into a rounded rectangle and (commented out) a circle, that I wrote. I > > hope it helps you. > > > > Natan Zohar > _______________________________________________ > pygtk mailing list pygtk@daa.com.au > http://www.daa.com.au/mailman/listinfo/pygtk > Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/ -- Gustavo J. A. M. Carneiro <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> The universe is always one step beyond logic
#!/usr/bin/env python # A simple demonstration of using cairo to shape windows. # Natan 'whatah' Zohar import gtk import math import cairo class ShapedGUI: def __init__(self): self.window = gtk.Window() self.window.show() # We show here so the window gets a border on it by the WM x,y,w,h = self.window.get_allocation() self.window.set_size_request(w,h) self.window.connect('size-allocate', self.reshaperect) #self.window.connect('size-allocate', self.reshapecircle) self.window.show() # Shape the window into a rounded rectangle def reshaperect(self, obj, allocation): w,h = allocation.width, allocation.height bitmap = gtk.gdk.Pixmap(None, w, h, 1) cr = bitmap.cairo_create() # Clear the bitmap cr.set_source_rgb(0,0,0) cr.set_operator(cairo.OPERATOR_DEST_OUT) cr.paint() cr.set_operator(cairo.OPERATOR_OVER) # Draw our shape into the pixmap using cairo # Let's try drawing a rectangle with rounded edges. padding=5 # Padding from the edges of the window rounded=30 # How round to make the edges cr.set_source_rgba(0,0,0,1) # Move to top corner cr.move_to(0+padding+rounded, 0+padding) # Top right corner and round the edge cr.line_to(w-padding-rounded, 0+padding) cr.arc(w-padding-rounded, 0+padding+rounded, rounded, math.pi/2, 0) # Bottom right corner and round the edge cr.line_to(w-padding, h-padding-rounded) cr.arc(w-padding-rounded, h-padding-rounded, rounded, 0, math.pi/2) # Bottom left corner and round the edge. cr.line_to(0+padding+rounded, h-padding) cr.arc(0+padding+rounded, h-padding-rounded, rounded, math.pi+math.pi/2, math.pi) # Top left corner and round the edge cr.line_to(0+padding, 0+padding+rounded) cr.arc(0+padding+rounded, 0+padding+rounded, rounded, math.pi/2, 0) # Fill in the shape. cr.fill() # Set the window shape self.window.shape_combine_mask(bitmap, 0, 0) self.window.show() # Reshape the window into a circle def reshapecircle(self, obj, allocation): w,h = allocation.width, allocation.height bitmap = gtk.gdk.Pixmap(None, w, h, 1) cr = bitmap.cairo_create() # Clear the bitmap cr.set_source_rgb(0,0,0) cr.set_operator(cairo.OPERATOR_DEST_OUT) cr.paint() cr.set_operator(cairo.OPERATOR_OVER) # Draw our shape into the bitmap using cairo cr.set_source_rgb(0,0,0) cr.arc(w/2,h/2,min(h,w)/2,0,2*math.pi) cr.fill() # Set the window shape self.window.shape_combine_mask(bitmap, 0, 0) self.window.show() shapedWin = ShapedGUI() shapedWin.window.connect("destroy", lambda w: gtk.main_quit()) gtk.main()
signature.asc
Description: Esta é uma parte de mensagem assinada digitalmente
_______________________________________________ pygtk mailing list pygtk@daa.com.au http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/