X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fhb-font.h;h=37d36b4d2b2b13f03dc0472dd25c81658e88ef71;hb=97158392a5899ddb739afaac925128f33f699bd7;hp=4b9540b0ca6fe56331083acd004000dd009a5a3f;hpb=5668189c12c264e8d2caf0d12dac918363ef6f80;p=framework%2Fuifw%2Fharfbuzz.git diff --git a/src/hb-font.h b/src/hb-font.h index 4b9540b..37d36b4 100644 --- a/src/hb-font.h +++ b/src/hb-font.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Red Hat, Inc. + * Copyright © 2009 Red Hat, Inc. * * This is part of HarfBuzz, a text shaping library. * @@ -41,10 +41,10 @@ typedef struct _hb_font_t hb_font_t; */ hb_face_t * -hb_face_create_for_data (hb_blob_t *blob, - unsigned int index); +hb_face_create (hb_blob_t *blob, + unsigned int index); -typedef hb_blob_t * (*hb_get_table_func_t) (hb_tag_t tag, void *user_data); +typedef hb_blob_t * (*hb_get_table_func_t) (hb_face_t *face, hb_tag_t tag, void *user_data); /* calls destroy() when not needing user_data anymore */ hb_face_t * @@ -53,30 +53,35 @@ hb_face_create_for_tables (hb_get_table_func_t get_table, hb_destroy_func_t destroy); hb_face_t * -hb_face_reference (hb_face_t *face); +hb_face_get_empty (void); -unsigned int -hb_face_get_reference_count (hb_face_t *face); +hb_face_t * +hb_face_reference (hb_face_t *face); void hb_face_destroy (hb_face_t *face); -/* XXX - * - * I have two major concerns about this API as it is right now: - * - * - Jonathan Kew convinced me to make it return NULL if table not found (280af1bd), - * however, that is WRONG IMO. The API should not differentiate between a non-existing - * table vs a zero-length table vs a very short table. It only leads to implementations - * that check for non-NULL and assume that they've got a usable table going on... This - * actually happened with Firefox. - * - * - It has to be renamed to reference_table() since unlike any other _get_ API, a reference - * ownership transfer happens and the user is responsible to destroy the result. - */ +hb_bool_t +hb_face_set_user_data (hb_face_t *face, + hb_user_data_key_t *key, + void * data, + hb_destroy_func_t destroy); + + +void * +hb_face_get_user_data (hb_face_t *face, + hb_user_data_key_t *key); + +void +hb_face_make_immutable (hb_face_t *face); + +hb_bool_t +hb_face_is_immutable (hb_face_t *face); + + hb_blob_t * -hb_face_get_table (hb_face_t *face, - hb_tag_t tag); +hb_face_reference_table (hb_face_t *face, + hb_tag_t tag); unsigned int hb_face_get_upem (hb_face_t *face); @@ -92,16 +97,25 @@ hb_font_funcs_t * hb_font_funcs_create (void); hb_font_funcs_t * -hb_font_funcs_reference (hb_font_funcs_t *ffuncs); +hb_font_funcs_get_empty (void); -unsigned int -hb_font_funcs_get_reference_count (hb_font_funcs_t *ffuncs); +hb_font_funcs_t * +hb_font_funcs_reference (hb_font_funcs_t *ffuncs); void hb_font_funcs_destroy (hb_font_funcs_t *ffuncs); -hb_font_funcs_t * -hb_font_funcs_copy (hb_font_funcs_t *ffuncs); +hb_bool_t +hb_font_funcs_set_user_data (hb_font_funcs_t *ffuncs, + hb_user_data_key_t *key, + void * data, + hb_destroy_func_t destroy); + + +void * +hb_font_funcs_get_user_data (hb_font_funcs_t *ffuncs, + hb_user_data_key_t *key); + void hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs); @@ -113,88 +127,176 @@ 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_codepoint_t (*hb_font_get_glyph_func_t) (hb_font_t *font, hb_face_t *face, const void *user_data, - hb_codepoint_t unicode, hb_codepoint_t variation_selector); -typedef void (*hb_font_get_glyph_advance_func_t) (hb_font_t *font, hb_face_t *face, const void *user_data, - hb_codepoint_t glyph, - hb_position_t *x_advance, hb_position_t *y_advance); -typedef void (*hb_font_get_glyph_extents_func_t) (hb_font_t *font, hb_face_t *face, const void *user_data, - hb_codepoint_t glyph, - hb_glyph_extents_t *extents); -typedef hb_bool_t (*hb_font_get_contour_point_func_t) (hb_font_t *font, hb_face_t *face, const void *user_data, - unsigned int point_index, hb_codepoint_t glyph, - hb_position_t *x, hb_position_t *y); -typedef hb_position_t (*hb_font_get_kerning_func_t) (hb_font_t *font, hb_face_t *face, const void *user_data, - hb_codepoint_t first_glyph, hb_codepoint_t second_glyph); +/* 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 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; + +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; + +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, - hb_font_get_glyph_func_t glyph_func); + hb_font_get_glyph_func_t glyph_func, + void *user_data, hb_destroy_func_t destroy); void -hb_font_funcs_set_glyph_advance_func (hb_font_funcs_t *ffuncs, - hb_font_get_glyph_advance_func_t glyph_advance_func); +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); void -hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs, - hb_font_get_glyph_extents_func_t glyph_extents_func); +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_funcs_set_contour_point_func (hb_font_funcs_t *ffuncs, - hb_font_get_contour_point_func_t contour_point_func); +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_funcs_set_kerning_func (hb_font_funcs_t *ffuncs, - hb_font_get_kerning_func_t kerning_func); +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); -/* These never return NULL. Return fallback defaults instead. */ +/* func dispatch */ -hb_font_get_glyph_func_t -hb_font_funcs_get_glyph_func (hb_font_funcs_t *ffuncs); +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_font_get_glyph_advance_func_t -hb_font_funcs_get_glyph_advance_func (hb_font_funcs_t *ffuncs); +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_font_get_glyph_extents_func_t -hb_font_funcs_get_glyph_extents_func (hb_font_funcs_t *ffuncs); +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_font_get_contour_point_func_t -hb_font_funcs_get_contour_point_func (hb_font_funcs_t *ffuncs); +hb_bool_t +hb_font_get_glyph_extents (hb_font_t *font, + hb_codepoint_t glyph, + hb_glyph_extents_t *extents); -hb_font_get_kerning_func_t -hb_font_funcs_get_kerning_func (hb_font_funcs_t *ffuncs); +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); -hb_codepoint_t -hb_font_get_glyph (hb_font_t *font, hb_face_t *face, - hb_codepoint_t unicode, hb_codepoint_t variation_selector); +/* high-level funcs, with fallback */ void -hb_font_get_glyph_advance (hb_font_t *font, hb_face_t *face, - hb_codepoint_t glyph, - hb_position_t *x_advance, hb_position_t *y_advance); +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_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_extents (hb_font_t *font, hb_face_t *face, - hb_codepoint_t glyph, - hb_glyph_extents_t *extents); +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_contour_point (hb_font_t *font, hb_face_t *face, - unsigned int point_index, hb_codepoint_t glyph, - hb_position_t *x, hb_position_t *y); +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_position_t -hb_font_get_kerning (hb_font_t *font, hb_face_t *face, - hb_codepoint_t first_glyph, hb_codepoint_t second_glyph); +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); /* @@ -204,52 +306,60 @@ hb_font_get_kerning (hb_font_t *font, hb_face_t *face, /* Fonts are very light-weight objects */ hb_font_t * -hb_font_create (void); +hb_font_create (hb_face_t *face); hb_font_t * -hb_font_reference (hb_font_t *font); +hb_font_create_sub_font (hb_font_t *parent); -unsigned int -hb_font_get_reference_count (hb_font_t *font); +hb_font_t * +hb_font_get_empty (void); + +hb_font_t * +hb_font_reference (hb_font_t *font); void hb_font_destroy (hb_font_t *font); +hb_bool_t +hb_font_set_user_data (hb_font_t *font, + hb_user_data_key_t *key, + void * data, + hb_destroy_func_t destroy); + + +void * +hb_font_get_user_data (hb_font_t *font, + hb_user_data_key_t *key); + +void +hb_font_make_immutable (hb_font_t *font); + +hb_bool_t +hb_font_is_immutable (hb_font_t *font); + +hb_font_t * +hb_font_get_parent (hb_font_t *font); + +hb_face_t * +hb_font_get_face (hb_font_t *font); + + void hb_font_set_funcs (hb_font_t *font, hb_font_funcs_t *klass, - void *user_data, + void *font_data, hb_destroy_func_t destroy); -/* 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, - void **user_data, - hb_destroy_func_t *destroy); - -/* - * We should add support for full matrices. - */ void hb_font_set_scale (hb_font_t *font, - unsigned int x_scale, - unsigned int y_scale); + int x_scale, + int y_scale); void hb_font_get_scale (hb_font_t *font, - unsigned int *x_scale, - unsigned int *y_scale); + int *x_scale, + int *y_scale); /* * A zero value means "no hinting in that direction"