Add hb_font_make/is_immutable()

This commit is contained in:
Behdad Esfahbod 2011-05-10 19:39:32 -04:00
parent 8c7a100a4d
commit 74f1d896f2
4 changed files with 32 additions and 4 deletions

View File

@ -80,6 +80,8 @@ struct _hb_face_t {
struct _hb_font_t {
hb_object_header_t header;
hb_bool_t immutable;
hb_face_t *face;
unsigned int x_scale;

View File

@ -448,6 +448,8 @@ hb_face_get_upem (hb_face_t *face)
static hb_font_t _hb_font_nil = {
HB_OBJECT_HEADER_STATIC,
TRUE, /* immutable */
&_hb_face_nil,
0, /* x_scale */
@ -514,6 +516,21 @@ hb_font_get_user_data (hb_font_t *font,
return hb_object_get_user_data (font, key);
}
void
hb_font_make_immutable (hb_font_t *font)
{
if (hb_object_is_inert (font))
return;
font->immutable = true;
}
hb_bool_t
hb_font_is_immutable (hb_font_t *font)
{
return font->immutable;
}
hb_face_t *
hb_font_get_face (hb_font_t *font)
@ -528,7 +545,7 @@ hb_font_set_funcs (hb_font_t *font,
void *user_data,
hb_destroy_func_t destroy)
{
if (hb_object_is_inert (font))
if (font->immutable)
return;
if (font->destroy)
@ -550,6 +567,9 @@ hb_font_unset_funcs (hb_font_t *font,
void **user_data,
hb_destroy_func_t *destroy)
{
if (font->immutable)
return;
/* None of the input arguments can be NULL. */
*klass = font->klass;
@ -569,7 +589,7 @@ hb_font_set_scale (hb_font_t *font,
int x_scale,
int y_scale)
{
if (hb_object_is_inert (font))
if (font->immutable)
return;
font->x_scale = x_scale;
@ -590,7 +610,7 @@ hb_font_set_ppem (hb_font_t *font,
unsigned int x_ppem,
unsigned int y_ppem)
{
if (hb_object_is_inert (font))
if (font->immutable)
return;
font->x_ppem = x_ppem;

View File

@ -225,6 +225,12 @@ void *
hb_font_get_user_data (hb_font_t *font,
hb_user_data_key_t *key);
void
hb_font_make_immutable (hb_font_t *font);
hb_bool_t
hb_font_is_immutable (hb_font_t *font);
hb_face_t *
hb_font_get_face (hb_font_t *font);

View File

@ -161,8 +161,8 @@ static const object_t objects[] =
{
OBJECT_WITHOUT_IMMUTABILITY (buffer),
OBJECT_WITHOUT_IMMUTABILITY (face),
OBJECT_WITHOUT_IMMUTABILITY (font),
OBJECT_WITH_IMMUTABILITY (blob),
OBJECT_WITH_IMMUTABILITY (font),
OBJECT_WITH_IMMUTABILITY (font_funcs),
OBJECT_WITH_IMMUTABILITY (unicode_funcs)
};