From db250526bbeac519665605127c18aad3ce2853ed Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 17 Jun 2013 22:43:25 +0200 Subject: updated for version 7.3.1220 Problem: MS-Windows: When using wide font italic and bold are not included. Solution: Support wide-bold, wide-italic and wide-bold-italic. (Ken Takata, Taro Muraoka) --- src/gui.c | 37 +++++++++++++++++++++++++++++++++++-- src/gui.h | 7 ++++++- src/gui_w48.c | 34 ++++++++++++++++++++++++++++++++++ src/version.c | 2 ++ 4 files changed, 77 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/gui.c b/src/gui.c index b9b73a3fd0..6b7806c6f6 100644 --- a/src/gui.c +++ b/src/gui.c @@ -410,6 +410,14 @@ gui_init_check() gui.fontset = NOFONTSET; # endif #endif +#ifdef FEAT_MBYTE + gui.wide_font = NOFONT; +# ifndef FEAT_GUI_GTK + gui.wide_bold_font = NOFONT; + gui.wide_ital_font = NOFONT; + gui.wide_boldital_font = NOFONT; +# endif +#endif #ifdef FEAT_MENU # ifndef FEAT_GUI_GTK @@ -1012,6 +1020,11 @@ gui_get_wide_font() gui.wide_font = font; # ifdef FEAT_GUI_MSWIN gui_mch_wide_font_changed(); +# else + /* + * TODO: setup wide_bold_font, wide_ital_font and wide_boldital_font to + * support those fonts for 'guifontwide'. + */ # endif return OK; } @@ -2180,6 +2193,9 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back) guicolor_T sp_color; #if !defined(MSWIN16_FASTTEXT) && !defined(FEAT_GUI_GTK) GuiFont font = NOFONT; +# ifdef FEAT_MBYTE + GuiFont wide_font = NOFONT; +# endif # ifdef FEAT_XFONTSET GuiFontset fontset = NOFONTSET; # endif @@ -2269,6 +2285,23 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back) } else font = gui.norm_font; + +# ifdef FEAT_MBYTE + /* + * Choose correct wide_font by font. wide_font should be set with font + * at same time in above block. But it will make many "ifdef" nasty + * blocks. So we do it here. + */ + if (font == gui.boldital_font && gui.wide_boldital_font) + wide_font = gui.wide_boldital_font; + else if (font == gui.bold_font && gui.wide_bold_font) + wide_font = gui.wide_bold_font; + else if (font == gui.ital_font && gui.wide_ital_font) + wide_font = gui.wide_ital_font; + else if (font == gui.norm_font && gui.wide_font) + wide_font = gui.wide_font; +# endif + } # ifdef FEAT_XFONTSET if (fontset != NOFONTSET) @@ -2407,7 +2440,7 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back) # ifdef FEAT_XFONTSET && fontset == NOFONTSET # endif - && gui.wide_font != NOFONT) + && wide_font != NOFONT) curr_wide = TRUE; else curr_wide = FALSE; @@ -2441,7 +2474,7 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back) if (thislen > 0) { if (prev_wide) - gui_mch_set_font(gui.wide_font); + gui_mch_set_font(wide_font); gui_mch_draw_string(gui.row, scol, s + start, thislen, draw_flags); if (prev_wide) diff --git a/src/gui.h b/src/gui.h index aea450a196..89476c934e 100644 --- a/src/gui.h +++ b/src/gui.h @@ -311,7 +311,12 @@ typedef struct Gui # endif #endif #ifdef FEAT_MBYTE - GuiFont wide_font; /* 'guifontwide' font */ + GuiFont wide_font; /* Normal 'guifontwide' font */ +# ifndef FEAT_GUI_GTK + GuiFont wide_bold_font; /* Bold 'guifontwide' font */ + GuiFont wide_ital_font; /* Italic 'guifontwide' font */ + GuiFont wide_boldital_font; /* Bold-Italic 'guifontwide' font */ +# endif #endif #ifdef FEAT_XFONTSET GuiFontset fontset; /* set of fonts for multi-byte chars */ diff --git a/src/gui_w48.c b/src/gui_w48.c index cfa09659d7..07174ccd18 100644 --- a/src/gui_w48.c +++ b/src/gui_w48.c @@ -3123,9 +3123,43 @@ update_im_font() void gui_mch_wide_font_changed() { +# ifndef MSWIN16_FASTTEXT + LOGFONT lf; +# endif + # ifdef FEAT_MBYTE_IME update_im_font(); # endif + +# ifndef MSWIN16_FASTTEXT + gui_mch_free_font(gui.wide_ital_font); + gui.wide_ital_font = NOFONT; + gui_mch_free_font(gui.wide_bold_font); + gui.wide_bold_font = NOFONT; + gui_mch_free_font(gui.wide_boldital_font); + gui.wide_boldital_font = NOFONT; + + if (gui.wide_font + && GetObject((HFONT)gui.wide_font, sizeof(lf), &lf)) + { + if (!lf.lfItalic) + { + lf.lfItalic = TRUE; + gui.wide_ital_font = get_font_handle(&lf); + lf.lfItalic = FALSE; + } + if (lf.lfWeight < FW_BOLD) + { + lf.lfWeight = FW_BOLD; + gui.wide_bold_font = get_font_handle(&lf); + if (!lf.lfItalic) + { + lf.lfItalic = TRUE; + gui.wide_boldital_font = get_font_handle(&lf); + } + } + } +# endif } #endif diff --git a/src/version.c b/src/version.c index 883962daae..3ff82039bf 100644 --- a/src/version.c +++ b/src/version.c @@ -728,6 +728,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1220, /**/ 1219, /**/ -- cgit v1.2.3