summaryrefslogtreecommitdiff
path: root/dw/fltkviewbase.cc
diff options
context:
space:
mode:
authorJorge Arellano Cid <jcid@dillo.org>2010-10-07 13:02:49 -0400
committerJorge Arellano Cid <jcid@dillo.org>2010-10-07 13:02:49 -0400
commit5f9b0fc0767a50bc5e658aa589aa71ad1f925882 (patch)
tree4c57a8a7064a841d37e526672e3d6d443f61d431 /dw/fltkviewbase.cc
parent53997164c2e61962543a84eb14968b980e8d27a6 (diff)
CSS part for font-variant: small-caps support
(some uppercasing is done but not utf8)
Diffstat (limited to 'dw/fltkviewbase.cc')
-rw-r--r--dw/fltkviewbase.cc40
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;
+ }
}
}
}