]> Dogcows Code - chaz/openbox/blobdiff - util/bsetroot.cc
sync with the 2.0 branch
[chaz/openbox] / util / bsetroot.cc
index 47939aec0a1dfecb9c705b011474f7d4190939bd..460dc350ac9891803a31452cee22b7526309ac89 100644 (file)
@@ -1,4 +1,4 @@
-// -*- mode++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
+// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
 // bsetroot.cc for Blackbox - an X11 Window manager
 // Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh at debian.org>
 // Copyright (c) 1997 - 2000, 2002 Brad Hughes <bhughes at trolltech.com>
@@ -37,6 +37,10 @@ extern "C" {
 #ifdef    HAVE_STDIO_H
 #  include <stdio.h>
 #endif // HAVE_STDIO_H
+
+#ifdef    HAVE_CTYPE_H
+# include <ctype.h>
+#endif // HAVE_CTYPE_H
 }
 
 #include "../src/i18n.hh"
@@ -49,9 +53,7 @@ extern "C" {
 I18n i18n;
 
 bsetroot::bsetroot(int argc, char **argv, char *dpy_name)
-  : BaseDisplay(argv[0], dpy_name)
-{
-  grad = fore = back = (char *) 0;
+  : BaseDisplay(argv[0], dpy_name) {
 
   bool mod = False, sol = False, grd = False;
   int mod_x = 0, mod_y = 0;
@@ -97,8 +99,9 @@ bsetroot::bsetroot(int argc, char **argv, char *dpy_name)
     } else if (! strcmp("-display", argv[i])) {
       // -display passed through tests ealier... we just skip it now
       i++;
-    } else
+    } else {
       usage();
+    }
   }
 
   if ((mod + sol + grd) != True) {
@@ -114,9 +117,12 @@ bsetroot::bsetroot(int argc, char **argv, char *dpy_name)
   for (unsigned int s = 0; s < getNumberOfScreens(); ++s)
     img_ctrl[s] = new BImageControl(this, getScreenInfo(s), True);
 
-  if (sol && fore) solid();
-  else if (mod && mod_x && mod_y && fore && back) modula(mod_x, mod_y);
-  else if (grd && grad && fore && back) gradient();
+  if (sol && ! fore.empty())
+    solid();
+  else if (mod && mod_x && mod_y && ! (fore.empty() || back.empty()))
+    modula(mod_x, mod_y);
+  else if (grd && ! (grad.empty() || fore.empty() || back.empty()))
+    gradient();
   else usage();
 }
 
@@ -288,8 +294,31 @@ void bsetroot::modula(int x, int y) {
 
 
 void bsetroot::gradient(void) {
+  /*
+    we have to be sure that neither raised nor sunken is specified otherwise
+    odd looking borders appear.  So we convert to lowercase then look for
+    'raised' or 'sunken' in the description and erase them.  To be paranoid
+    the search is done in a loop.
+  */
+  std::string descr;
+  descr.reserve(grad.size());
+
+  std::string::const_iterator it = grad.begin(), end = grad.end();
+  for (; it != end; ++it)
+    descr += tolower(*it);
+
+  std::string::size_type pos;
+  while ((pos = descr.find("raised")) != std::string::npos)
+    descr.erase(pos, 6); // 6 is strlen raised
+
+  while ((pos = descr.find("sunken")) != std::string::npos)
+    descr.erase(pos, 6);
+
+  // now add on 'flat' to prevent the bevels from being added
+  descr += "flat";
+
   for (unsigned int screen = 0; screen < getNumberOfScreens(); screen++) {
-    BTexture texture(grad, this, screen, img_ctrl[screen]);
+    BTexture texture(descr, this, screen, img_ctrl[screen]);
     const ScreenInfo *screen_info = getScreenInfo(screen);
 
     texture.setColor(BColor(fore, this, screen));
@@ -323,7 +352,7 @@ void bsetroot::usage(int exit_code) {
                 "%s 2.0\n\n"
                 "Copyright (c) 1997-2000, 2002 Bradley T Hughes\n"
                 "Copyright (c) 2001-2002 Sean 'Shaleh' Perry\n\n"
-                "  -display <string>        display connection\n"
+                "  -display <string>        use display connection\n"
                 "  -mod <x> <y>             modula pattern\n"
                 "  -foreground, -fg <color> modula foreground color\n"
                 "  -background, -bg <color> modula background color\n\n"
This page took 0.024489 seconds and 4 git commands to generate.