Allow variable tinting of the shadow. Use *.xft.tint: integer
authorScott Moynes <smoynes@nexus.carleton.ca>
Wed, 23 Oct 2002 02:46:47 +0000 (02:46 +0000)
committerScott Moynes <smoynes@nexus.carleton.ca>
Wed, 23 Oct 2002 02:46:47 +0000 (02:46 +0000)
integer is a number -100 to 100 that specifies the alpha channel, with
negative numbers meaning lighten the background and positive being
darken.

src/Font.cc
src/Font.hh
src/Screen.cc

index ea70933..4699350 100644 (file)
@@ -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
index 8f3856b..6f6431e 100644 (file)
@@ -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);
index 70494ca..165a4a9 100644 (file)
@@ -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,