[HarfBuzz] How to get hb_face_t and hb_font_t without Freetype?

Eli Zaretskii eliz at gnu.org
Fri May 24 18:17:47 UTC 2019


> From: Konstantin Ritt <ritt.ks at gmail.com>
> Date: Fri, 24 May 2019 19:16:24 +0300
> Cc: Ebrahim Byagowi <ebraminio at gmail.com>, Harfbuzz <harfbuzz at lists.freedesktop.org>
> 
> hb_blob_t *my_reference_table(hb_face_t * /*face*/, hb_tag_t tag, void *user_data)
> {
>     HDC hdc = (HDC)user_data;
>     SelectObject(hdc, hfont);
> 
>     char *buffer = NULL;
>     DWORD length = 0;
>     
>     length = GetFontData(hdc, byte_swap<DWORD>(tag), 0, buffer, length);
>     if (length == GDI_ERROR)
>         return hb_blob_get_empty();
> 
>     buffer = (char *)::malloc(length);
>     length = GetFontData(hdc, byte_swap<DWORD>(tag), 0, buffer, length);
>     if (length == GDI_ERROR)
>         length = 0;
> 
>     return hb_blob_create((const char *)buffer, length, HB_MEMORY_MODE_READONLY, buffer, ::free);
> }
> 
> hb_face_t *my_face_create_from_hdc(HDC hdc)
> {
>     return hb_face_create_for_tables(my_reference_table, (void *)hdc, NULL);
> }

Thanks, I think how to manage the memory of a blob is now clear to me.

But the question about hb_face_t management is still not entirely
clear.  I don't really need hb_face_t, I only create it as an
intermediate step towards hb_font_t.  So my question is: once I have
hb_font_t, can I destroy the hb_face_t I used to create hb_font_t?  If
not, how do I arrange for hb_face_t to be destroyed when the
corresponding hb_font_t is destroyed?

TIA


More information about the HarfBuzz mailing list