Resolution of recording surface

Bernhard R. Fischer bf at abenteuerland.at
Wed Jan 15 19:24:30 UTC 2025


Hi!

Thanks for your hint. It solved the problem!

I set the the font options to CAIRO_HINT_METRICS_OFF with 
cairo_font_options_set_hint_metrics(fo, CAIRO_HINT_METRICS_OFF);

Thank you very much!

Best regards,
Bernhard


On 15.12.2024 19:45, Theo Veenker wrote:
> 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
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cairographics.org/archives/cairo/attachments/20250115/e95c2d82/attachment.htm>


More information about the cairo mailing list