diff options
Diffstat (limited to 'dw/fltkviewbase.cc')
-rw-r--r-- | dw/fltkviewbase.cc | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/dw/fltkviewbase.cc b/dw/fltkviewbase.cc index 7d519f05..e39de0c6 100644 --- a/dw/fltkviewbase.cc +++ b/dw/fltkviewbase.cc @@ -483,7 +483,7 @@ void FltkWidgetView::drawText (core::style::Font *font, setfont(ff->font, ff->size); setcolor(((FltkColor*)color)->colors[shading]); - if (!font->letterSpacing) { + if (!font->letterSpacing && !font->fontVariant) { drawtext(text, len, translateCanvasXToViewX (x), translateCanvasYToViewY (y)); } else { @@ -491,12 +491,38 @@ void FltkWidgetView::drawText (core::style::Font *font, int viewX = translateCanvasXToViewX (x), viewY = translateCanvasYToViewY (y); int curr = 0, next = 0; - - while (next < len) { - next = theLayout->nextGlyph(text, curr); - drawtext(text + curr, next - curr, viewX, viewY); - viewX += font->letterSpacing + (int)getwidth(text + curr,next - curr); - curr = next; + char *text2 = NULL; + + if (font->fontVariant == 1) { + int sc_fontsize, sc_letterSpacing; + sc_fontsize = lout::misc::roundInt(ff->size * 0.78); + sc_letterSpacing = lout::misc::roundInt(font->letterSpacing * 0.78); + text2 = strdup(text); + while(next < len) { + next = theLayout->nextGlyph(text, curr); + if (isupper(text[curr])) { + setfont(ff->font, ff->size); + drawtext(text + curr, next - curr, viewX, viewY); + viewX += font->letterSpacing; + viewX += (int)getwidth(text + curr, next - curr); + } else { + text2[curr] = toupper(text2[curr]); + setfont(ff->font, sc_fontsize); + drawtext(text2 + curr, next - curr, viewX, viewY); + viewX += sc_letterSpacing; + viewX += (int)getwidth(text2 + curr, next - curr); + } + curr = next; + } + free(text2); + } else { + while (next < len) { + next = theLayout->nextGlyph(text, curr); + drawtext(text + curr, next - curr, viewX, viewY); + viewX += font->letterSpacing + + (int)getwidth(text + curr,next - curr); + curr = next; + } } } } |