diff options
-rw-r--r-- | dw/fltkplatform.cc | 7 | ||||
-rw-r--r-- | dw/fltkviewbase.cc | 14 | ||||
-rw-r--r-- | src/dillo.cc | 3 |
3 files changed, 8 insertions, 16 deletions
diff --git a/dw/fltkplatform.cc b/dw/fltkplatform.cc index 85b22507..d491cfee 100644 --- a/dw/fltkplatform.cc +++ b/dw/fltkplatform.cc @@ -355,18 +355,15 @@ int FltkPlatform::textWidth (core::style::Font *font, const char *text, { char chbuf[MB_CUR_MAX]; wchar_t wc, wcu; - mbstate_t st1, st2; int width = 0; FltkFont *ff = (FltkFont*) font; int curr = 0, next = 0, nb; if (font->fontVariant == 1) { int sc_fontsize = lout::misc::roundInt(ff->size * 0.78); - memset (&st1, '\0', sizeof (mbstate_t)); - memset (&st2, '\0', sizeof (mbstate_t)); for (curr = 0; next < len; curr = next) { next = nextGlyph(text, curr); - nb = (int)mbrtowc(&wc, text + curr, next - curr, &st1); + wc = utf8decode(text + curr, text + next, &nb); if ((wcu = towupper(wc)) == wc) { /* already uppercase, just draw the character */ setfont(ff->font, ff->size); @@ -374,7 +371,7 @@ int FltkPlatform::textWidth (core::style::Font *font, const char *text, width += (int)getwidth(text + curr, next - curr); } else { /* make utf8 string for converted char */ - nb = wcrtomb(chbuf, wcu, &st2); + nb = utf8encode(wcu, chbuf); setfont(ff->font, sc_fontsize); width += font->letterSpacing; width += (int)getwidth(chbuf, nb); diff --git a/dw/fltkviewbase.cc b/dw/fltkviewbase.cc index 123af5b3..efc5c952 100644 --- a/dw/fltkviewbase.cc +++ b/dw/fltkviewbase.cc @@ -27,6 +27,7 @@ #include <fltk/events.h> #include <fltk/Cursor.h> #include <fltk/run.h> +#include <fltk/utf.h> #include <stdio.h> #include <wchar.h> @@ -492,18 +493,15 @@ void FltkWidgetView::drawText (core::style::Font *font, /* Nonzero letter spacing adjustment, draw each glyph individually */ int viewX = translateCanvasXToViewX (x), viewY = translateCanvasYToViewY (y); - int curr = 0, next = 0, cb; + int curr = 0, next = 0, nb; char chbuf[MB_CUR_MAX]; wchar_t wc, wcu; - mbstate_t st1, st2; if (font->fontVariant == 1) { int sc_fontsize = lout::misc::roundInt(ff->size * 0.78); - memset (&st1, '\0', sizeof (mbstate_t)); - memset (&st2, '\0', sizeof (mbstate_t)); for (curr = 0; next < len; curr = next) { next = theLayout->nextGlyph(text, curr); - cb = (int)mbrtowc(&wc, text + curr, next - curr, &st1); + wc = utf8decode(text + curr, text + next, &nb); if ((wcu = towupper(wc)) == wc) { /* already uppercase, just draw the character */ setfont(ff->font, ff->size); @@ -512,11 +510,11 @@ void FltkWidgetView::drawText (core::style::Font *font, viewX += (int)getwidth(text + curr, next - curr); } else { /* make utf8 string for converted char */ - int n = wcrtomb(chbuf, wcu, &st2); + nb = utf8encode(wcu, chbuf); setfont(ff->font, sc_fontsize); - drawtext(chbuf, n, viewX, viewY); + drawtext(chbuf, nb, viewX, viewY); viewX += font->letterSpacing; - viewX += (int)getwidth(chbuf, n); + viewX += (int)getwidth(chbuf, nb); } } } else { diff --git a/src/dillo.cc b/src/dillo.cc index d80798ed..3159674e 100644 --- a/src/dillo.cc +++ b/src/dillo.cc @@ -369,9 +369,6 @@ int main(int argc, char **argv) } } - /* We use utf-8 internally, force character conversions follow suit */ - setlocale (LC_CTYPE, "en_US.utf8"); - fltk::run(); /* |