[Indic] Add Final Reordering rules into comments
[framework/uifw/harfbuzz.git] / src / hb-font.h
index 34a8f7d..37d36b4 100644 (file)
@@ -127,49 +127,52 @@ hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs);
 
 typedef struct _hb_glyph_extents_t
 {
-    hb_position_t x_bearing;
-    hb_position_t y_bearing;
-    hb_position_t width;
-    hb_position_t height;
+  hb_position_t x_bearing;
+  hb_position_t y_bearing;
+  hb_position_t width;
+  hb_position_t height;
 } hb_glyph_extents_t;
 
 
-typedef hb_bool_t (*hb_font_get_contour_point_func_t) (hb_font_t *font, void *font_data,
-                                                      hb_codepoint_t glyph, unsigned int point_index,
-                                                      hb_position_t *x, hb_position_t *y,
-                                                      void *user_data);
-typedef void (*hb_font_get_glyph_advance_func_t) (hb_font_t *font, void *font_data,
-                                                 hb_codepoint_t glyph,
-                                                 hb_position_t *x_advance, hb_position_t *y_advance,
-                                                 void *user_data);
-typedef void (*hb_font_get_glyph_extents_func_t) (hb_font_t *font, void *font_data,
-                                                 hb_codepoint_t glyph,
-                                                 hb_glyph_extents_t *extents,
-                                                 void *user_data);
+/* func types */
+
 typedef hb_bool_t (*hb_font_get_glyph_func_t) (hb_font_t *font, void *font_data,
                                               hb_codepoint_t unicode, hb_codepoint_t variation_selector,
                                               hb_codepoint_t *glyph,
                                               void *user_data);
-typedef void (*hb_font_get_kerning_func_t) (hb_font_t *font, void *font_data,
-                                           hb_codepoint_t left_glyph, hb_codepoint_t right_glyph,
-                                           hb_position_t *x_kern, hb_position_t *y_kern,
-                                           void *user_data);
 
 
-void
-hb_font_funcs_set_contour_point_func (hb_font_funcs_t *ffuncs,
-                                     hb_font_get_contour_point_func_t contour_point_func,
-                                     void *user_data, hb_destroy_func_t destroy);
+typedef hb_position_t (*hb_font_get_glyph_advance_func_t) (hb_font_t *font, void *font_data,
+                                                          hb_codepoint_t glyph,
+                                                          void *user_data);
+typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_h_advance_func_t;
+typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_v_advance_func_t;
 
-void
-hb_font_funcs_set_glyph_advance_func (hb_font_funcs_t *ffuncs,
-                                     hb_font_get_glyph_advance_func_t glyph_advance_func,
-                                     void *user_data, hb_destroy_func_t destroy);
+typedef hb_bool_t (*hb_font_get_glyph_origin_func_t) (hb_font_t *font, void *font_data,
+                                                     hb_codepoint_t glyph,
+                                                     hb_position_t *x, hb_position_t *y,
+                                                     void *user_data);
+typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;
+typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;
 
-void
-hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
-                                     hb_font_get_glyph_extents_func_t glyph_extents_func,
-                                     void *user_data, hb_destroy_func_t destroy);
+typedef hb_position_t (*hb_font_get_glyph_kerning_func_t) (hb_font_t *font, void *font_data,
+                                                          hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
+                                                          void *user_data);
+typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_h_kerning_func_t;
+typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_v_kerning_func_t;
+
+
+typedef hb_bool_t (*hb_font_get_glyph_extents_func_t) (hb_font_t *font, void *font_data,
+                                                      hb_codepoint_t glyph,
+                                                      hb_glyph_extents_t *extents,
+                                                      void *user_data);
+typedef hb_bool_t (*hb_font_get_glyph_contour_point_func_t) (hb_font_t *font, void *font_data,
+                                                            hb_codepoint_t glyph, unsigned int point_index,
+                                                            hb_position_t *x, hb_position_t *y,
+                                                            void *user_data);
+
+
+/* func setters */
 
 void
 hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
@@ -177,35 +180,123 @@ hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
                              void *user_data, hb_destroy_func_t destroy);
 
 void
-hb_font_funcs_set_kerning_func (hb_font_funcs_t *ffuncs,
-                               hb_font_get_kerning_func_t kerning_func,
-                               void *user_data, hb_destroy_func_t destroy);
-
+hb_font_funcs_set_glyph_h_advance_func (hb_font_funcs_t *ffuncs,
+                                       hb_font_get_glyph_h_advance_func_t func,
+                                       void *user_data, hb_destroy_func_t destroy);
+void
+hb_font_funcs_set_glyph_v_advance_func (hb_font_funcs_t *ffuncs,
+                                       hb_font_get_glyph_v_advance_func_t func,
+                                       void *user_data, hb_destroy_func_t destroy);
 
-hb_bool_t
-hb_font_get_contour_point (hb_font_t *font,
-                          hb_codepoint_t glyph, unsigned int point_index,
-                          hb_position_t *x, hb_position_t *y);
+void
+hb_font_funcs_set_glyph_h_origin_func (hb_font_funcs_t *ffuncs,
+                                      hb_font_get_glyph_h_origin_func_t func,
+                                      void *user_data, hb_destroy_func_t destroy);
+void
+hb_font_funcs_set_glyph_v_origin_func (hb_font_funcs_t *ffuncs,
+                                      hb_font_get_glyph_v_origin_func_t func,
+                                      void *user_data, hb_destroy_func_t destroy);
 
 void
-hb_font_get_glyph_advance (hb_font_t *font,
-                          hb_codepoint_t glyph,
-                          hb_position_t *x_advance, hb_position_t *y_advance);
+hb_font_funcs_set_glyph_h_kerning_func (hb_font_funcs_t *ffuncs,
+                                       hb_font_get_glyph_h_kerning_func_t func,
+                                       void *user_data, hb_destroy_func_t destroy);
+void
+hb_font_funcs_set_glyph_v_kerning_func (hb_font_funcs_t *ffuncs,
+                                       hb_font_get_glyph_v_kerning_func_t func,
+                                       void *user_data, hb_destroy_func_t destroy);
 
 void
-hb_font_get_glyph_extents (hb_font_t *font,
-                          hb_codepoint_t glyph,
-                          hb_glyph_extents_t *extents);
+hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
+                                     hb_font_get_glyph_extents_func_t func,
+                                     void *user_data, hb_destroy_func_t destroy);
+void
+hb_font_funcs_set_glyph_contour_point_func (hb_font_funcs_t *ffuncs,
+                                           hb_font_get_glyph_contour_point_func_t func,
+                                           void *user_data, hb_destroy_func_t destroy);
+
+
+/* func dispatch */
 
 hb_bool_t
 hb_font_get_glyph (hb_font_t *font,
                   hb_codepoint_t unicode, hb_codepoint_t variation_selector,
                   hb_codepoint_t *glyph);
 
+hb_position_t
+hb_font_get_glyph_h_advance (hb_font_t *font,
+                            hb_codepoint_t glyph);
+hb_position_t
+hb_font_get_glyph_v_advance (hb_font_t *font,
+                            hb_codepoint_t glyph);
+
+hb_bool_t
+hb_font_get_glyph_h_origin (hb_font_t *font,
+                           hb_codepoint_t glyph,
+                           hb_position_t *x, hb_position_t *y);
+hb_bool_t
+hb_font_get_glyph_v_origin (hb_font_t *font,
+                           hb_codepoint_t glyph,
+                           hb_position_t *x, hb_position_t *y);
+
+hb_position_t
+hb_font_get_glyph_h_kerning (hb_font_t *font,
+                            hb_codepoint_t left_glyph, hb_codepoint_t right_glyph);
+hb_position_t
+hb_font_get_glyph_v_kerning (hb_font_t *font,
+                            hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph);
+
+hb_bool_t
+hb_font_get_glyph_extents (hb_font_t *font,
+                          hb_codepoint_t glyph,
+                          hb_glyph_extents_t *extents);
+
+hb_bool_t
+hb_font_get_glyph_contour_point (hb_font_t *font,
+                                hb_codepoint_t glyph, unsigned int point_index,
+                                hb_position_t *x, hb_position_t *y);
+
+
+/* high-level funcs, with fallback */
+
+void
+hb_font_get_glyph_advance_for_direction (hb_font_t *font,
+                                        hb_codepoint_t glyph,
+                                        hb_direction_t direction,
+                                        hb_position_t *x, hb_position_t *y);
+void
+hb_font_get_glyph_origin_for_direction (hb_font_t *font,
+                                       hb_codepoint_t glyph,
+                                       hb_direction_t direction,
+                                       hb_position_t *x, hb_position_t *y);
 void
-hb_font_get_kerning (hb_font_t *font,
-                    hb_codepoint_t left_glyph, hb_codepoint_t right_glyph,
-                    hb_position_t *x_kern, hb_position_t *y_kern);
+hb_font_add_glyph_origin_for_direction (hb_font_t *font,
+                                       hb_codepoint_t glyph,
+                                       hb_direction_t direction,
+                                       hb_position_t *x, hb_position_t *y);
+void
+hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
+                                            hb_codepoint_t glyph,
+                                            hb_direction_t direction,
+                                            hb_position_t *x, hb_position_t *y);
+
+void
+hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
+                                        hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
+                                        hb_direction_t direction,
+                                        hb_position_t *x, hb_position_t *y);
+
+hb_bool_t
+hb_font_get_glyph_extents_for_origin (hb_font_t *font,
+                                     hb_codepoint_t glyph,
+                                     hb_direction_t direction,
+                                     hb_glyph_extents_t *extents);
+
+hb_bool_t
+hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
+                                           hb_codepoint_t glyph, unsigned int point_index,
+                                           hb_direction_t direction,
+                                           hb_position_t *x, hb_position_t *y);
 
 
 /*
@@ -260,9 +351,6 @@ hb_font_set_funcs (hb_font_t         *font,
                   hb_destroy_func_t  destroy);
 
 
-/*
- * We should add support for full matrices.
- */
 void
 hb_font_set_scale (hb_font_t *font,
                   int x_scale,