diff options
Diffstat (limited to 'dw')
-rw-r--r-- | dw/fltkplatform.cc | 16 | ||||
-rw-r--r-- | dw/fltkviewbase.cc | 20 |
2 files changed, 24 insertions, 12 deletions
diff --git a/dw/fltkplatform.cc b/dw/fltkplatform.cc index cc093d37..5c69a4ec 100644 --- a/dw/fltkplatform.cc +++ b/dw/fltkplatform.cc @@ -525,14 +525,18 @@ int FltkPlatform::textWidth (core::style::Font *font, const char *text, if ((cu = fl_toupper(c)) == c) { /* already uppercase, just draw the character */ fl_font(ff->font, ff->size); - width += font->letterSpacing; - width += (int)fl_width(text + curr, next - curr); + if (fl_nonspacing(cu) == 0) { + width += font->letterSpacing; + width += (int)fl_width(text + curr, next - curr); + } } else { /* make utf8 string for converted char */ nb = fl_utf8encode(cu, chbuf); fl_font(ff->font, sc_fontsize); - width += font->letterSpacing; - width += (int)fl_width(chbuf, nb); + if (fl_nonspacing(cu) == 0) { + width += font->letterSpacing; + width += (int)fl_width(chbuf, nb); + } } } } else { @@ -544,7 +548,9 @@ int FltkPlatform::textWidth (core::style::Font *font, const char *text, while (next < len) { next = nextGlyph(text, curr); - width += font->letterSpacing; + c = fl_utf8decode(text + curr, text + next, &nb); + if (fl_nonspacing(c) == 0) + width += font->letterSpacing; curr = next; } } diff --git a/dw/fltkviewbase.cc b/dw/fltkviewbase.cc index bf3aba22..d2a61ae5 100644 --- a/dw/fltkviewbase.cc +++ b/dw/fltkviewbase.cc @@ -548,7 +548,7 @@ void FltkWidgetView::drawText (core::style::Font *font, viewY = translateCanvasYToViewY (Y); int curr = 0, next = 0, nb; char chbuf[4]; - int c, cu; + int c, cu, width; if (font->fontVariant == core::style::FONT_VARIANT_SMALL_CAPS) { int sc_fontsize = lout::misc::roundInt(ff->size * 0.78); @@ -558,24 +558,30 @@ void FltkWidgetView::drawText (core::style::Font *font, if ((cu = fl_toupper(c)) == c) { /* already uppercase, just draw the character */ fl_font(ff->font, ff->size); + width = (int)fl_width(text + curr, next - curr); + if (curr && width) + viewX += font->letterSpacing; fl_draw(text + curr, next - curr, viewX, viewY); - viewX += font->letterSpacing; - viewX += (int)fl_width(text + curr, next - curr); + viewX += width; } else { /* make utf8 string for converted char */ nb = fl_utf8encode(cu, chbuf); fl_font(ff->font, sc_fontsize); + width = (int)fl_width(text + curr, next - curr); + if (curr && width) + viewX += font->letterSpacing; fl_draw(chbuf, nb, viewX, viewY); - viewX += font->letterSpacing; - viewX += (int)fl_width(chbuf, nb); + viewX += width; } } } else { while (next < len) { next = theLayout->nextGlyph(text, curr); + width = (int)fl_width(text + curr, next - curr); + if (curr && width) + viewX += font->letterSpacing; fl_draw(text + curr, next - curr, viewX, viewY); - viewX += font->letterSpacing + - (int)fl_width(text + curr,next - curr); + viewX += width; curr = next; } } |