#ifdef XFT
BFont::BFont(Display *d, BScreen *screen, const string &family, int size,
bool bold, bool italic, bool shadow, unsigned char offset,
- unsigned char tint, bool antialias) :
+ int tint, bool antialias) :
_display(d),
_screen(screen),
_family(family),
_screen->getColormap());
assert(draw);
+
if (_shadow) {
XftColor c;
- c.color.red = 0;
- c.color.green = 0;
- c.color.blue = 0;
- c.color.alpha = _tint | _tint << 8; // transparent shadow
- c.pixel = BlackPixel(_display, _screen->getScreenNumber());
-
+ 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
bool _antialias;
bool _shadow;
unsigned char _offset;
- unsigned char _tint;
+ int _tint;
XftFont *_xftfont;
// loads an Xft font
BFont(Display *d, BScreen *screen, const std::string &family, int size,
bool bold, bool italic, bool shadow, unsigned char offset,
- unsigned char tint, bool antialias = True);
+ int tint, bool antialias = True);
#endif
// loads a standard X font
BFont(Display *d, BScreen *screen, const std::string &xlfd);
offset = 1;
}
- unsigned char tint = 0x40;
+ int tint = 25;
if (style.getValue(rbasename + "xft.shadow.tint", s)) {
tint = atoi(s.c_str());
}
+ if (tint > 100) tint = 100;
+ if (tint < -100) tint = -100;
BFont *b = new BFont(blackbox->getXDisplay(), this, family, i, bold,
italic, dropShadow && resource.shadow_fonts, offset,