[API] Add hb_face_make/is_immutable()
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 12 May 2011 21:48:20 +0000 (17:48 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 12 May 2011 21:48:20 +0000 (17:48 -0400)
src/hb-font-private.hh
src/hb-font.cc
src/hb-font.h
test/test-font.c
test/test-object.c

index f60ce97..8821ac1 100644 (file)
@@ -81,6 +81,8 @@ struct _hb_font_funcs_t {
 struct _hb_face_t {
   hb_object_header_t header;
 
+  hb_bool_t immutable;
+
   hb_get_table_func_t  get_table;
   void                *user_data;
   hb_destroy_func_t    destroy;
index 65f634f..cff8527 100644 (file)
@@ -320,6 +320,8 @@ hb_font_get_kerning (hb_font_t *font,
 static hb_face_t _hb_face_nil = {
   HB_OBJECT_HEADER_STATIC,
 
+  TRUE, /* immutable */
+
   NULL, /* get_table */
   NULL, /* user_data */
   NULL, /* destroy */
@@ -456,6 +458,21 @@ hb_face_get_user_data (hb_face_t          *face,
   return hb_object_get_user_data (face, key);
 }
 
+void
+hb_face_make_immutable (hb_face_t *face)
+{
+  if (hb_object_is_inert (face))
+    return;
+
+  face->immutable = true;
+}
+
+hb_bool_t
+hb_face_is_immutable (hb_face_t *face)
+{
+  return face->immutable;
+}
+
 
 hb_blob_t *
 hb_face_reference_table (hb_face_t *face,
@@ -515,6 +532,7 @@ hb_font_create (hb_face_t *face)
   if (!(font = hb_object_create<hb_font_t> ()))
     return &_hb_font_nil;
 
+  hb_face_make_immutable (face);
   font->face = hb_face_reference (face);
   font->klass = &_hb_font_funcs_nil;
 
index e38d3a7..34a8f7d 100644 (file)
@@ -72,6 +72,12 @@ void *
 hb_face_get_user_data (hb_face_t          *face,
                       hb_user_data_key_t *key);
 
+void
+hb_face_make_immutable (hb_face_t *face);
+
+hb_bool_t
+hb_face_is_immutable (hb_face_t *face);
+
 
 hb_blob_t *
 hb_face_reference_table (hb_face_t *face,
index 9c7d3e4..1b68834 100644 (file)
@@ -156,7 +156,9 @@ _test_fontfuncs_nil (hb_font_funcs_t *ffuncs)
   blob = hb_blob_create (test_data, sizeof (test_data), HB_MEMORY_MODE_READONLY, NULL, NULL);
   face = hb_face_create (blob, 0);
   hb_blob_destroy (blob);
+  g_assert (!hb_face_is_immutable (face));
   font = hb_font_create (face);
+  g_assert (hb_face_is_immutable (face));
   hb_face_destroy (face);
 
 
index ccd0cab..bac6d1a 100644 (file)
@@ -163,8 +163,8 @@ typedef struct {
 static const object_t objects[] =
 {
   OBJECT_WITHOUT_IMMUTABILITY (buffer),
-  OBJECT_WITHOUT_IMMUTABILITY (face),
   OBJECT_WITH_IMMUTABILITY (blob),
+  OBJECT_WITH_IMMUTABILITY (face),
   OBJECT_WITH_IMMUTABILITY (font),
   OBJECT_WITH_IMMUTABILITY (font_funcs),
   OBJECT_WITH_IMMUTABILITY (unicode_funcs)