summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dw/fltkplatform.cc7
-rw-r--r--dw/fltkviewbase.cc14
-rw-r--r--src/dillo.cc3
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();
/*