X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fhb-font.h;h=37d36b4d2b2b13f03dc0472dd25c81658e88ef71;hb=97158392a5899ddb739afaac925128f33f699bd7;hp=71f7eb7d989538644e71f4756305c8867ed971c9;hpb=0ead481a5a8623103565fd7d924666e7342278dd;p=framework%2Fuifw%2Fharfbuzz.git diff --git a/src/hb-font.h b/src/hb-font.h index 71f7eb7..37d36b4 100644 --- a/src/hb-font.h +++ b/src/hb-font.h @@ -1,7 +1,7 @@ /* - * Copyright (C) 2009 Red Hat, Inc. + * Copyright © 2009 Red Hat, Inc. * - * This is part of HarfBuzz, an OpenType Layout engine library. + * This is part of HarfBuzz, a text shaping library. * * Permission is hereby granted, without written agreement and without * license or royalty fees, to use, copy, modify, and distribute this @@ -32,130 +32,271 @@ HB_BEGIN_DECLS -typedef struct _hb_font_callbacks_t hb_font_callbacks_t; -typedef struct _hb_unicode_callbacks_t hb_unicode_callbacks_t; typedef struct _hb_face_t hb_face_t; typedef struct _hb_font_t hb_font_t; -typedef hb_blob_t * (*hb_get_table_func_t) (hb_tag_t tag, void *user_data); - - /* - * hb_font_callbacks_t + * hb_face_t */ -hb_font_callbacks_t * -hb_font_callbacks_create (void); +hb_face_t * +hb_face_create (hb_blob_t *blob, + unsigned int index); -hb_font_callbacks_t * -hb_font_callbacks_reference (hb_font_callbacks_t *fcallbacks); +typedef hb_blob_t * (*hb_get_table_func_t) (hb_face_t *face, hb_tag_t tag, void *user_data); -unsigned int -hb_font_callbacks_get_reference_count (hb_font_callbacks_t *fcallbacks); +/* calls destroy() when not needing user_data anymore */ +hb_face_t * +hb_face_create_for_tables (hb_get_table_func_t get_table, + void *user_data, + hb_destroy_func_t destroy); + +hb_face_t * +hb_face_get_empty (void); + +hb_face_t * +hb_face_reference (hb_face_t *face); void -hb_font_callbacks_destroy (hb_font_callbacks_t *fcallbacks); +hb_face_destroy (hb_face_t *face); -hb_font_callbacks_t * -hb_font_callbacks_copy (hb_font_callbacks_t *fcallbacks); +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_font_callbacks_set_glyph_func (hb_font_callbacks_t *fcallbacks, - hb_font_get_glyph_func_t glyph_func); +void * +hb_face_get_user_data (hb_face_t *face, + hb_user_data_key_t *key); void -hb_font_callbacks_set_contour_point_func (hb_font_callbacks_t *fcallbacks, - hb_font_get_contour_point_func_t contour_point_func); +hb_face_make_immutable (hb_face_t *face); -void -hb_font_callbacks_set_glyph_metrics_func (hb_font_callbacks_t *fcallbacks, - hb_font_get_glyph_metrics_func_t glyph_metrics_func); +hb_bool_t +hb_face_is_immutable (hb_face_t *face); -void -hb_font_callbacks_set_kerning_func (hb_font_callbacks_t *fcallbacks, - hb_font_get_kerning_func_t kerning_func); -*/ +hb_blob_t * +hb_face_reference_table (hb_face_t *face, + hb_tag_t tag); + +unsigned int +hb_face_get_upem (hb_face_t *face); /* - * hb_unicode_callbacks_t + * hb_font_funcs_t */ -hb_unicode_callbacks_t * -hb_unicode_callbacks_create (void); +typedef struct _hb_font_funcs_t hb_font_funcs_t; -hb_unicode_callbacks_t * -hb_unicode_callbacks_reference (hb_unicode_callbacks_t *ucallbacks); +hb_font_funcs_t * +hb_font_funcs_create (void); -unsigned int -hb_unicode_callbacks_get_reference_count (hb_unicode_callbacks_t *ucallbacks); +hb_font_funcs_t * +hb_font_funcs_get_empty (void); + +hb_font_funcs_t * +hb_font_funcs_reference (hb_font_funcs_t *ffuncs); void -hb_unicode_callbacks_destroy (hb_unicode_callbacks_t *ucallbacks); +hb_font_funcs_destroy (hb_font_funcs_t *ffuncs); -hb_unicode_callbacks_t * -hb_unicode_callbacks_copy (hb_unicode_callbacks_t *ucallbacks); +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_unicode_callbacks_set_general_category_func (hb_unicode_callbacks_t *ucallbacks, - hb_unicode_get_general_category_func_t general_category_func); +void * +hb_font_funcs_get_user_data (hb_font_funcs_t *ffuncs, + hb_user_data_key_t *key); -void -hb_unicode_callbacks_set_combining_class_func (hb_unicode_callbacks_t *ucallbacks, - hb_unicode_get_combining_class_func_t combining_class_func); void -hb_unicode_callbacks_set_mirroring_char_func (hb_unicode_callbacks_t *ucallbacks, - hb_unicode_get_mirroring_char_func_t mirroring_char_func); +hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs); -void -hb_unicode_callbacks_set_script_func (hb_unicode_callbacks_t *ucallbacks, - hb_unicode_get_script_func_t script_func); +hb_bool_t +hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs); -void -hb_unicode_callbacks_set_eastasian_width_func (hb_unicode_callbacks_t *ucallbacks, - hb_unicode_get_eastasian_width_func_t eastasian_width_func); +/* funcs */ -*/ +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_glyph_extents_t; -/* - * hb_face_t - */ +/* func types */ -hb_face_t * -hb_face_create_for_data (hb_blob_t *blob, - unsigned int index); +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); -/* calls destory() when not needing user_data anymore */ -hb_face_t * -hb_face_create_for_tables (hb_get_table_func_t get_table, - hb_destroy_func_t destroy, - void *user_data); -hb_face_t * -hb_face_reference (hb_face_t *face); +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; -unsigned int -hb_face_get_reference_count (hb_face_t *face); +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_face_destroy (hb_face_t *face); +hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs, + hb_font_get_glyph_func_t glyph_func, + void *user_data, hb_destroy_func_t destroy); void -hb_face_set_font_callbacks (hb_face_t *face, - hb_font_callbacks_t *fcallbacks); +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_face_set_unicode_callbacks (hb_face_t *face, - hb_unicode_callbacks_t *ucallbacks); +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_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_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_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); /* @@ -168,30 +309,57 @@ hb_font_t * 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); -/* - * XXX - * should we decompose this to units_per_EM and font-size? - * units_per_EM setting then can go into the face, or better, - * read from the 'head' table. - * - * Then we either need size+shape like freetype does, or a full - * matrix. - */ + +void +hb_font_set_funcs (hb_font_t *font, + hb_font_funcs_t *klass, + void *font_data, + hb_destroy_func_t destroy); + + void hb_font_set_scale (hb_font_t *font, - hb_16dot16_t x_scale, - hb_16dot16_t y_scale); + int x_scale, + int y_scale); + +void +hb_font_get_scale (hb_font_t *font, + int *x_scale, + int *y_scale); /* * A zero value means "no hinting in that direction" @@ -201,6 +369,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