[API] Add hb_face_make/is_immutable()
diff --git a/src/hb-font-private.hh b/src/hb-font-private.hh
index f60ce97..8821ac1 100644
--- a/src/hb-font-private.hh
+++ b/src/hb-font-private.hh
@@ -81,6 +81,8 @@
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;
diff --git a/src/hb-font.cc b/src/hb-font.cc
index 65f634f..cff8527 100644
--- a/src/hb-font.cc
+++ b/src/hb-font.cc
@@ -320,6 +320,8 @@
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 @@
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 @@
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;
diff --git a/src/hb-font.h b/src/hb-font.h
index e38d3a7..34a8f7d 100644
--- a/src/hb-font.h
+++ b/src/hb-font.h
@@ -72,6 +72,12 @@
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,
diff --git a/test/test-font.c b/test/test-font.c
index 9c7d3e4..1b68834 100644
--- a/test/test-font.c
+++ b/test/test-font.c
@@ -156,7 +156,9 @@
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);
diff --git a/test/test-object.c b/test/test-object.c
index ccd0cab..bac6d1a 100644
--- a/test/test-object.c
+++ b/test/test-object.c
@@ -163,8 +163,8 @@
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)