customisable colorscheme via -background and -foreground
authorChristine Spang <spang@mit.edu>
Wed, 16 Dec 2009 00:50:36 +0000 (19:50 -0500)
committerJoachim Breitner <mail@joachim-breitner.de>
Thu, 17 Dec 2009 18:49:26 +0000 (19:49 +0100)
This commit also changes the default colorscheme from black
text on a white background to white text on a black background,
which is more canonical for a screensaver and potentially better
at avoiding screen burn-in.

The old behaviour can be gotten back by changing the screen hack
command to: unicode -root -background white -foreground black
in the xscreensaver or gnome-screensaver configuration.

unicode.1.in
unicode.c

index d72e9cc..860b691 100644 (file)
@@ -8,6 +8,8 @@ unicode - displays unicode characters
 [\-window]
 [\-root]
 [\-fps]
+[\-foreground \fIcolor\fP]
+[\-background \fIcolor\fP]
 .SH DESCRIPTION
 unicode-screensaver is a simple screensaver application that repeatedly
 randomly picks an unicode character and displays it in a very large font
@@ -26,6 +28,13 @@ Draw on the root window.
 .TP 8
 .B \-fps
 Display the current frame rate and CPU load.
+.TP 8
+.B \-background
+Set the background color (e.g. black, white, green, red). The default is
+black.
+.TP 8
+.B \-foreground
+Set the font color (e.g. black, white, green, red). The default is white.
 .SH ENVIRONMENT
 .PP
 .TP 8
index 2623392..288ea25 100644 (file)
--- a/unicode.c
+++ b/unicode.c
@@ -27,6 +27,7 @@ struct unicode_state {
        FcChar32        font_count[NUM_FONTS];
        XftDraw*        draw;
        XftColor        font_color;
+       XColor          bg_color;
 };
 
 static void *
@@ -63,7 +64,22 @@ unicode_init (Display *dpy, Window window)
        }
 
        state->draw = XftDrawCreate(dpy, window, xgwa.visual, cmap); 
-       XftColorAllocName(dpy, xgwa.visual ,cmap,"black",&state->font_color);
+       state->bg_color.pixel = get_pixel_resource(dpy, cmap, "background", "Background");
+       XQueryColor(dpy, cmap, &state->bg_color);
+
+       XColor color;
+       color.pixel = get_pixel_resource(dpy, cmap, "foreground", "Foreground");
+       XQueryColor(dpy, cmap, &color);
+
+       XRenderColor font_color;
+       font_color.red = color.red;
+       font_color.green = color.green;
+       font_color.blue = color.blue;
+       font_color.alpha = 0xFFFF;
+
+       XftColorAllocValue(dpy, xgwa.visual, cmap, &font_color, &state->font_color);
+       XSetWindowBackground(dpy, window, state->bg_color.pixel);
+       XClearWindow (dpy, window);
 
        return state;
 }
@@ -176,7 +192,8 @@ unicode_free (Display *dpy, Window window, void *state) {
 char *progclass = "Unicode";
 
 static char *unicode_defaults [] = {
-  ".background: white",
+  ".background: black",
+  ".foreground: white",
   "*delay:     7",
   0
 };