Mercurial > vim
diff src/gui_x11.c @ 717:2fa8cb05b861 v7.0218
updated for version 7.0218
author | vimboss |
---|---|
date | Wed, 08 Mar 2006 21:32:40 +0000 |
parents | 862863033fdd |
children | f40f1a8520ff |
line wrap: on
line diff
--- a/src/gui_x11.c +++ b/src/gui_x11.c @@ -111,7 +111,16 @@ static XFontSet current_fontset = NULL; if (current_fontset != NULL) \ XwcDrawString(dpy, win, current_fontset, gc, x, y, (wchar_t *)str, n); \ else \ - XDrawString16(dpy, win, gc, x, y, str, n); \ + XDrawString16(dpy, win, gc, x, y, (XChar2b *)str, n); \ + } while (0) + +#define XDrawImageString16(dpy, win, gc, x, y, str, n) \ + do \ + { \ + if (current_fontset != NULL) \ + XwcDrawImageString(dpy, win, current_fontset, gc, x, y, (wchar_t *)str, n); \ + else \ + XDrawImageString16(dpy, win, gc, x, y, (XChar2b *)str, n); \ } while (0) static int check_fontset_sanity __ARGS((XFontSet fs)); @@ -2503,7 +2512,7 @@ gui_mch_draw_string(row, col, s, len, fl { int cells = len; #ifdef FEAT_MBYTE - static XChar2b *buf = NULL; + static void *buf = NULL; static int buflen = 0; char_u *p; int wlen = 0; @@ -2517,7 +2526,8 @@ gui_mch_draw_string(row, col, s, len, fl if (buflen < len) { XtFree((char *)buf); - buf = (XChar2b *)XtMalloc(len * sizeof(XChar2b)); + buf = (void *)XtMalloc(len * (sizeof(XChar2b) < sizeof(wchar_t) + ? sizeof(wchar_t) : sizeof(XChar2b))); buflen = len; } p = s; @@ -2525,10 +2535,21 @@ gui_mch_draw_string(row, col, s, len, fl while (p < s + len) { c = utf_ptr2char(p); - if (c >= 0x10000) /* show chars > 0xffff as ? */ - c = 0xbf; - buf[wlen].byte1 = (unsigned)c >> 8; - buf[wlen].byte2 = c; +# ifdef FEAT_XFONTSET + if (current_fontset != NULL) + { + if (c >= 0x10000 && sizeof(wchar_t) <= 2) + c = 0xbf; /* show chars > 0xffff as ? */ + ((wchar_t *)buf)[wlen] = c; + } + else +# endif + { + if (c >= 0x10000) + c = 0xbf; /* show chars > 0xffff as ? */ + ((XChar2b *)buf)[wlen].byte1 = (unsigned)c >> 8; + ((XChar2b *)buf)[wlen].byte2 = c; + } ++wlen; cells += utf_char2cells(c); p += utf_ptr2len(p);