[cairo] Cannot get transformations to work

Behdad Esfahbod behdad.esfahbod at gmail.com
Tue Nov 3 01:37:40 PST 2009

On 11/03/2009 04:24 AM, ashley at ashleymills.com wrote:
> I was thinking about this.
> I wrote a function in the end.
> Would it perhaps be useful to add this functionality to Cairo? It seems
> like it might be something which comes up quite a lot; the transformation
> of a set of points rather than the drawing surface.

You can do this already:

   - cairo_save()
   - transform
   - add path
   - cairo_restore()
   - cairo_copy_path()
   - cairo_new_path()

If you want the inverse, do the transform before copy_path().


> Would it be difficult to add this to the code base?
> Ashley
>> 2009/10/20<ashley at ashleymills.com>:
>>> I see. I suppose you already guessed this: I was imagining that the path
>>> vertices themselves were being transformed.
>> May be the text on this page can help you understand the transformations
>> better.
>> http://cairographics.org/tutorial/#L2linewidth
>> Note that how the path of both circles is transformed by the
>> cairo_scale call, but only the line width of the left one distorded.
>>> OK I'll just write it as a function instead for now. Thanks.
>> Tip: It is generally a good idea to start and end drawing functions
>> with a cairo_save and cairo_restore call, like in the example linked
>> above. This way you can apply the transformations you need to get the
>> arrow in the right place, without affecting other drawing routines
>> outside your arrow-function.
>>> I assume then that 3rd option would be the standard way to transform a
>>> bunch of points?
>> I would only choose this option if you need it for performance reasons.
>>> How would one go about copying the temporary surface back onto the
>>> original surface?
>> cairo_set_source_surface followed by a cairo_paint or a path fill.
>>>> The last option is probably going to be the fastest, but is also
>>>> subject to rasterization so the quality might not be satisfactory. The
>>>> second is what people usually do I think.
>>> What would be subject to rasterization? The printing onto the temporary
>>> surface? Oh I see, so then the surfaces would be combined by simply
>>> adding
>>> them together according to opacity?
>> Yep, or according to any other blend mode operator you choose.
>> Remember that you probably want whole pixel offsets when compositing
>> the temporary surface back on your drawing surface.
>>> Thanks
>>> Ashley
>> Maarten
> _______________________________________________
> cairo mailing list
> cairo at cairographics.org
> http://lists.cairographics.org/mailman/listinfo/cairo

More information about the cairo mailing list