Module: wine Branch: master Commit: 5a5a6bdd92aa83b73fd54db8dddaf8329a9df813 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5a5a6bdd92aa83b73fd54db8dd...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon Oct 27 14:53:59 2014 +0300
dwrite: Allow for a weight difference in GetFirstMatchingFont().
---
dlls/dwrite/font.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index b271e93..5112d24 100644 --- a/dlls/dwrite/font.c +++ b/dlls/dwrite/font.c @@ -1233,17 +1233,21 @@ static HRESULT WINAPI dwritefontfamily_GetFirstMatchingFont(IDWriteFontFamily *i } else { - int i; - for (i = 0; i < This->data->font_count; i++) - { - if (style == This->data->fonts[i]->style && - weight == This->data->fonts[i]->weight && - stretch == This->data->fonts[i]->stretch) - { - return create_font_from_data(This->data->fonts[i], iface, font); + UINT32 min_weight_diff = ~0u; + int found = -1, i; + + for (i = 0; i < This->data->font_count; i++) { + if (style == This->data->fonts[i]->style && stretch == This->data->fonts[i]->stretch) { + DWRITE_FONT_WEIGHT font_weight = This->data->fonts[i]->weight; + UINT32 weight_diff = abs(font_weight - weight); + if (weight_diff < min_weight_diff) { + min_weight_diff = weight_diff; + found = i; + } } } - return DWRITE_E_NOFONT; + + return found != -1 ? create_font_from_data(This->data->fonts[found], iface, font) : DWRITE_E_NOFONT; } }