]> Dogcows Code - chaz/openbox/blobdiff - util/bsetroot.cc
authors updates
[chaz/openbox] / util / bsetroot.cc
index cd047c2a63cc146d74cd2aba24e98ac005eb92e5..98a5bfd4e95b9c855afb4f93dad5dbde5bb1a12e 100644 (file)
@@ -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));
@@ -340,7 +369,7 @@ void bsetroot::usage(int exit_code) {
 int main(int argc, char **argv) {
   char *display_name = (char *) 0;
 
-  i18n.openCatalog("blackbox.cat");
+  i18n.openCatalog("openbox.cat");
 
   for (int i = 1; i < argc; i++) {
     if (! strcmp(argv[i], "-display")) {
This page took 0.02126 seconds and 4 git commands to generate.