#ifdef XFT
BFont::BFont(Display *d, BScreen *screen, const string &family, int size,
- bool bold, bool italic, bool antialias) :
+ bool bold, bool italic, bool shadow, unsigned char offset,
+ int tint, bool antialias) :
_display(d),
_screen(screen),
_family(family),
_bold(bold),
_italic(italic),
_antialias(antialias),
+ _shadow(shadow),
+ _offset(offset),
+ _tint(tint),
_xftfont(0),
_font(0),
_fontset(0),
_screen(screen),
#ifdef XFT
_antialias(False),
+ _shadow(False),
_xftfont(0),
#endif // XFT
_font(0),
_screen->getColormap());
assert(draw);
+
+ if (_shadow) {
+ XftColor c;
+ if (_tint >= 0) {
+ c.color.red = 0;
+ c.color.green = 0;
+ c.color.blue = 0;
+ c.color.alpha = 0xffff * _tint/100; // transparent shadow
+ c.pixel = BlackPixel(_display, _screen->getScreenNumber());
+ } else {
+ c.color.red = 0xffff * -_tint/100;
+ c.color.green = 0xffff * -_tint/100;
+ c.color.blue = 0xffff * -_tint/100;
+ c.color.alpha = 0xffff * -_tint/100;
+ c.pixel = WhitePixel(_display, _screen->getScreenNumber());
+ }
+#ifdef XFT_UTF8
+ XftDrawStringUtf8(
+#else
+ XftDrawString8(
+#endif
+ draw, &c, _xftfont, x + _offset,
+ _xftfont->ascent + y + _offset, (XftChar8 *) string.c_str(),
+ string.size());
+ }
+
XftColor c;
c.color.red = color.red() | color.red() << 8;
c.color.green = color.green() | color.green() << 8;
c.color.blue = color.blue() | color.blue() << 8;
- c.color.alpha = 0xff | 0xff << 8; // no transparency in BColor yet
c.pixel = color.pixel();
-
- XftDrawStringUtf8(draw, &c, _xftfont, x, _xftfont->ascent + y,
- (XftChar8 *) string.c_str(), string.size());
+ c.color.alpha = 0xff | 0xff << 8; // no transparency in BColor yet
+
+#ifdef XFT_UTF8
+ XftDrawStringUtf8(
+#else
+ XftDrawString8(
+#endif
+ draw, &c, _xftfont, x, _xftfont->ascent + y,
+ (XftChar8 *) string.c_str(), string.size());
XftDrawDestroy(draw);
return;
}
#endif // XFT
- BGCCache *_cache = color.display()->gcCache();
- BGCCacheItem *_item = _cache->find(color, _font, GXcopy, ClipByChildren);
-
- assert(_cache);
- assert(_item);
+ BPen pen(color, _font);
if (i18n.multibyte())
- XmbDrawString(_display, d, _fontset, _item->gc(),
+ XmbDrawString(_display, d, _fontset, pen.gc(),
x, y - _fontset_extents->max_ink_extent.y,
string.c_str(), string.size());
else
- XDrawString(_display, d, _item->gc(),
+ XDrawString(_display, d, pen.gc(),
x, _font->ascent + y,
string.c_str(), string.size());
-
- _cache->release(_item);
}
#ifdef XFT
if (_xftfont) {
XGlyphInfo info;
- XftTextExtentsUtf8(_display, _xftfont, (XftChar8 *) string.c_str(),
- string.size(), &info);
- return info.xOff;
+
+#ifdef XFT_UTF8
+ XftTextExtentsUtf8(
+#else
+ XftTextExtents8(
+#endif
+ _display, _xftfont, (XftChar8 *) string.c_str(),
+ string.size(), &info);
+
+ return info.xOff + (_shadow ? _offset : 0);
}
#endif // XFT
#ifdef XFT
if (_xftfont)
- return _xftfont->height;
+ return _xftfont->height + (_shadow ? _offset : 0);
#endif // XFT
if (i18n.multibyte())