Resolution of recording surface

Theo Veenker theo.veenker at beexy.nl
Sun Dec 15 18:45:27 UTC 2024


Hi Bernhard,

Could it be it is caused by font hinting? Maybe try playing with the 
hint style (see font options). Just a wild guess.

Theo

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
> 
> 



More information about the cairo mailing list