[PATCH 4/6] dwrite: Use font fallback when mapping characters

Nikolay Sivov nsivov at codeweavers.com
Sat May 26 08:13:30 CDT 2018


On 05/23/2018 09:07 PM, Lucian Poston wrote:

> +    /**
> +     * This is a rough hack. We search the system font collection because
> +     * the system fontfallback, which would have been searched above, is not
> +     * fully implemented as it isn't populated with any system fonts. Once
> +     * implemented, the block below can be removed.
> +     * */
> +    if (!*mapped_length) {
> +        IDWriteFontFamily *family;
> +        IDWriteFont *font;
> +        UINT32 i, count = IDWriteFontCollection_GetFontFamilyCount((IDWriteFontCollection *)fallback->systemcollection);
> +        for (i = 0; i < count; i++) {
> +            hr = IDWriteFontCollection_GetFontFamily((IDWriteFontCollection *)fallback->systemcollection, i, &family);
> +            if (FAILED(hr)) {
> +                ERR("Failed to get font family.\n");
> +                continue;
>               }
> +
> +            hr = IDWriteFontFamily_GetFirstMatchingFont(family, weight, stretch, style, &font);
> +            IDWriteFontFamily_Release(family);
> +            if (FAILED(hr)) {
> +                continue;
> +            }
> +
> +            hr = fallback_map_characters(font, text, length, mapped_length);
> +            if (SUCCEEDED(hr) && mapped_length > 0) {
> +                *ret_font = font;
> +                break;
> +            }
> +
> +            IDWriteFont_Release(font);
>           }

This block will pick arbitrary font, depending on fonts user has 
installed, and can change if user installs more or removes some.
That doesn't sound like a good idea to me, and your comment already 
hints at that.



More information about the wine-devel mailing list