提交 88e9a9bc 编写于 作者: B Behdad Esfahbod

Minor reshaping of hb_font_funcs_t implementation

In anticipation of further changes.  No functional changes.
上级 a6a7715b
...@@ -63,10 +63,12 @@ struct hb_font_funcs_t { ...@@ -63,10 +63,12 @@ struct hb_font_funcs_t {
/* Don't access these directly. Call font->get_*() instead. */ /* Don't access these directly. Call font->get_*() instead. */
struct { union {
struct {
#define HB_FONT_FUNC_IMPLEMENT(name) hb_font_get_##name##_func_t name; #define HB_FONT_FUNC_IMPLEMENT(name) hb_font_get_##name##_func_t name;
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
#undef HB_FONT_FUNC_IMPLEMENT #undef HB_FONT_FUNC_IMPLEMENT
} f;
} get; } get;
struct { struct {
...@@ -154,85 +156,85 @@ struct hb_font_t { ...@@ -154,85 +156,85 @@ struct hb_font_t {
hb_codepoint_t *glyph) hb_codepoint_t *glyph)
{ {
*glyph = 0; *glyph = 0;
return klass->get.glyph (this, user_data, return klass->get.f.glyph (this, user_data,
unicode, variation_selector, glyph, unicode, variation_selector, glyph,
klass->user_data.glyph); klass->user_data.glyph);
} }
inline hb_position_t get_glyph_h_advance (hb_codepoint_t glyph) inline hb_position_t get_glyph_h_advance (hb_codepoint_t glyph)
{ {
return klass->get.glyph_h_advance (this, user_data, return klass->get.f.glyph_h_advance (this, user_data,
glyph, glyph,
klass->user_data.glyph_h_advance); klass->user_data.glyph_h_advance);
} }
inline hb_position_t get_glyph_v_advance (hb_codepoint_t glyph) inline hb_position_t get_glyph_v_advance (hb_codepoint_t glyph)
{ {
return klass->get.glyph_v_advance (this, user_data, return klass->get.f.glyph_v_advance (this, user_data,
glyph, glyph,
klass->user_data.glyph_v_advance); klass->user_data.glyph_v_advance);
} }
inline hb_bool_t get_glyph_h_origin (hb_codepoint_t glyph, inline hb_bool_t get_glyph_h_origin (hb_codepoint_t glyph,
hb_position_t *x, hb_position_t *y) hb_position_t *x, hb_position_t *y)
{ {
*x = *y = 0; *x = *y = 0;
return klass->get.glyph_h_origin (this, user_data, return klass->get.f.glyph_h_origin (this, user_data,
glyph, x, y, glyph, x, y,
klass->user_data.glyph_h_origin); klass->user_data.glyph_h_origin);
} }
inline hb_bool_t get_glyph_v_origin (hb_codepoint_t glyph, inline hb_bool_t get_glyph_v_origin (hb_codepoint_t glyph,
hb_position_t *x, hb_position_t *y) hb_position_t *x, hb_position_t *y)
{ {
*x = *y = 0; *x = *y = 0;
return klass->get.glyph_v_origin (this, user_data, return klass->get.f.glyph_v_origin (this, user_data,
glyph, x, y, glyph, x, y,
klass->user_data.glyph_v_origin); klass->user_data.glyph_v_origin);
} }
inline hb_position_t get_glyph_h_kerning (hb_codepoint_t left_glyph, hb_codepoint_t right_glyph) inline hb_position_t get_glyph_h_kerning (hb_codepoint_t left_glyph, hb_codepoint_t right_glyph)
{ {
return klass->get.glyph_h_kerning (this, user_data, return klass->get.f.glyph_h_kerning (this, user_data,
left_glyph, right_glyph, left_glyph, right_glyph,
klass->user_data.glyph_h_kerning); klass->user_data.glyph_h_kerning);
} }
inline hb_position_t get_glyph_v_kerning (hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph) inline hb_position_t get_glyph_v_kerning (hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph)
{ {
return klass->get.glyph_v_kerning (this, user_data, return klass->get.f.glyph_v_kerning (this, user_data,
top_glyph, bottom_glyph, top_glyph, bottom_glyph,
klass->user_data.glyph_v_kerning); klass->user_data.glyph_v_kerning);
} }
inline hb_bool_t get_glyph_extents (hb_codepoint_t glyph, inline hb_bool_t get_glyph_extents (hb_codepoint_t glyph,
hb_glyph_extents_t *extents) hb_glyph_extents_t *extents)
{ {
memset (extents, 0, sizeof (*extents)); memset (extents, 0, sizeof (*extents));
return klass->get.glyph_extents (this, user_data, return klass->get.f.glyph_extents (this, user_data,
glyph, glyph,
extents, extents,
klass->user_data.glyph_extents); klass->user_data.glyph_extents);
} }
inline hb_bool_t get_glyph_contour_point (hb_codepoint_t glyph, unsigned int point_index, inline hb_bool_t get_glyph_contour_point (hb_codepoint_t glyph, unsigned int point_index,
hb_position_t *x, hb_position_t *y) hb_position_t *x, hb_position_t *y)
{ {
*x = *y = 0; *x = *y = 0;
return klass->get.glyph_contour_point (this, user_data, return klass->get.f.glyph_contour_point (this, user_data,
glyph, point_index, glyph, point_index,
x, y, x, y,
klass->user_data.glyph_contour_point); klass->user_data.glyph_contour_point);
} }
inline hb_bool_t get_glyph_name (hb_codepoint_t glyph, inline hb_bool_t get_glyph_name (hb_codepoint_t glyph,
char *name, unsigned int size) char *name, unsigned int size)
{ {
if (size) *name = '\0'; if (size) *name = '\0';
return klass->get.glyph_name (this, user_data, return klass->get.f.glyph_name (this, user_data,
glyph, glyph,
name, size, name, size,
klass->user_data.glyph_name); klass->user_data.glyph_name);
} }
inline hb_bool_t get_glyph_from_name (const char *name, int len, /* -1 means nul-terminated */ inline hb_bool_t get_glyph_from_name (const char *name, int len, /* -1 means nul-terminated */
...@@ -240,10 +242,10 @@ struct hb_font_t { ...@@ -240,10 +242,10 @@ struct hb_font_t {
{ {
*glyph = 0; *glyph = 0;
if (len == -1) len = strlen (name); if (len == -1) len = strlen (name);
return klass->get.glyph_from_name (this, user_data, return klass->get.f.glyph_from_name (this, user_data,
name, len, name, len,
glyph, glyph,
klass->user_data.glyph_from_name); klass->user_data.glyph_from_name);
} }
......
...@@ -474,11 +474,11 @@ hb_font_funcs_set_##name##_func (hb_font_funcs_t *ffuncs, \ ...@@ -474,11 +474,11 @@ hb_font_funcs_set_##name##_func (hb_font_funcs_t *ffuncs, \
ffuncs->destroy.name (ffuncs->user_data.name); \ ffuncs->destroy.name (ffuncs->user_data.name); \
\ \
if (func) { \ if (func) { \
ffuncs->get.name = func; \ ffuncs->get.f.name = func; \
ffuncs->user_data.name = user_data; \ ffuncs->user_data.name = user_data; \
ffuncs->destroy.name = destroy; \ ffuncs->destroy.name = destroy; \
} else { \ } else { \
ffuncs->get.name = hb_font_get_##name##_parent; \ ffuncs->get.f.name = hb_font_get_##name##_parent; \
ffuncs->user_data.name = NULL; \ ffuncs->user_data.name = NULL; \
ffuncs->destroy.name = NULL; \ ffuncs->destroy.name = NULL; \
} \ } \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册