Add getters for all setter APIs

One in particular is not a straight getter: hb_font_unset_funcs() is
special because of the specific needs of the lifecycle management of
the user_data object.
This commit is contained in:
Behdad Esfahbod 2010-10-04 16:45:21 -04:00
parent f0feb084b0
commit 19c0eab8cf
4 changed files with 166 additions and 1 deletions

View File

@ -183,6 +183,32 @@ hb_font_funcs_set_kerning_func (hb_font_funcs_t *ffuncs,
}
hb_font_get_glyph_func_t
hb_font_funcs_get_glyph_func (hb_font_funcs_t *ffuncs)
{
return ffuncs->v.get_glyph;
}
hb_font_get_contour_point_func_t
hb_font_funcs_get_contour_point_func (hb_font_funcs_t *ffuncs)
{
return ffuncs->v.get_contour_point;
}
hb_font_get_glyph_metrics_func_t
hb_font_funcs_get_glyph_metrics_func (hb_font_funcs_t *ffuncs)
{
return ffuncs->v.get_glyph_metrics;
}
hb_font_get_kerning_func_t
hb_font_funcs_get_kerning_func (hb_font_funcs_t *ffuncs)
{
return ffuncs->v.get_kerning;
}
hb_codepoint_t
hb_font_get_glyph (hb_font_t *font, hb_face_t *face,
hb_codepoint_t unicode, hb_codepoint_t variation_selector)
@ -443,6 +469,26 @@ hb_font_set_funcs (hb_font_t *font,
font->user_data = user_data;
}
void
hb_font_unset_funcs (hb_font_t *font,
hb_font_funcs_t **klass,
hb_destroy_func_t *destroy,
void **user_data)
{
/* None of the input arguments can be NULL. */
*klass = font->klass;
*destroy = font->destroy;
*user_data = font->user_data;
if (HB_OBJECT_IS_INERT (font))
return;
font->klass = NULL;
font->destroy = NULL;
font->user_data = NULL;
}
void
hb_font_set_scale (hb_font_t *font,
unsigned int x_scale,
@ -455,6 +501,15 @@ hb_font_set_scale (hb_font_t *font,
font->y_scale = y_scale;
}
void
hb_font_get_scale (hb_font_t *font,
unsigned int *x_scale,
unsigned int *y_scale)
{
if (x_scale) *x_scale = font->x_scale;
if (y_scale) *y_scale = font->y_scale;
}
void
hb_font_set_ppem (hb_font_t *font,
unsigned int x_ppem,
@ -467,5 +522,14 @@ hb_font_set_ppem (hb_font_t *font,
font->y_ppem = y_ppem;
}
void
hb_font_get_ppem (hb_font_t *font,
unsigned int *x_ppem,
unsigned int *y_ppem)
{
if (x_ppem) *x_ppem = font->x_ppem;
if (y_ppem) *y_ppem = font->y_ppem;
}
HB_END_DECLS

View File

@ -132,6 +132,21 @@ hb_font_funcs_set_kerning_func (hb_font_funcs_t *ffuncs,
hb_font_get_kerning_func_t kerning_func);
/* These never return NULL. Return fallback defaults instead. */
hb_font_get_glyph_func_t
hb_font_funcs_get_glyph_func (hb_font_funcs_t *ffuncs);
hb_font_get_contour_point_func_t
hb_font_funcs_get_contour_point_func (hb_font_funcs_t *ffuncs);
hb_font_get_glyph_metrics_func_t
hb_font_funcs_get_glyph_metrics_func (hb_font_funcs_t *ffuncs);
hb_font_get_kerning_func_t
hb_font_funcs_get_kerning_func (hb_font_funcs_t *ffuncs);
hb_codepoint_t
hb_font_get_glyph (hb_font_t *font, hb_face_t *face,
hb_codepoint_t unicode, hb_codepoint_t variation_selector);
@ -174,6 +189,21 @@ hb_font_set_funcs (hb_font_t *font,
hb_destroy_func_t destroy,
void *user_data);
/* Returns what was set and unsets it, but doesn't destroy(user_data).
* This is useful for wrapping / chaining font_funcs_t's.
*
* The client is responsible for:
*
* - Take ownership of the reference on the returned klass
* - Calling "destroy(user_data)" exactly once if returned destroy func
* is not NULL and the returned info is not needed anymore.
*/
void
hb_font_unset_funcs (hb_font_t *font,
hb_font_funcs_t **klass,
hb_destroy_func_t *destroy,
void **user_data);
/*
* We should add support for full matrices.
@ -183,6 +213,11 @@ hb_font_set_scale (hb_font_t *font,
unsigned int x_scale,
unsigned int y_scale);
void
hb_font_get_scale (hb_font_t *font,
unsigned int *x_scale,
unsigned int *y_scale);
/*
* A zero value means "no hinting in that direction"
*/
@ -191,6 +226,11 @@ hb_font_set_ppem (hb_font_t *font,
unsigned int x_ppem,
unsigned int y_ppem);
void
hb_font_get_ppem (hb_font_t *font,
unsigned int *x_ppem,
unsigned int *y_ppem);
HB_END_DECLS

View File

@ -160,6 +160,38 @@ hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
}
hb_unicode_get_mirroring_func_t
hb_unicode_funcs_get_mirroring_func (hb_unicode_funcs_t *ufuncs)
{
return ufuncs->v.get_mirroring;
}
hb_unicode_get_general_category_func_t
hb_unicode_funcs_get_general_category_func (hb_unicode_funcs_t *ufuncs)
{
return ufuncs->v.get_general_category;
}
hb_unicode_get_script_func_t
hb_unicode_funcs_get_script_func (hb_unicode_funcs_t *ufuncs)
{
return ufuncs->v.get_script;
}
hb_unicode_get_combining_class_func_t
hb_unicode_funcs_get_combining_class_func (hb_unicode_funcs_t *ufuncs)
{
return ufuncs->v.get_combining_class;
}
hb_unicode_get_eastasian_width_func_t
hb_unicode_funcs_get_eastasian_width_func (hb_unicode_funcs_t *ufuncs)
{
return ufuncs->v.get_eastasian_width;
}
hb_codepoint_t
hb_unicode_get_mirroring (hb_unicode_funcs_t *ufuncs,
hb_codepoint_t unicode)

View File

@ -202,7 +202,12 @@ void
hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs);
/* funcs */
/*
* funcs
*/
/* typedefs */
typedef hb_codepoint_t (*hb_unicode_get_mirroring_func_t) (hb_codepoint_t unicode);
typedef hb_category_t (*hb_unicode_get_general_category_func_t) (hb_codepoint_t unicode);
@ -211,6 +216,8 @@ typedef unsigned int (*hb_unicode_get_combining_class_func_t) (hb_codepoint_t un
typedef unsigned int (*hb_unicode_get_eastasian_width_func_t) (hb_codepoint_t unicode);
/* setters */
void
hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
hb_unicode_get_mirroring_func_t mirroring_func);
@ -232,6 +239,28 @@ hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
hb_unicode_get_eastasian_width_func_t eastasian_width_func);
/* getters */
/* These never return NULL. Return fallback defaults instead. */
hb_unicode_get_mirroring_func_t
hb_unicode_funcs_get_mirroring_func (hb_unicode_funcs_t *ufuncs);
hb_unicode_get_general_category_func_t
hb_unicode_funcs_get_general_category_func (hb_unicode_funcs_t *ufuncs);
hb_unicode_get_script_func_t
hb_unicode_funcs_get_script_func (hb_unicode_funcs_t *ufuncs);
hb_unicode_get_combining_class_func_t
hb_unicode_funcs_get_combining_class_func (hb_unicode_funcs_t *ufuncs);
hb_unicode_get_eastasian_width_func_t
hb_unicode_funcs_get_eastasian_width_func (hb_unicode_funcs_t *ufuncs);
/* accessors */
hb_codepoint_t
hb_unicode_get_mirroring (hb_unicode_funcs_t *ufuncs,
hb_codepoint_t unicode);