On Ter, 2006-07-11 at 22:34 +0900, Kouhei Sutou wrote:
> Hi,
>
> I wrote a widget GtkTransparent that makes your custom shape
> widget easily. If you want to get an arc shape widget, you
> can write the following:
>
> static gboolean
> expose_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data)
> {
> cairo_t *cr;
>
> /* Normally:
> cr = gdk_cairo_create (widget->window);
> */
> cr = gtk_transparent_cairo_create (GTK_TRANSPARENT (widget));
>
> cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 1.0);
> cairo_move_to (cr, 0, 0);
> cairo_arc (cr, 50, 50, 50, 0, 2 * M_PI);
> cairo_fill (cr);
>
> return FALSE;
> }
>
>
> = How to use?
>
> You need a new cairo surface. The surface is
> cairo-combined-surface. You can get by:
>
> % cg-clone http://pub.cozmixng.org/~kou/git/cairo/.git
>
> And you can install by the following commands:
>
> % cd cairo
> % ./autogen.sh --enable-combined
> % make
> % make install
>
> Then you need to get GtkTransparent source by:
>
> % svn co http://www.cozmixng.org/repos/c/libgtktransparent/trunk libgtktransparent
>
> And you need to compile:
>
> % cd libgtktransparent
> % ./autogen.sh
> % ./configure
> % make
>
> Now, you can try some samples:
>
> % sample/simple # An arc shape widget
> % sample/dnd # Three arc shape widgets that are DnD available
>
> = Advantages over GnomeCanvas
>
> * GtkTransparent handles signals same as other
> widgets. GnomeCanvas widget handles all signal as one
> "event" signal.
>
> * GtkTransparent makes all shape what you want with
> cairo. GnomeCanvas uses GnomeCanvas related
> widget. cairo is used in normal widgets like
> GtkDrawingArea. So learning cost of GtkTransparent is
> lower than GnomeCanvas.
>
> = Known problems
>
> * GtkTransparent can't tell invalidated region to
> GdkWindow well.
> * cairo-combined-surface must have many bugs.
> * ...
Can you stack GtkTransparent widgets? If so, does it have the
expected result with translucency? If so, does it work correctly even
with non-composite aware X servers (most of them so far)? What about
performance; does each widget require a separate X11 window? If so,
dynamically creating 100 widgets will have much higher impact than
creating a 100 canvas items all sharing the same cairo context and
surface...
And I'm not convinced that writing a gtk+ widget from scratch is
easier than writing a canvas item...
Regards,
--
Gustavo J. A. M. Carneiro
<gjc inescporto pt> <gustavo users sourceforge net>
The universe is always one step beyond logic.
Attachment:
smime.p7s
Description: S/MIME cryptographic signature