Add getters for all setter APIs
authorBehdad Esfahbod <behdad@behdad.org>
Mon, 4 Oct 2010 20:45:21 +0000 (16:45 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Mon, 4 Oct 2010 20:45:21 +0000 (16:45 -0400)
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.

src/hb-font.cc
src/hb-font.h
src/hb-unicode.c
src/hb-unicode.h

index 8a547a3..e257cd8 100644 (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)
@@ -444,6 +470,26 @@ hb_font_set_funcs (hb_font_t         *font,
 }
 
 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,
                   unsigned int y_scale)
@@ -456,6 +502,15 @@ hb_font_set_scale (hb_font_t *font,
 }
 
 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,
                  unsigned int y_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
index 6f1f3ca..a7b6d8f 100644 (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
 
index 2de963e..19a891b 100644 (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)
index 8aeba33..a84a948 100644 (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);