- int out_x, out_y, out_w, out_h, x, y;
- unsigned long row[11];
-
- out_x = 10*tile_x + (tile_x > 0);
- out_y = 10*tile_y + (tile_y > 0);
- out_w = 10 + (tile_x != 1);
- out_h = 10 + (tile_y != 1);
-
- for (y = 0; y < out_h; y++) {
- for (x = 0; x < out_w; x++) {
- if (x == 0 || y == 0)
- row[x] = wm_pixel(&c[COLOUR_LIGHT]);
- else if (x == out_w-1 || y == out_h-1)
- row[x] = wm_pixel(&c[COLOUR_DARK]);
- else
- row[x] = wm_pixel(&c[COLOUR_PRIMARY]);
+ static const unsigned char dims[ICON_MAX] = { 16, 24, 32, 48 };
+ unsigned long *work, *ret;
+ unsigned i, j, fullsize, size;
+
+ work = ret = malloc(sizeof *work * EWMH_ICON_NELEM);
+ if (!work)
+ return NULL;
+
+ for (i = fullsize = 0; i < ICON_MAX; i++) {
+ work += fullsize;
+
+ size = dims[i];
+ *work++ = size;
+ *work++ = size;
+
+ for (j = 0; j < 9; j++) {
+ unsigned x = j%3, y = j/3;
+
+ switch (i) {
+ case 0: icon_tile16((void *)work, seq[j], x, y); break;
+ case 1: icon_tile24((void *)work, seq[j], x, y); break;
+ case 2: icon_tile32((void *)work, seq[j], x, y); break;
+ case 3: icon_tile48((void *)work, seq[j], x, y); break;
+ }