[cairo] fill pre-existing png polygons? (tried formatting better)

M Joonas Pihlaja jpihlaja at cc.helsinki.fi
Mon Aug 9 12:12:00 PDT 2010


On Mon, 9 Aug 2010, Daniel Goldman wrote:

> What might be some example cairo functions that cache surfaces? I think what you 
> are saying is maybe I can just draw once, and then copy to the png and pdf 
> surfaces.

Yeah, almost exactly that.  In the upcoming 1.10 release exactly this 
is possible and you'll be able to use a "recording surface" instead of 
a "similar surface" to capture drawing commands for later replay.  
This doesn't give you any speed benefits like using a similar surface 
might, however.

For the moment, however, you'd need to create an image surface for 
caching the drawing when you're making a png map and a pdf surface for 
caching when making a pdf map.  You can create the right kind of 
surface using the function cairo_surface_create_similar(): this takes 
a surface and produces a new empty surface of the same kind (this is 
what the API means by "similar") as the one you gave it.  Then you'd 
draw onto your polygons onto the similar surface normally once, and 
when you want to reuse your drawing later, you'd use 
cairo_set_source_surface() and cairo_paint() (or perhaps cairo_fill()) 
on your target context to copy the previous rendering.

> I have the png polygon coordinates as integers, and the pdf 
> coordinates as doubles. Maybe I might draw with the doubles, and then copy the 
> surface to the png map, possibly resizing if a bigger or smaller map is needed.

I'm not entirely sure what you mean here.  Cairo always takes polygon 
coordinates as doubles.

Cheers,

Joonas


More information about the cairo mailing list