Hello Everyone,<br><br>I&#39;m working on a new font preview widget / font selection dropdown for the text toolbar in Inkscape. My architecture is very pluggable so it&#39;s easy to swap in a preview renderer which uses a particular<br>
backend to render. So far I&#39;ve written a preview renderer using pango-cairo and it works well, but I use threading to generate previews to avoid stalling the UI, and it turns out pango is not<br>thread safe which makes it impossible to use my code in an app that uses Gtk+ as text is rendered with pango everywhere.<br>
<br>Now I wanted to write a preview renderer using cairo&#39;s text API, and I have 2 questions:<br><br>1) Is cairo for all intents and purposes, and the text API in particular (i&#39;m speaking of the &quot;toy&quot; API here as I don&#39;t need anything else, at least yet) thread safe?<br>
<br>2) How can I properly calculate the size of a surface needed to fit in a particular string of text, and how do I calculate the rendering position so that all actual text pixels will fit into the extents of the surface?<br>
I found a lot in the API docs and a few examples but I can&#39;t get it quite fully right. It would be nice if someone could give me a minor code example on how to do this, it would be very appreciated.<br><br>A video of the current widget for those interested in this work on Inkscape can be found here: <a href="http://futurepast.free.fr/out.ogv">http://futurepast.free.fr/out.ogv</a>, and<br>
a wiki page detailing this work in cooperation with LinuxFund can be found here: <a href="http://wiki.inkscape.org/wiki/index.php/LinuxFund2009_1">http://wiki.inkscape.org/wiki/index.php/LinuxFund2009_1</a><br clear="all">
<br>Thanks in advance,<br>
M.<br>
<br>-- <br>Please note that according to the German law on data retention,<br>information on every electronic information exchange with me is<br>retained for a period of six months.<br>[Bitte beachten Sie, dass dem Gesetz zur Vorratsdatenspeicherung zufolge<br>
jeder elektronische Kontakt mit mir sechs Monate lang gespeichert wird.]<br>