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;
static hb_face_t _hb_face_nil = {
HB_OBJECT_HEADER_STATIC,
+ TRUE, /* immutable */
+
NULL, /* get_table */
NULL, /* user_data */
NULL, /* destroy */
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,
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;
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,
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);
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)