Re: cairo & pixmap



Ah, I just found out the solution is trivial.

GdkPixmap *pixmap;

/* Create a new backing pixmap of the appropriate size */
static gint
configure_event (GtkWidget *widget, GdkEventConfigure *event)
{
 cairo_t *cr;

if (pixmap)
   gdk_pixmap_unref(pixmap);

 pixmap = gdk_pixmap_new(widget->window,
                         widget->allocation.width,
                         widget->allocation.height,
                         -1);

 cr = gdk_cairo_create (pixmap);
 /* do your drawing here */
 cairo_destroy (cr);

 return TRUE;
}


static gint
expose_event_cb (GtkWidget *widget, GdkEventExpose *event)
{
 /* copy relevant part of pixmap back to screen */
 gdk_draw_pixmap(widget->window,
                 widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
                 pixmap,
                 event->area.x, event->area.y,
                 event->area.x, event->area.y,
                 event->area.width, event->area.height);

 return FALSE;
}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]