Minor reshaping of hb_font_funcs_t implementation
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 5 Nov 2015 05:16:26 +0000 (21:16 -0800)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 5 Nov 2015 05:16:26 +0000 (21:16 -0800)
In anticipation of further changes.  No functional changes.

src/hb-font-private.hh
src/hb-font.cc

index b969143..421bd02 100644 (file)
@@ -63,10 +63,12 @@ struct hb_font_funcs_t {
 
   /* 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;
-    HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
+      HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
 #undef HB_FONT_FUNC_IMPLEMENT
+    } f;
   } get;
 
   struct {
@@ -154,85 +156,85 @@ struct hb_font_t {
                              hb_codepoint_t *glyph)
   {
     *glyph = 0;
-    return klass->get.glyph (this, user_data,
-                            unicode, variation_selector, glyph,
-                            klass->user_data.glyph);
+    return klass->get.f.glyph (this, user_data,
+                              unicode, variation_selector, glyph,
+                              klass->user_data.glyph);
   }
 
   inline hb_position_t get_glyph_h_advance (hb_codepoint_t glyph)
   {
-    return klass->get.glyph_h_advance (this, user_data,
-                                      glyph,
-                                      klass->user_data.glyph_h_advance);
+    return klass->get.f.glyph_h_advance (this, user_data,
+                                        glyph,
+                                        klass->user_data.glyph_h_advance);
   }
 
   inline hb_position_t get_glyph_v_advance (hb_codepoint_t glyph)
   {
-    return klass->get.glyph_v_advance (this, user_data,
-                                      glyph,
-                                      klass->user_data.glyph_v_advance);
+    return klass->get.f.glyph_v_advance (this, user_data,
+                                        glyph,
+                                        klass->user_data.glyph_v_advance);
   }
 
   inline hb_bool_t get_glyph_h_origin (hb_codepoint_t glyph,
                                       hb_position_t *x, hb_position_t *y)
   {
     *x = *y = 0;
-    return klass->get.glyph_h_origin (this, user_data,
-                                     glyph, x, y,
-                                     klass->user_data.glyph_h_origin);
+    return klass->get.f.glyph_h_origin (this, user_data,
+                                       glyph, x, y,
+                                       klass->user_data.glyph_h_origin);
   }
 
   inline hb_bool_t get_glyph_v_origin (hb_codepoint_t glyph,
                                       hb_position_t *x, hb_position_t *y)
   {
     *x = *y = 0;
-    return klass->get.glyph_v_origin (this, user_data,
-                                     glyph, x, y,
-                                     klass->user_data.glyph_v_origin);
+    return klass->get.f.glyph_v_origin (this, user_data,
+                                       glyph, x, y,
+                                       klass->user_data.glyph_v_origin);
   }
 
   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,
-                                      left_glyph, right_glyph,
-                                      klass->user_data.glyph_h_kerning);
+    return klass->get.f.glyph_h_kerning (this, user_data,
+                                        left_glyph, right_glyph,
+                                        klass->user_data.glyph_h_kerning);
   }
 
   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,
-                                      top_glyph, bottom_glyph,
-                                      klass->user_data.glyph_v_kerning);
+    return klass->get.f.glyph_v_kerning (this, user_data,
+                                        top_glyph, bottom_glyph,
+                                        klass->user_data.glyph_v_kerning);
   }
 
   inline hb_bool_t get_glyph_extents (hb_codepoint_t glyph,
                                      hb_glyph_extents_t *extents)
   {
     memset (extents, 0, sizeof (*extents));
-    return klass->get.glyph_extents (this, user_data,
-                                    glyph,
-                                    extents,
-                                    klass->user_data.glyph_extents);
+    return klass->get.f.glyph_extents (this, 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,
                                            hb_position_t *x, hb_position_t *y)
   {
     *x = *y = 0;
-    return klass->get.glyph_contour_point (this, user_data,
-                                          glyph, point_index,
-                                          x, y,
-                                          klass->user_data.glyph_contour_point);
+    return klass->get.f.glyph_contour_point (this, user_data,
+                                            glyph, point_index,
+                                            x, y,
+                                            klass->user_data.glyph_contour_point);
   }
 
   inline hb_bool_t get_glyph_name (hb_codepoint_t glyph,
                                   char *name, unsigned int size)
   {
     if (size) *name = '\0';
-    return klass->get.glyph_name (this, user_data,
-                                 glyph,
-                                 name, size,
-                                 klass->user_data.glyph_name);
+    return klass->get.f.glyph_name (this, user_data,
+                                   glyph,
+                                   name, size,
+                                   klass->user_data.glyph_name);
   }
 
   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 {
   {
     *glyph = 0;
     if (len == -1) len = strlen (name);
-    return klass->get.glyph_from_name (this, user_data,
-                                      name, len,
-                                      glyph,
-                                      klass->user_data.glyph_from_name);
+    return klass->get.f.glyph_from_name (this, user_data,
+                                        name, len,
+                                        glyph,
+                                        klass->user_data.glyph_from_name);
   }
 
 
index a1f227c..9df71c0 100644 (file)
@@ -474,11 +474,11 @@ hb_font_funcs_set_##name##_func (hb_font_funcs_t             *ffuncs,    \
     ffuncs->destroy.name (ffuncs->user_data.name);                       \
                                                                          \
   if (func) {                                                            \
-    ffuncs->get.name = func;                                             \
+    ffuncs->get.f.name = func;                                           \
     ffuncs->user_data.name = user_data;                                  \
     ffuncs->destroy.name = destroy;                                      \
   } else {                                                               \
-    ffuncs->get.name = hb_font_get_##name##_parent;                      \
+    ffuncs->get.f.name = hb_font_get_##name##_parent;                    \
     ffuncs->user_data.name = NULL;                                       \
     ffuncs->destroy.name = NULL;                                         \
   }                                                                      \