Resolution of recording surface
Bernhard R. Fischer
bf at abenteuerland.at
Sat Dec 14 10:05:40 UTC 2024
Please find attached a small demo which shows the problem.
I'm on cairo 1.18.0.
Increase the scale (in main()) to eliminate the problem.
Best regards,
Bernhard
On 14.12.2024 10:34, Bernhard R. Fischer wrote:
> Dear list,
>
> It has been a long time since I posted here for the last time. Sorry
> for the long text but it's to so easy to explain.
>
> I'm using Cairographics extensively for an OSM data rendering software
> since many years (https://github.com/rahra/smrender), so I'm not new
> to it.
>
> What I regularly do is to use a recording surface internally and
> finally paint it to a PDF, SVG, or whatever surface is required.
>
> In respect to the units I always assumed that 1 unit within the
> recording surface is to be 1 millimeter in the final result. To
> accomplish this I create the recording surface with the size of the
> final page (e.g. create_recording_surface(210, 297) for an A4 page
> have 210x297mm), then I draw on it and finally at the cairo_paint to
> the PDF surface I scale the paint operation to meet the points unit of
> the PDF.
>
> This concept works fine but unfortunately recently within a different
> project (where I use the same drawing concept) I made the discovery
> that the resolution of the recording surface seems to be limited at
> least with the toy text API. I use the get_text_extents and similar
> functions to place some text at specific positions and with some
> debugging I found out that it does not use any fractional part of the
> extents member variables.
>
> E.g. the text_extents.width always returns e.g. 3.0, 4.0, 8.0, but
> never something like 3.17, 4.28 and so on. The final result is that
> the text (obviously) is not placed on exact positions (where it should
> be).
>
> With further experiments I found out that if I make the recording
> surface width/height e.g. 100 times bigger (21000x29700) and then
> scale it by factor 100 the text_extents will work with higher
> resolution as expected. But if I further increase the recording
> surface to a factor of e.g. 1000, it will internally hang somewhere
> within an endless loop (within libcairo). So there seems to be some
> upper limit.
>
> So my question is: is there a limit in the resolution of the recording
> surface? Or is this a limitation of the toy text API? Or did I stumble
> on something else? Or is my drawing concept somehow incorrect?
>
> Best regards,
> Bernhard
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: recdemo.c
Type: text/x-csrc
Size: 1809 bytes
Desc: not available
URL: <https://lists.cairographics.org/archives/cairo/attachments/20241214/431db4f8/attachment.c>
More information about the cairo
mailing list