docs/harfbuzz-sections.txt | 2 + src/hb-coretext.cc | 2 - src/hb-face-private.hh | 9 ---- src/hb-face.cc | 17 --------- src/hb-font-private.hh | 14 +------ src/hb-font.cc | 83 ++++++++++++++++++++++++++------------------- src/hb-font.h | 10 +++++ 7 files changed, 63 insertions(+), 74 deletions(-)
New commits: commit 16d02a58cf187dbcecc1c796acdc5d3a70ca288e Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Oct 11 12:28:06 2017 +0200 [coretext] Change default font size from 36 to 18 diff --git a/src/hb-coretext.cc b/src/hb-coretext.cc index ba96d399..5c0b65af 100644 --- a/src/hb-coretext.cc +++ b/src/hb-coretext.cc @@ -229,7 +229,7 @@ _hb_coretext_shaper_face_data_create (hb_face_t *face) * Since we always create CTFont at a fixed size, our CTFont lives in face_data * instead of font_data. Which is good, because when people change scale on * hb_font_t, we won't need to update our CTFont. */ - data->ct_font = create_ct_font (data->cg_font, 36.); + data->ct_font = create_ct_font (data->cg_font, 18.); if (unlikely (!data->ct_font)) { DEBUG_MSG (CORETEXT, face, "CTFont creation failed."); commit c0c2dbc871667c32ac8eedb11de64078ef24a429 Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Oct 11 12:23:35 2017 +0200 Remove dirty tracking Turns out I don't need this to resolve CoreText optical sizing issue after all. https://github.com/behdad/harfbuzz/issues/360 diff --git a/src/hb-face-private.hh b/src/hb-face-private.hh index 72f08a59..43e7b1cb 100644 --- a/src/hb-face-private.hh +++ b/src/hb-face-private.hh @@ -54,13 +54,6 @@ struct hb_face_t { mutable unsigned int upem; /* Units-per-EM. */ mutable unsigned int num_glyphs; /* Number of glyphs. */ - enum dirty_t { - DIRTY_NOTHING = 0x0000, - DIRTY_INDEX = 0x0001, - DIRTY_UPEM = 0x0002, - DIRTY_NUM_GLYPHS = 0x0004, - } dirty; - struct hb_shaper_data_t shaper_data; /* Various shaper data. */ /* Various non-shaping data. */ @@ -106,8 +99,6 @@ struct hb_face_t { HB_INTERNAL void load_num_glyphs (void) const; }; -HB_MARK_AS_FLAG_T (hb_face_t::dirty_t); - extern HB_INTERNAL const hb_face_t _hb_face_nil; #define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS diff --git a/src/hb-face.cc b/src/hb-face.cc index 22998f00..d7d736d7 100644 --- a/src/hb-face.cc +++ b/src/hb-face.cc @@ -51,8 +51,6 @@ const hb_face_t _hb_face_nil = { 1000, /* upem */ 0, /* num_glyphs */ - hb_face_t::DIRTY_NOTHING, /* dirty */ - { #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID, #include "hb-shaper-list.hh" @@ -367,11 +365,6 @@ hb_face_set_index (hb_face_t *face, if (face->immutable) return; - if (face->index == index) - return; - - face->dirty |= face->DIRTY_INDEX; - face->index = index; } @@ -407,11 +400,6 @@ hb_face_set_upem (hb_face_t *face, if (face->immutable) return; - if (face->upem == upem) - return; - - face->dirty |= face->DIRTY_UPEM; - face->upem = upem; } @@ -456,11 +444,6 @@ hb_face_set_glyph_count (hb_face_t *face, if (face->immutable) return; - if (face->num_glyphs == glyph_count) - return; - - face->dirty |= face->DIRTY_NUM_GLYPHS; - face->num_glyphs = glyph_count; } diff --git a/src/hb-font-private.hh b/src/hb-font-private.hh index 30661c32..d2801fb8 100644 --- a/src/hb-font-private.hh +++ b/src/hb-font-private.hh @@ -118,17 +118,6 @@ struct hb_font_t { void *user_data; hb_destroy_func_t destroy; - enum dirty_t { - DIRTY_NOTHING = 0x0000, - DIRTY_FACE = 0x0001, - DIRTY_PARENT = 0x0002, - DIRTY_FUNCS = 0x0004, - DIRTY_SCALE = 0x0008, - DIRTY_PPEM = 0x0010, - DIRTY_PTEM = 0x0020, - DIRTY_VARIATIONS = 0x0040, - } dirty; - struct hb_shaper_data_t shaper_data; @@ -556,8 +545,6 @@ struct hb_font_t { } }; -HB_MARK_AS_FLAG_T (hb_font_t::dirty_t); - #define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_PROTOTYPE(shaper, font); #include "hb-shaper-list.hh" diff --git a/src/hb-font.cc b/src/hb-font.cc index c47e2c14..88842079 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -1209,8 +1209,6 @@ hb_font_get_empty (void) NULL, /* user_data */ NULL, /* destroy */ - hb_font_t::DIRTY_NOTHING, /* dirty */ - { #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID, #include "hb-shaper-list.hh" @@ -1363,11 +1361,6 @@ hb_font_set_parent (hb_font_t *font, if (!parent) parent = hb_font_get_empty (); - if (parent == font->parent) - return; - - font->dirty |= font->DIRTY_PARENT; - hb_font_t *old = font->parent; font->parent = hb_font_reference (parent); @@ -1410,11 +1403,6 @@ hb_font_set_face (hb_font_t *font, if (unlikely (!face)) face = hb_face_get_empty (); - if (font->face == face) - return; - - font->dirty |= font->DIRTY_FACE; - hb_face_t *old = font->face; font->face = hb_face_reference (face); @@ -1468,8 +1456,6 @@ hb_font_set_funcs (hb_font_t *font, if (!klass) klass = hb_font_funcs_get_empty (); - font->dirty |= font->DIRTY_FUNCS; - hb_font_funcs_reference (klass); hb_font_funcs_destroy (font->klass); font->klass = klass; @@ -1525,11 +1511,6 @@ hb_font_set_scale (hb_font_t *font, if (font->immutable) return; - if (font->x_scale == x_scale && font->y_scale == y_scale) - return; - - font->dirty |= font->DIRTY_SCALE; - font->x_scale = x_scale; font->y_scale = y_scale; } @@ -1571,11 +1552,6 @@ hb_font_set_ppem (hb_font_t *font, if (font->immutable) return; - if (font->x_ppem == x_ppem && font->y_ppem == y_ppem) - return; - - font->dirty |= font->DIRTY_PPEM; - font->x_ppem = x_ppem; font->y_ppem = y_ppem; } @@ -1614,11 +1590,6 @@ hb_font_set_ptem (hb_font_t *font, float ptem) if (font->immutable) return; - if (font->ptem == ptem) - return; - - font->dirty |= font->DIRTY_PTEM; - font->ptem = ptem; } @@ -1647,16 +1618,6 @@ _hb_font_adopt_var_coords_normalized (hb_font_t *font, int *coords, /* 2.14 normalized */ unsigned int coords_length) { - if (font->num_coords == coords_length && - (coords_length == 0 || - 0 == memcmp (font->coords, coords, coords_length * sizeof (coords[0])))) - { - free (coords); - return; - } - - font->dirty |= font->DIRTY_VARIATIONS; - free (font->coords); font->coords = coords; commit b57f18da700837a57df9606290160ea6e96accc8 Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Oct 11 11:47:47 2017 +0200 Add hb_font_[sg]et_ptem() to set/get point size on font New API: hb_font_set_ptem() hb_font_get_ptem() Needed for hb-coretext optical sizing: https://github.com/behdad/harfbuzz/issues/360 diff --git a/docs/harfbuzz-sections.txt b/docs/harfbuzz-sections.txt index 6ceefd25..6d86d941 100644 --- a/docs/harfbuzz-sections.txt +++ b/docs/harfbuzz-sections.txt @@ -246,6 +246,7 @@ hb_font_get_nominal_glyph hb_font_get_nominal_glyph_func_t hb_font_get_parent hb_font_get_ppem +hb_font_get_ptem hb_font_get_scale hb_font_get_user_data hb_font_get_variation_glyph @@ -261,6 +262,7 @@ hb_font_set_funcs hb_font_set_funcs_data hb_font_set_parent hb_font_set_ppem +hb_font_set_ptem hb_font_set_scale hb_font_set_user_data hb_variation_t diff --git a/src/hb-font-private.hh b/src/hb-font-private.hh index ed9f2c54..30661c32 100644 --- a/src/hb-font-private.hh +++ b/src/hb-font-private.hh @@ -108,6 +108,8 @@ struct hb_font_t { unsigned int x_ppem; unsigned int y_ppem; + float ptem; + /* Font variation coordinates. */ unsigned int num_coords; int *coords; @@ -123,7 +125,8 @@ struct hb_font_t { DIRTY_FUNCS = 0x0004, DIRTY_SCALE = 0x0008, DIRTY_PPEM = 0x0010, - DIRTY_VARIATIONS = 0x0020, + DIRTY_PTEM = 0x0020, + DIRTY_VARIATIONS = 0x0040, } dirty; struct hb_shaper_data_t shaper_data; diff --git a/src/hb-font.cc b/src/hb-font.cc index 50da49e7..c47e2c14 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -1157,6 +1157,7 @@ hb_font_create_sub_font (hb_font_t *parent) font->y_scale = parent->y_scale; font->x_ppem = parent->x_ppem; font->y_ppem = parent->y_ppem; + font->ptem = parent->ptem; font->num_coords = parent->num_coords; if (!font->num_coords) @@ -1199,6 +1200,7 @@ hb_font_get_empty (void) 0, /* x_ppem */ 0, /* y_ppem */ + -1, /* ptem */ 0, /* num_coords */ NULL, /* coords */ @@ -1597,6 +1599,45 @@ hb_font_get_ppem (hb_font_t *font, if (y_ppem) *y_ppem = font->y_ppem; } +/** + * hb_font_set_ptem: + * @font: a font. + * @ptem: + * + * Sets "point size" of the font. + * + * Since: 1.6.0 + **/ +void +hb_font_set_ptem (hb_font_t *font, float ptem) +{ + if (font->immutable) + return; + + if (font->ptem == ptem) + return; + + font->dirty |= font->DIRTY_PTEM; + + font->ptem = ptem; +} + +/** + * hb_font_get_ptem: + * @font: a font. + * + * Gets the "point size" of the font. A value of -1 means unset. + * + * Return value: Point size. + * + * Since: 0.9.2 + **/ +float +hb_font_get_ptem (hb_font_t *font) +{ + return font->ptem; +} + /* * Variations */ diff --git a/src/hb-font.h b/src/hb-font.h index 85fb56d5..8fb1849d 100644 --- a/src/hb-font.h +++ b/src/hb-font.h @@ -607,6 +607,16 @@ hb_font_get_ppem (hb_font_t *font, unsigned int *x_ppem, unsigned int *y_ppem); +/* + * Point size per EM. Used for optical-sizing in CoreText. + * A -1 means "not set". + */ +HB_EXTERN void +hb_font_set_ptem (hb_font_t *font, float ptem); + +HB_EXTERN float +hb_font_get_ptem (hb_font_t *font); + HB_EXTERN void hb_font_set_variations (hb_font_t *font, const hb_variation_t *variations, commit 3f9370d9e5051b1abf2fc94be2e10a39c8069f75 Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Oct 11 11:34:53 2017 +0200 Fix TODO item diff --git a/src/hb-font.cc b/src/hb-font.cc index a684c234..50da49e7 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -1158,7 +1158,18 @@ hb_font_create_sub_font (hb_font_t *parent) font->x_ppem = parent->x_ppem; font->y_ppem = parent->y_ppem; - /* TODO: copy variation coordinates. */ + font->num_coords = parent->num_coords; + if (!font->num_coords) + font->coords = NULL; + else + { + unsigned int size = parent->num_coords * sizeof (parent->coords[0]); + font->coords = (int *) malloc (size); + if (unlikely (!font->coords)) + font->num_coords = 0; + else + memcpy (font->coords, parent->coords, size); + } return font; } _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz