From cc962e7e3c9eae5470ff096f3b261efb50ae94ec Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 8 Jun 2005 15:59:17 +0000 Subject: [PATCH] fixed font substitution svn: r76 --- src/wxwindow/src/msw/wx_dc.cxx | 39 ++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/src/wxwindow/src/msw/wx_dc.cxx b/src/wxwindow/src/msw/wx_dc.cxx index 53ce48fcd3..52413ab584 100644 --- a/src/wxwindow/src/msw/wx_dc.cxx +++ b/src/wxwindow/src/msw/wx_dc.cxx @@ -1659,17 +1659,42 @@ static int substitute_font(wchar_t *ustring, int d, int alen, wxFont *font, HDC sub = font->Substitute(v, dc, screen_font); if (sub) { HFONT cfont; - font = sub; - cfont = font->BuildInternalFont(dc, screen_font, angle); + int max_alen; + + /* Continue using this substituion as long as + glyphs are in this font and not in the original font. */ + max_alen = alen; + for (i = 1; i < alen; i++) { + v = ustring[d+i]; + if (font->GlyphAvailableNow(v, dc, screen_font)) { + max_alen = i; + break; + } + } + + cfont = sub->BuildInternalFont(dc, screen_font, angle); if (cfont) { + font = sub; ::SelectObject(dc, cfont); + *reset = 1; + + for (i = 1; i < max_alen; i++) { + v = ustring[d+i]; + if (!font->GlyphAvailableNow(v, dc, screen_font)) { + max_alen = i; + break; + } + } + return max_alen; } } - } - for (i = 1; i < alen; i++) { - v = ustring[d+i]; - if (!font->GlyphAvailableNow(v, dc, screen_font)) { - return i; + + /* Continue for as long as glyphs are in this font */ + for (i = 1; i < alen; i++) { + v = ustring[d+i]; + if (!font->GlyphAvailableNow(v, dc, screen_font)) { + return i; + } } }