[cairo] Repeatedly drawing the same object

Adam Richard adam.richard at caris.com
Wed Jun 24 09:25:13 PDT 2009


I'm wondering what's the best way to draw a fixed shape many times at 
several different locations on the surface.  I don't want a repeated 
pattern filling up an area, as the CAIRO_EXTEND_REPEAT option allows; 
rather, I want to create a "stamp" which I can then use to draw the same 
image many times at various different positions, so that each "stamp" is 
as fast as possible.

The only approach I've been able to get working is to first create a 
temporary surface and context, draw one copy of the object on that, and 
then do something like:

for each location (x, y)
    set_source_surface(tmpSurface, x, y)

But I fear this may be slow, because it's setting a new source each time 
through the loop.  Is there a better way?

I notice in the tutorial, where it discusses selecting a source:


there's a mention of using a surface as a source using 
cairo_push_group() and cairo_pop_group(), and it says you can save a 
source and then select it repeatedly with cairo_set_source.  So maybe 
that's the fastest way to do it?  I've tried setting the source once and 
then moving its position with translate() on each iteration, but that 
didn't seem to work.

More information about the cairo mailing list