]> git.draconx.ca Git - rrace.git/commitdiff
Make colour macros more flexible.
authorNick Bowler <nbowler@draconx.ca>
Wed, 30 Nov 2022 01:57:25 +0000 (20:57 -0500)
committerNick Bowler <nbowler@draconx.ca>
Wed, 30 Nov 2022 01:57:25 +0000 (20:57 -0500)
Instead of COLOUR0_PRIMARY et al. expanding directly to X11 colour
names, allow the process to be hooked to generate other forms of
colour definitions.

The ewmhicon test program is adapted to use this to generate its
colourmap.  This also avoids some apparently nonportable C macro
usage, as preprocessing the following code:

  #define A(x) x
  #define B(x) x
  #define C (x)
  A(B C)

expands to x (the desired result) with GCC but B(x) on HP-UX cc.

src/colour.h
t/ewmhicon.c

index 1bad6078c52e7d3e39d36b931a418a3cae4f52b3..5b4aa1b02dd3553030e4b4767169afd3e51c9e11 100644 (file)
 
 enum { COLOUR_PRIMARY, COLOUR_DARK, COLOUR_LIGHT, COLOUR_MAX };
 
-#define COLOUR_X11_(r, g, b) "#"#r#g#b
-#define COLOUR_X11(c) COLOUR_X11_ c
+#ifndef COLOUR_SYSTEM
+#  define COLOUR_SYSTEM X11
+#endif
+
+#define COLOUR_SYS_X11(r, g, b) "#"#r#g#b
+
+#define COLOUR_SYS__(mode, c) COLOUR_SYS_##mode c
+#define COLOUR_SYS_(mode, c) COLOUR_SYS__(mode, c)
+#define COLOUR_SYS(c) COLOUR_SYS_(COLOUR_SYSTEM, c)
 
 /* red */
 #define COLOUR0_PRIMARY_RGB_ (8d, 2e, 28)
 #define COLOUR0_LIGHT_RGB_   (a1, 48, 42)
 #define COLOUR0_DARK_RGB_    (6a, 1b, 17)
 
-#define COLOUR0_PRIMARY COLOUR_X11(COLOUR0_PRIMARY_RGB_)
-#define COLOUR0_LIGHT   COLOUR_X11(COLOUR0_LIGHT_RGB_)
-#define COLOUR0_DARK    COLOUR_X11(COLOUR0_DARK_RGB_)
+#define COLOUR0_PRIMARY COLOUR_SYS(COLOUR0_PRIMARY_RGB_)
+#define COLOUR0_LIGHT   COLOUR_SYS(COLOUR0_LIGHT_RGB_)
+#define COLOUR0_DARK    COLOUR_SYS(COLOUR0_DARK_RGB_)
 
 /* orange */
 #define COLOUR1_PRIMARY_RGB_ (b4, 6e, 28)
 #define COLOUR1_LIGHT_RGB_   (c7, 90, 4f)
 #define COLOUR1_DARK_RGB_    (92, 4a, 16)
 
-#define COLOUR1_PRIMARY COLOUR_X11(COLOUR1_PRIMARY_RGB_)
-#define COLOUR1_LIGHT   COLOUR_X11(COLOUR1_LIGHT_RGB_)
-#define COLOUR1_DARK    COLOUR_X11(COLOUR1_DARK_RGB_)
+#define COLOUR1_PRIMARY COLOUR_SYS(COLOUR1_PRIMARY_RGB_)
+#define COLOUR1_LIGHT   COLOUR_SYS(COLOUR1_LIGHT_RGB_)
+#define COLOUR1_DARK    COLOUR_SYS(COLOUR1_DARK_RGB_)
 
 /* yellow */
 #define COLOUR2_PRIMARY_RGB_ (d8, b7, 40)
 #define COLOUR2_LIGHT_RGB_   (e2, c6, 5d)
 #define COLOUR2_DARK_RGB_    (c5, 9f, 39)
 
-#define COLOUR2_PRIMARY COLOUR_X11(COLOUR2_PRIMARY_RGB_)
-#define COLOUR2_LIGHT   COLOUR_X11(COLOUR2_LIGHT_RGB_)
-#define COLOUR2_DARK    COLOUR_X11(COLOUR2_DARK_RGB_)
+#define COLOUR2_PRIMARY COLOUR_SYS(COLOUR2_PRIMARY_RGB_)
+#define COLOUR2_LIGHT   COLOUR_SYS(COLOUR2_LIGHT_RGB_)
+#define COLOUR2_DARK    COLOUR_SYS(COLOUR2_DARK_RGB_)
 
 /* green */
 #define COLOUR3_PRIMARY_RGB_ (28, 64, 28)
 #define COLOUR3_DARK_RGB_    (19, 47, 19)
 #define COLOUR3_LIGHT_RGB_   (4e, 87, 4e)
 
-#define COLOUR3_PRIMARY COLOUR_X11(COLOUR3_PRIMARY_RGB_)
-#define COLOUR3_LIGHT   COLOUR_X11(COLOUR3_LIGHT_RGB_)
-#define COLOUR3_DARK    COLOUR_X11(COLOUR3_DARK_RGB_)
+#define COLOUR3_PRIMARY COLOUR_SYS(COLOUR3_PRIMARY_RGB_)
+#define COLOUR3_LIGHT   COLOUR_SYS(COLOUR3_LIGHT_RGB_)
+#define COLOUR3_DARK    COLOUR_SYS(COLOUR3_DARK_RGB_)
 
 /* blue */
 #define COLOUR4_PRIMARY_RGB_ (00, 34, 71)
 #define COLOUR4_DARK_RGB_    (00, 1f, 4f)
 #define COLOUR4_LIGHT_RGB_   (00, 52, 8b)
 
-#define COLOUR4_PRIMARY COLOUR_X11(COLOUR4_PRIMARY_RGB_)
-#define COLOUR4_LIGHT   COLOUR_X11(COLOUR4_LIGHT_RGB_)
-#define COLOUR4_DARK    COLOUR_X11(COLOUR4_DARK_RGB_)
+#define COLOUR4_PRIMARY COLOUR_SYS(COLOUR4_PRIMARY_RGB_)
+#define COLOUR4_LIGHT   COLOUR_SYS(COLOUR4_LIGHT_RGB_)
+#define COLOUR4_DARK    COLOUR_SYS(COLOUR4_DARK_RGB_)
 
 /* white */
 #define COLOUR5_PRIMARY_RGB_ (dc, dc, dc)
 #define COLOUR5_LIGHT_RGB_   (ea, ea, ea)
 #define COLOUR5_DARK_RGB_    (c0, c0, c0)
 
-#define COLOUR5_PRIMARY COLOUR_X11(COLOUR5_PRIMARY_RGB_)
-#define COLOUR5_LIGHT   COLOUR_X11(COLOUR5_LIGHT_RGB_)
-#define COLOUR5_DARK    COLOUR_X11(COLOUR5_DARK_RGB_)
+#define COLOUR5_PRIMARY COLOUR_SYS(COLOUR5_PRIMARY_RGB_)
+#define COLOUR5_LIGHT   COLOUR_SYS(COLOUR5_LIGHT_RGB_)
+#define COLOUR5_DARK    COLOUR_SYS(COLOUR5_DARK_RGB_)
 
 #endif
index 755cf5dbdd51a945333f99b52f45cab02b31a481..6983cf9f7f4a006f4f8e5a57da5a1ed2af2565bf 100644 (file)
@@ -42,21 +42,20 @@ static const struct option lopts[] = {
        { 0 }
 };
 
-#define PASTE(a, b) a ## b
-#define INDIR(a) a
-
 #define S8TO16(x) ((x) * 0xfffful / 0xff)
 
-#define RGB8_(r, g, b) { \
-       0xff000000 | (r << 16) | (g << 8) | b, \
-       S8TO16(r), S8TO16(g), S8TO16(b) }
+#define RGB8(r, g, b) { \
+        0xff000000 | (r << 16) | (g << 8) | b, \
+        S8TO16(r), S8TO16(g), S8TO16(b) }
+
+#define COLOUR_SYS_EWMHICON(r, g, b) \
+       RGB8(0x ## r ## ul, 0x ## g ## ul, 0x ## b ## ul)
 
-#define RGB8(r, g, b) RGB8_(0x ## r ## ul, 0x ## g ## ul, 0x ## b ## ul)
+#undef COLOUR_SYSTEM
+#define COLOUR_SYSTEM EWMHICON
 
-#define COLOURTAB(n) { \
-       INDIR(RGB8 PASTE(COLOUR ## n, _PRIMARY_RGB_)), \
-       INDIR(RGB8 PASTE(COLOUR ## n, _DARK_RGB_)), \
-       INDIR(RGB8 PASTE(COLOUR ## n, _LIGHT_RGB_)) }
+#define COLOURTAB_(n) { n ## _PRIMARY, n ## _DARK, n ## _LIGHT }
+#define COLOURTAB(n) COLOURTAB_(COLOUR ## n)
 
 static const XColor colours[7][3] = {
        {