[cairo] drawing on and reusing an off-screen image surface

Peter Groves pdgroves at gmail.com
Mon Dec 3 01:01:20 PST 2007


Thanks, this should be enough to get me started.

On Mon, 3 Dec 2007 10:50:02 +0200
"Kalle Vahlman" <kalle.vahlman at gmail.com> wrote:

> 2007/12/3, Peter Groves <pdgroves at gmail.com>:
> >         #tell cairo to use the cached rasterized image as the "paint"
> >         cairo_set_source(gtk_widget_ctx, _background_pattern)
> 
> You don't need to create the intermediate pattern yourself if you use
> set_source_surface(), btw.
> 
> >         #(**)paint the whole gtk_widget_ctx canvas with the image.
> >         cairo_paint(gtk_widget_ctx)
> 
> Just in case you are not doing it, before this, you'll want to set the
> clip mask to the exposed area in order to not update the whole area
> every time. Simply calling gdk_cairo_rectangle() and cairo_clip()
> should do it.
> 
> >         #do any additional drawings that occur each re-paint on top
> >         my_draw_the_foreground_method(gtk_widget_ctx)
> > }
> >
> >
> > Regarding (**), this is the step that most confuses me: when the call
> > to cairo_paint is made, will _background_pattern be re-rendered (from
> > vector to raster form), or is the rasterized form created exactly once
> > when cairo_pattern_create_for_surface(...) is called in startup()?
> 
> It depends on the surface type: Image surfaces are rasterized when
> they are drawn, ie. no vectorized version exists after the call to
> stroke(), fill() or similar calls. SVG surfaces however do have a
> vectorized version, but I'm not sure exactly how the surface to
> surface paints go with those... someone more into the details of that
> surface type should comment on that.
> 
> -- 
> Kalle Vahlman, zuh at iki.fi
> Powered by http://movial.fi
> Interesting stuff at http://syslog.movial.fi


More information about the cairo mailing list