[cairo] Cannot get transformations to work

ashley at ashleymills.com ashley at ashleymills.com
Tue Nov 3 01:24:53 PST 2009


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.

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
>




More information about the cairo mailing list