Add hb_ft_face_create_cached
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 5 Nov 2009 22:39:16 +0000 (17:39 -0500)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 5 Nov 2009 22:39:16 +0000 (17:39 -0500)
src/hb-ft.c
src/hb-ft.h

index 146fd3c..8a062c7 100644 (file)
@@ -178,6 +178,22 @@ hb_ft_face_create (FT_Face           ft_face,
   return face;
 }
 
+hb_face_t *
+hb_ft_face_create_cached (FT_Face ft_face)
+{
+  /* TODO: Not thread-safe */
+  if (HB_LIKELY (ft_face->generic.data && ft_face->generic.finalizer == (FT_Generic_Finalizer) hb_face_destroy))
+      return ft_face->generic.data;
+
+  if (ft_face->generic.finalizer)
+    ft_face->generic.finalizer (ft_face->generic.data);
+
+  ft_face->generic.data = hb_ft_face_create (ft_face, NULL);
+  ft_face->generic.finalizer = (FT_Generic_Finalizer) hb_face_destroy;
+
+  return ft_face->generic.data;
+}
+
 
 hb_font_t *
 hb_ft_font_create (FT_Face           ft_face,
index e6a4f86..b73a02c 100644 (file)
@@ -43,6 +43,9 @@ hb_face_t *
 hb_ft_face_create (FT_Face           ft_face,
                   hb_destroy_func_t destroy);
 
+hb_face_t *
+hb_ft_face_create_cached (FT_Face ft_face);
+
 hb_font_t *
 hb_ft_font_create (FT_Face           ft_face,
                   hb_destroy_func_t destroy);