Support passing variations to coretext shaper

This commit is contained in:
Simon Cozens 2021-08-04 13:34:52 +01:00 committed by Behdad Esfahbod
parent f25daa4794
commit 66aef2818e
1 changed files with 33 additions and 0 deletions

View File

@ -332,6 +332,39 @@ _hb_coretext_shaper_font_data_create (hb_font_t *font)
return nullptr; return nullptr;
} }
if (font->coords) {
hb_ot_var_axis_info_t info;
unsigned int c = 1;
CFMutableDictionaryRef variations = CFDictionaryCreateMutable (kCFAllocatorDefault,
font->num_coords,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
for (unsigned int i=0; i < font->num_coords; i++)
{
if (font->coords[i] == 0) continue;
hb_ot_var_get_axis_infos (font->face, i, &c, &info);
CFDictionarySetValue(variations,
CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &info.tag),
CFNumberCreate (kCFAllocatorDefault, kCFNumberFloatType, &font->design_coords[i])
);
}
CFDictionaryRef attributes = CFDictionaryCreate (kCFAllocatorDefault,
(const void **) &kCTFontVariationAttribute,
(const void **) &variations,
1,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
CTFontDescriptorRef varDesc = CTFontDescriptorCreateWithAttributes(attributes);
CTFontRef new_ct_font = CTFontCreateCopyWithAttributes(ct_font, 0, nullptr, varDesc);
CFRelease (ct_font);
CFRelease (attributes);
CFRelease (variations);
ct_font = new_ct_font;
}
return (hb_coretext_font_data_t *) ct_font; return (hb_coretext_font_data_t *) ct_font;
} }