[cairo] Loading font from a file in pycairo
mdroe at stsci.edu
Mon Aug 13 04:58:02 PDT 2007
Steven Chaplin wrote:
> On Fri, 2007-08-10 at 14:36 -0400, Michael Droettboom wrote:
>> I'm making some improvements to the Cairo backend in matplotlib and I
>> have question about font loading.
>> matplotlib has its own font-finding infrastructure, and most of the
>> rendering backends load fonts by a filename returned from that system.
> The Matplotlib font_manager has reinvented the wheel - fontconfig could
> have been used instead (by writing Python bindings) giving a font
> interface which is consistent to that used by many other applications
> (and probably solving your current problem).
I had the same thought myself, but adding a new dependency (remember,
this is cross-platform) is something to consider carefully.
>> Is there any way to load a font by its filename in pycairo?
>> It looks like it is possible in C to load a freetype font with
>> FT_Open_Face and then use cairo_ft_font_face_create_for_ft_face. Is
>> freetype always assumed to be on all platforms, or would one have to use
>> cairo_win32_font_face_create_for_hfont, for example, on Windows?
>> Are there any thoughts about exposing this in pycairo? Is this just a
>> bad idea for reasons that I might be missing?
> For pycairo to expose the cairo/FreeType functions there would need to be
> a Python binding for FreeType which provides a C API which pycairo could
> use (FreeType bindings do not belong in pycairo, the same way that the
> FreeType C library does not belong in cairo).
I agree with you. What I had in mind was a single pycairo call that
would handle this internally -- and do the correct thing depending on
the particular font backend that cairo was built with. While I
understand the advantages of a full and proper font-lookup system
(fontconfig), not being able to bypass it and load by filename seems
like a hole in the API, IMHO.
> There have been a couple
> of FreeType python bindings written in the past but I don't think they
> are still maintained.
Matplotlib has its own freetype binding, though it is designed fairly
specifically around the needs of matplotlib.
More information about the cairo