Allow variable tinting of the shadow. Use *.xft.tint: integer
integer is a number -100 to 100 that specifies the alpha channel, with negative numbers meaning lighten the background and positive being darken.
This commit is contained in:
parent
dc4957eed8
commit
1e36acfd91
3 changed files with 20 additions and 10 deletions
22
src/Font.cc
22
src/Font.cc
|
@ -49,7 +49,7 @@ string BFont::_fallback_font = "fixed";
|
|||
#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),
|
||||
|
@ -265,14 +265,22 @@ void BFont::drawString(Drawable d, int x, int y, const BColor &color,
|
|||
_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
|
||||
|
|
|
@ -73,7 +73,7 @@ private:
|
|||
bool _antialias;
|
||||
bool _shadow;
|
||||
unsigned char _offset;
|
||||
unsigned char _tint;
|
||||
int _tint;
|
||||
|
||||
XftFont *_xftfont;
|
||||
|
||||
|
@ -99,7 +99,7 @@ public:
|
|||
// 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);
|
||||
|
|
|
@ -2750,11 +2750,13 @@ BFont *BScreen::readDatabaseFont(const string &rbasename,
|
|||
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,
|
||||
|
|
Loading…
Reference in a new issue