[HarfBuzz] No kerning?

Jamie Dale jamiedale88+harfbuzz at gmail.com
Mon Oct 5 13:07:34 PDT 2015


I wasn't aware such a thing existed. I've tried turning it on as per your
example, however it doesn't seem to have made any difference.

-Jamie.

On 5 October 2015 at 20:45, Konstantin Ritt <ritt.ks at gmail.com> wrote:

> Did you enable 'kern' feature? Something like that:
>
>             const hb_feature_t features[1] = {
>
>                 { HB_TAG('k','e','r','n'), !!kerningEnabled, 0, uint(-1) }
>
>             };
>
>             const int num_features = 1;
>
>
>             bool shapedOk = hb_shape_full(hb_font, buffer, features, num_features, 0);
>
>
>
> Regards,
> Konstantin
>
> 2015-10-05 23:32 GMT+04:00 Jamie Dale <jamiedale88+harfbuzz at gmail.com>:
>
>> Hey all,
>>
>> In our application we have two text shaping backends; a simple "kerning
>> only" implementation using our existing font rendering code (fast, but
>> can't handle complex languages), and a HarfBuzz based implementation for
>> when we need to support complex languages (although ideally the
>> HarfBuzz implementation should be able to produce mostly equivalent results
>> when compared to our existing font rendering when dealing with languages
>> like English).
>>
>> If you've seen my previous email entitled "Using FreeType load flags",
>> then you'll know I'm using some custom font functions to try and ensure
>> HarfBuzz uses the correct FreeType hinting flags, as well as cache a lot of
>> FreeType calls, and use the correct scale.
>>
>> So far this has worked out really well, however I've noticed that the
>> HarfBuzz implementation isn't applying kerning when shaping English text
>> (probably other languages too).
>>
>> The images below are using the Roboto font, and show the output from each
>> implementation.
>> The top image is using our "kerning only" implementation, and the bottom
>> image is using HarfBuzz. Note that the "T" and "e" characters are further
>> apart in the bottom image.
>> [image: Inline images 2]
>> [image: Inline images 1]
>>
>> Here's the (slightly cut down) code I'm using to create my HarfBuzz font:
>>
>> hb_font_t* CreateHarfBuzzFont(FT_Face InFace, const uint32 InGlyphFlags,
>> const int32 InFontSize, const float InFontScale)
>> {
>> hb_font_t* HarfBuzzFont = nullptr;
>>
>> // Set the character size to render at (needs to be in 1/64 of a "point")
>> FT_Set_Char_Size(InFace, 0, InFontSize * 64, 96, 96);
>>
>> if (InFontScale != 1.0f)
>> {
>> FT_Matrix ScaleMatrix;
>> ScaleMatrix.xy = 0;
>> ScaleMatrix.xx = (FT_Fixed)(InFontScale * 65536);
>> ScaleMatrix.yy = (FT_Fixed)(InFontScale * 65536);
>> ScaleMatrix.yx = 0;
>> FT_Set_Transform(InFace, &ScaleMatrix, nullptr);
>> }
>> else
>> {
>> FT_Set_Transform(InFace, nullptr, nullptr);
>> }
>>
>> {
>> // Create a sub-font from the default FreeType implementation so we can
>> override some font functions to provide low-level caching
>> hb_font_t* HarfBuzzFTFont = hb_ft_font_create(InFace, nullptr);
>> HarfBuzzFont = hb_font_create_sub_font(HarfBuzzFTFont);
>> hb_font_destroy(HarfBuzzFTFont);
>> }
>>
>> hb_font_set_funcs(...); // Sets functions that use the user-data below,
>> implementations are mostly default, but with a caching layer, and usage of
>> FreeType hinting flags
>> hb_font_set_user_data(...); // Ensures we have access to InGlyphFlags and
>> the low-level caches
>> hb_font_set_scale(HarfBuzzFont, InFontScale, InFontScale);
>>
>> return HarfBuzzFont;
>> }
>>
>> Am I just missing something simple? I tried calling hb_font_set_ppem but
>> that didn't seem to make any difference.
>>
>> Thanks,
>> Jamie.
>>
>> _______________________________________________
>> HarfBuzz mailing list
>> HarfBuzz at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/harfbuzz
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/harfbuzz/attachments/20151005/86a3a503/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 2115 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/harfbuzz/attachments/20151005/86a3a503/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 2117 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/harfbuzz/attachments/20151005/86a3a503/attachment-0001.png>


More information about the HarfBuzz mailing list