commit cdd7c0f

shrub  ·  2026-04-29 07:44:57 +0000 UTC
parent 5d4c8a4
decor parts
24 files changed,  +386, -9
A tohu
+0, -0
+2, -0
1@@ -0,0 +1,2 @@
2+# ninja log v5
3+0	0	1777415536083171580	tohu	80d29635aea7f58a
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+0, -0
+141, -0
  1@@ -0,0 +1,141 @@
  2+#!/usr/bin/env python3
  3+
  4+import getopt
  5+import subprocess
  6+import sys
  7+from pathlib import Path
  8+# yes its python, sorry 
  9+
 10+PARTS = [
 11+    ("top_left", "top_left.png"),
 12+    ("top", "top.png"),
 13+    ("top_right", "top_right.png"),
 14+    ("left", "left.png"),
 15+    ("right", "right.png"),
 16+    ("bottom_left", "bottom_left.png"),
 17+    ("bottom", "bottom.png"),
 18+    ("bottom_right", "bottom_right.png"),
 19+]
 20+
 21+
 22+def usage(file):
 23+    file.write(
 24+        "usage: png2swc.py [-a asset-dir] [-o output] [-s symbol]\n"
 25+    )
 26+
 27+
 28+def run(cmd):
 29+    return subprocess.run(cmd, check=True, capture_output=True)
 30+
 31+
 32+def image_size(path: Path):
 33+    result = run(["magick", str(path), "-format", "%w %h", "info:"])
 34+    width, height = result.stdout.decode("utf-8").strip().split()
 35+    return int(width), int(height)
 36+
 37+
 38+def image_argb8888(path: Path):
 39+    width, height = image_size(path)
 40+    result = run(["magick", str(path), "rgba:-"])
 41+    raw = result.stdout
 42+    expected = width * height * 4
 43+    if len(raw) != expected:
 44+        raise ValueError(f"unexpected byte count for {path}: {len(raw)} != {expected}")
 45+
 46+    pixels = []
 47+    for i in range(0, len(raw), 4):
 48+        r, g, b, a = raw[i:i + 4]
 49+        pixels.append((a << 24) | (r << 16) | (g << 8) | b)
 50+    return width, height, pixels
 51+
 52+
 53+def format_pixels(name, pixels):
 54+    lines = []
 55+    row = []
 56+    for i, pixel in enumerate(pixels, start=1):
 57+        row.append(f"0x{pixel:08x}u")
 58+        if i % 8 == 0:
 59+            lines.append(", ".join(row))
 60+            row = []
 61+    if row:
 62+        lines.append(", ".join(row))
 63+
 64+    joined = ",\n    ".join(lines)
 65+    return f"static const uint32_t {name}_pixels[] = {{\n    {joined}\n}};\n"
 66+
 67+
 68+def generate_header(asset_dir: Path, output: Path, symbol: str):
 69+    arrays = []
 70+    parts = []
 71+
 72+    for part_name, filename in PARTS:
 73+        path = asset_dir / filename
 74+        width, height, pixels = image_argb8888(path)
 75+        arrays.append(format_pixels(f"{symbol}_{part_name}", pixels))
 76+        parts.append(
 77+            "static const struct swc_decor_part "
 78+            f"{symbol}_{part_name} = {{ .width = {width}u, .height = {height}u, "
 79+            f".stride = {width * 4}u, .data = {symbol}_{part_name}_pixels }};\n"
 80+        )
 81+
 82+    body = "\n".join(arrays + parts)
 83+    mapping = (
 84+        f"static const struct swc_decor_parts {symbol}_parts = {{\n"
 85+        f"    .top_left = {symbol}_top_left,\n"
 86+        f"    .top = {symbol}_top,\n"
 87+        f"    .top_right = {symbol}_top_right,\n"
 88+        f"    .left = {symbol}_left,\n"
 89+        f"    .right = {symbol}_right,\n"
 90+        f"    .bottom_left = {symbol}_bottom_left,\n"
 91+        f"    .bottom = {symbol}_bottom,\n"
 92+        f"    .bottom_right = {symbol}_bottom_right,\n"
 93+        f"}};\n"
 94+    )
 95+
 96+    guard = f"{symbol.upper()}_H"
 97+    text = (
 98+        f"#ifndef {guard}\n"
 99+        f"#define {guard}\n\n"
100+        f"#include <stdint.h>\n"
101+        f"#include <swc.h>\n\n"
102+        f"/* generated from {asset_dir.name} png decor parts, probably dont edit this */\n\n"
103+        f"{body}\n"
104+        f"{mapping}\n"
105+        f"#endif\n"
106+    )
107+    output.write_text(text, encoding="ascii")
108+
109+
110+def main():
111+    asset_dir = "."
112+    output = "parts.h"
113+    symbol = "afterstep_qnx"
114+
115+    try:
116+        opts, args = getopt.getopt(
117+            sys.argv[1:], "a:o:s:h", ["asset-dir=", "output=", "symbol=", "help"]
118+        )
119+    except getopt.GetoptError:
120+        usage(sys.stderr)
121+        raise SystemExit(1)
122+
123+    for opt, val in opts:
124+        if opt in ("-a", "--asset-dir"):
125+            asset_dir = val
126+        elif opt in ("-o", "--output"):
127+            output = val
128+        elif opt in ("-s", "--symbol"):
129+            symbol = val
130+        elif opt in ("-h", "--help"):
131+            usage(sys.stdout)
132+            raise SystemExit(0)
133+
134+    if args:
135+        usage(sys.stderr)
136+        raise SystemExit(1)
137+
138+    generate_header(Path(asset_dir).resolve(), Path(output).resolve(), symbol)
139+
140+
141+if __name__ == "__main__":
142+    main()
+13, -8
 1@@ -3,6 +3,8 @@
 2 
 3 #include <xkbcommon/xkbcommon-keysyms.h>
 4 
 5+#include "parts.h"
 6+#include "inactiveparts.h"
 7 
 8 #include "types.h"
 9 #include "tohu.h"
10@@ -11,19 +13,20 @@ static const struct config cfg = {
11 	.motion_throttle_hz = 85,
12 	.border_col_active = 0xffed953e,
13 	.border_col_normal = 0xff444444,
14-	.border_width = 1,
15+	.border_width = 0,
16 	.decor = {
17 		.color = 0xff444444,
18-		.top = 2,
19-		.right = 2,
20-		.bottom = 2,
21-		.left = 24,
22+		.top = 24,
23+		.right = 6,
24+		.bottom = 7,
25+		.left = 6,
26+		.parts = &afterstep_parts,
27 		.title = {
28 			.enabled = true,
29-			.edge = SWC_DECOR_EDGE_LEFT,
30-			.align = SWC_DECOR_ALIGN_START,
31+			.edge = SWC_DECOR_EDGE_TOP,
32+			.align = SWC_DECOR_ALIGN_CENTER,
33 			.color = 0xffffffff,
34-			.padding = 8,
35+			.padding = 4,
36 			.font = "gallant12x22:size=12", /*you should probably change this to a font you have*/
37 		},
38 	},
39@@ -31,8 +34,10 @@ static const struct config cfg = {
40 };
41 
42 static const char* termcmd[] = { "st-wl", NULL };
43+static const char* menucmd[] = { "neumenu_run", NULL };
44 static struct bind binds[] = {
45 	{ SWC_BINDING_KEY,    MOD4,        XKB_KEY_Return, { .v = termcmd }, spawn },
46+	{ SWC_BINDING_KEY,    MOD4,        XKB_KEY_d,      { .v = menucmd }, spawn },
47 	{ SWC_BINDING_KEY,    MOD4|SHFT,   XKB_KEY_q,      { .v = NULL },    quit },
48 	{ SWC_BINDING_KEY,    MOD4,        XKB_KEY_Tab,    { .v = NULL },    focus_next },
49 	{ SWC_BINDING_KEY,    MOD4,        XKB_KEY_f,      { .v = NULL },    fullscreen },
+114, -0
  1@@ -0,0 +1,114 @@
  2+#ifndef AFTERSTEP_INACTIVE_H
  3+#define AFTERSTEP_INACTIVE_H
  4+
  5+#include <stdint.h>
  6+#include <swc.h>
  7+
  8+/* generated from afterstep-inactive png decor parts, probably dont edit this */
  9+
 10+static const uint32_t afterstep_inactive_top_left_pixels[] = {
 11+    0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff3e3e3eu,
 12+    0xff3e3e3eu, 0xff3e3e3eu, 0xff3e3e3eu, 0xff3e3e3eu, 0xff000000u, 0xff3e3e3eu, 0xffa1a1a1u, 0xffc8c8c8u,
 13+    0xfff0f0f0u, 0xfff0f0f0u, 0xff000000u, 0xff3e3e3eu, 0xffc8c8c8u, 0xffe3e3e3u, 0xffdfdfdfu, 0xffdfdfdfu,
 14+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau, 0xffdcdcdcu, 0xffdcdcdcu, 0xff000000u, 0xff3e3e3eu,
 15+    0xfff0f0f0u, 0xffdadadau, 0xffdcdcdcu, 0xffdcdcdcu, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau,
 16+    0xffdadadau, 0xffdadadau, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau, 0xffd4d4d4u, 0xffd4d4d4u,
 17+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau, 0xffd4d4d4u, 0xffd4d4d4u, 0xff000000u, 0xff3e3e3eu,
 18+    0xfff0f0f0u, 0xffdadadau, 0xffd1d1d1u, 0xffd3d3d3u, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau,
 19+    0xffd0d0d0u, 0xffd0d0d0u, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd9d9d9u, 0xffcececeu, 0xffcececeu,
 20+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd9d9d9u, 0xffcacacau, 0xffcbcbcbu, 0xff000000u, 0xff3e3e3eu,
 21+    0xfff0f0f0u, 0xffd8d8d8u, 0xffc9c9c9u, 0xffc9c9c9u, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd7d7d7u,
 22+    0xffc6c6c6u, 0xffc6c6c6u, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd7d7d7u, 0xffc5c5c5u, 0xffc5c5c5u,
 23+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd6d6d6u, 0xffc3c3c3u, 0xffc3c3c3u, 0xff000000u, 0xff3e3e3eu,
 24+    0xfff0f0f0u, 0xffd5d5d5u, 0xffbdbdbdu, 0xffbcbcbcu, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd5d5d5u,
 25+    0xffbdbdbdu, 0xffbcbcbcu, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd5d5d5u, 0xffb8b8b8u, 0xffbababau,
 26+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd4d4d4u, 0xffb5b5b5u, 0xffb5b5b5u, 0xff000000u, 0xff3e3e3eu,
 27+    0xfff0f0f0u, 0xffd4d4d4u, 0xffabababu, 0xffabababu, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau,
 28+    0xff8f8f8fu, 0xff8f8f8fu, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff4b4b4bu
 29+};
 30+
 31+static const uint32_t afterstep_inactive_top_pixels[] = {
 32+    0xff000000u, 0xff3e3e3eu, 0xffacacacu, 0xff5b5b5bu, 0xffacacacu, 0xff8c8c8cu, 0xff8c8c8cu, 0xff8b8b8bu,
 33+    0xff868686u, 0xff858585u, 0xff818181u, 0xff808080u, 0xff7c7c7cu, 0xff777777u, 0xff757575u, 0xff737373u,
 34+    0xff717171u, 0xff6e6e6eu, 0xff6c6c6cu, 0xff696969u, 0xff686868u, 0xff666666u, 0xff4f4f4fu, 0xff4b4b4bu
 35+};
 36+
 37+static const uint32_t afterstep_inactive_top_right_pixels[] = {
 38+    0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff3e3e3eu, 0xff3e3e3eu,
 39+    0xff3e3e3eu, 0xff3e3e3eu, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xff969696u, 0xff969696u, 0xff969696u,
 40+    0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xffd8d8d8u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u,
 41+    0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u,
 42+    0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u,
 43+    0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u,
 44+    0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u,
 45+    0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u,
 46+    0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u,
 47+    0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u,
 48+    0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u,
 49+    0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u,
 50+    0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u,
 51+    0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u,
 52+    0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u,
 53+    0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u,
 54+    0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u,
 55+    0xff3e3e3eu, 0xff000000u, 0xff4b4b4bu, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u
 56+};
 57+
 58+static const uint32_t afterstep_inactive_left_pixels[] = {
 59+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff4b4b4bu
 60+};
 61+
 62+static const uint32_t afterstep_inactive_right_pixels[] = {
 63+    0xff4b4b4bu, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u
 64+};
 65+
 66+static const uint32_t afterstep_inactive_bottom_left_pixels[] = {
 67+    0xff000000u, 0xff3e3e3eu, 0xffcfcfcfu, 0xffbfbfbfu, 0xff8f8f8fu, 0xff4b4b4bu, 0xff000000u, 0xff3e3e3eu,
 68+    0xffcfcfcfu, 0xffbfbfbfu, 0xff8f8f8fu, 0xff4b4b4bu, 0xff000000u, 0xff3e3e3eu, 0xffcfcfcfu, 0xffbfbfbfu,
 69+    0xff9f9f9fu, 0xffcfcfcfu, 0xff000000u, 0xff3e3e3eu, 0xffafafafu, 0xffafafafu, 0xffbfbfbfu, 0xffbfbfbfu,
 70+    0xff000000u, 0xff3e3e3eu, 0xff5f5f5fu, 0xff7f7f7fu, 0xff8f8f8fu, 0xff8f8f8fu, 0xff000000u, 0xff3e3e3eu,
 71+    0xff3e3e3eu, 0xff3e3e3eu, 0xff3e3e3eu, 0xff3e3e3eu, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u,
 72+    0xff000000u, 0xff000000u
 73+};
 74+
 75+static const uint32_t afterstep_inactive_bottom_pixels[] = {
 76+    0xffaaaaaau, 0xff4b4b4bu, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u
 77+};
 78+
 79+static const uint32_t afterstep_inactive_bottom_right_pixels[] = {
 80+    0x684b4b4bu, 0x68cfcfcfu, 0x68bfbfbfu, 0x688f8f8fu, 0x683e3e3eu, 0x68000000u, 0xa34b4b4bu, 0x68cfcfcfu,
 81+    0x68bfbfbfu, 0x688f8f8fu, 0xa33e3e3eu, 0x51000000u, 0x68cfcfcfu, 0x68cfcfcfu, 0x42bfbfbfu, 0x687f7f7fu,
 82+    0xa33e3e3eu, 0x68000000u, 0x68bfbfbfu, 0x42bfbfbfu, 0x689f9f9fu, 0xa35f5f5fu, 0xa33e3e3eu, 0x68000000u,
 83+    0x688f8f8fu, 0x687f7f7fu, 0xa35f5f5fu, 0xa35f5f5fu, 0xa33e3e3eu, 0x68000000u, 0xa33e3e3eu, 0xa33e3e3eu,
 84+    0xa33e3e3eu, 0xa33e3e3eu, 0xa33e3e3eu, 0x68000000u, 0xa3000000u, 0xa3000000u, 0xa3000000u, 0xa3000000u,
 85+    0xa3000000u, 0xa3000000u
 86+};
 87+
 88+static const struct swc_decor_part afterstep_inactive_top_left = { .width = 6u, .height = 24u, .stride = 24u, .data = afterstep_inactive_top_left_pixels };
 89+
 90+static const struct swc_decor_part afterstep_inactive_top = { .width = 1u, .height = 24u, .stride = 4u, .data = afterstep_inactive_top_pixels };
 91+
 92+static const struct swc_decor_part afterstep_inactive_top_right = { .width = 6u, .height = 24u, .stride = 24u, .data = afterstep_inactive_top_right_pixels };
 93+
 94+static const struct swc_decor_part afterstep_inactive_left = { .width = 6u, .height = 1u, .stride = 24u, .data = afterstep_inactive_left_pixels };
 95+
 96+static const struct swc_decor_part afterstep_inactive_right = { .width = 6u, .height = 1u, .stride = 24u, .data = afterstep_inactive_right_pixels };
 97+
 98+static const struct swc_decor_part afterstep_inactive_bottom_left = { .width = 6u, .height = 7u, .stride = 24u, .data = afterstep_inactive_bottom_left_pixels };
 99+
100+static const struct swc_decor_part afterstep_inactive_bottom = { .width = 1u, .height = 7u, .stride = 4u, .data = afterstep_inactive_bottom_pixels };
101+
102+static const struct swc_decor_part afterstep_inactive_bottom_right = { .width = 6u, .height = 7u, .stride = 24u, .data = afterstep_inactive_bottom_right_pixels };
103+
104+static const struct swc_decor_parts afterstep_inactive_parts = {
105+    .top_left = afterstep_inactive_top_left,
106+    .top = afterstep_inactive_top,
107+    .top_right = afterstep_inactive_top_right,
108+    .left = afterstep_inactive_left,
109+    .right = afterstep_inactive_right,
110+    .bottom_left = afterstep_inactive_bottom_left,
111+    .bottom = afterstep_inactive_bottom,
112+    .bottom_right = afterstep_inactive_bottom_right,
113+};
114+
115+#endif
+114, -0
  1@@ -0,0 +1,114 @@
  2+#ifndef AFTERSTEP_H
  3+#define AFTERSTEP_H
  4+
  5+#include <stdint.h>
  6+#include <swc.h>
  7+
  8+/* generated from afterstep png decor parts, probably dont edit this */
  9+
 10+static const uint32_t afterstep_top_left_pixels[] = {
 11+    0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff3e3e3eu,
 12+    0xff3e3e3eu, 0xff3e3e3eu, 0xff3e3e3eu, 0xff3e3e3eu, 0xff000000u, 0xff3e3e3eu, 0xffa1a1a1u, 0xffc8c8c8u,
 13+    0xfff0f0f0u, 0xfff0f0f0u, 0xff000000u, 0xff3e3e3eu, 0xffc8c8c8u, 0xffe3e3e3u, 0xffdfdfdfu, 0xffdfdfdfu,
 14+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau, 0xffdcdcdcu, 0xffdcdcdcu, 0xff000000u, 0xff3e3e3eu,
 15+    0xfff0f0f0u, 0xffdadadau, 0xffdcdcdcu, 0xffdcdcdcu, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau,
 16+    0xffdadadau, 0xffdadadau, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau, 0xffd4d4d4u, 0xffd4d4d4u,
 17+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau, 0xffd4d4d4u, 0xffd4d4d4u, 0xff000000u, 0xff3e3e3eu,
 18+    0xfff0f0f0u, 0xffdadadau, 0xffd1d1d1u, 0xffd3d3d3u, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau,
 19+    0xffd0d0d0u, 0xffd0d0d0u, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd9d9d9u, 0xffcececeu, 0xffcececeu,
 20+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd9d9d9u, 0xffcacacau, 0xffcbcbcbu, 0xff000000u, 0xff3e3e3eu,
 21+    0xfff0f0f0u, 0xffd8d8d8u, 0xffc9c9c9u, 0xffc9c9c9u, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd7d7d7u,
 22+    0xffc6c6c6u, 0xffc6c6c6u, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd7d7d7u, 0xffc5c5c5u, 0xffc5c5c5u,
 23+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd6d6d6u, 0xffc3c3c3u, 0xffc3c3c3u, 0xff000000u, 0xff3e3e3eu,
 24+    0xfff0f0f0u, 0xffd5d5d5u, 0xffbdbdbdu, 0xffbcbcbcu, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd5d5d5u,
 25+    0xffbdbdbdu, 0xffbcbcbcu, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd5d5d5u, 0xffb8b8b8u, 0xffbababau,
 26+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd4d4d4u, 0xffb5b5b5u, 0xffb5b5b5u, 0xff000000u, 0xff3e3e3eu,
 27+    0xfff0f0f0u, 0xffd4d4d4u, 0xffabababu, 0xffabababu, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffdadadau,
 28+    0xff8f8f8fu, 0xff8f8f8fu, 0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff4b4b4bu
 29+};
 30+
 31+static const uint32_t afterstep_top_pixels[] = {
 32+    0xff000000u, 0xff3e3e3eu, 0xffee9c83u, 0xffac4357u, 0xffee9c83u, 0xffd9786eu, 0xffd8796fu, 0xffd7786eu,
 33+    0xffd5726au, 0xffd3716au, 0xffd06c67u, 0xffcf6b66u, 0xffcd6764u, 0xffca6161u, 0xffc85f5fu, 0xffc55c5fu,
 34+    0xffc35a5fu, 0xffc0575cu, 0xffbe555cu, 0xffbb525cu, 0xffba515bu, 0xffb84f5cu, 0xffa03752u, 0xff4b4b4bu
 35+};
 36+
 37+static const uint32_t afterstep_top_right_pixels[] = {
 38+    0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u, 0xff3e3e3eu, 0xff3e3e3eu,
 39+    0xff3e3e3eu, 0xff3e3e3eu, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xff969696u, 0xff969696u, 0xff969696u,
 40+    0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xffd8d8d8u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u,
 41+    0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u,
 42+    0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u,
 43+    0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u,
 44+    0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u,
 45+    0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u,
 46+    0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u,
 47+    0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u,
 48+    0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u,
 49+    0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u,
 50+    0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u,
 51+    0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u,
 52+    0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u,
 53+    0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u,
 54+    0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u, 0xff969696u, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u,
 55+    0xff3e3e3eu, 0xff000000u, 0xff4b4b4bu, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u
 56+};
 57+
 58+static const uint32_t afterstep_left_pixels[] = {
 59+    0xff000000u, 0xff3e3e3eu, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff4b4b4bu
 60+};
 61+
 62+static const uint32_t afterstep_right_pixels[] = {
 63+    0xff4b4b4bu, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u
 64+};
 65+
 66+static const uint32_t afterstep_bottom_left_pixels[] = {
 67+    0xff000000u, 0xff3e3e3eu, 0xffcfcfcfu, 0xffbfbfbfu, 0xff8f8f8fu, 0xff4b4b4bu, 0xff000000u, 0xff3e3e3eu,
 68+    0xffcfcfcfu, 0xffbfbfbfu, 0xff8f8f8fu, 0xff4b4b4bu, 0xff000000u, 0xff3e3e3eu, 0xffcfcfcfu, 0xffbfbfbfu,
 69+    0xff9f9f9fu, 0xffcfcfcfu, 0xff000000u, 0xff3e3e3eu, 0xffafafafu, 0xffafafafu, 0xffbfbfbfu, 0xffbfbfbfu,
 70+    0xff000000u, 0xff3e3e3eu, 0xff5f5f5fu, 0xff7f7f7fu, 0xff8f8f8fu, 0xff8f8f8fu, 0xff000000u, 0xff3e3e3eu,
 71+    0xff3e3e3eu, 0xff3e3e3eu, 0xff3e3e3eu, 0xff3e3e3eu, 0xff000000u, 0xff000000u, 0xff000000u, 0xff000000u,
 72+    0xff000000u, 0xff000000u
 73+};
 74+
 75+static const uint32_t afterstep_bottom_pixels[] = {
 76+    0xffaaaaaau, 0xff4b4b4bu, 0xfff0f0f0u, 0xffd8d8d8u, 0xff969696u, 0xff3e3e3eu, 0xff000000u
 77+};
 78+
 79+static const uint32_t afterstep_bottom_right_pixels[] = {
 80+    0x684b4b4bu, 0x68cfcfcfu, 0x68bfbfbfu, 0x688f8f8fu, 0x683e3e3eu, 0x68000000u, 0xa34b4b4bu, 0x68cfcfcfu,
 81+    0x68bfbfbfu, 0x688f8f8fu, 0xa33e3e3eu, 0x51000000u, 0x68cfcfcfu, 0x68cfcfcfu, 0x42bfbfbfu, 0x687f7f7fu,
 82+    0xa33e3e3eu, 0x68000000u, 0x68bfbfbfu, 0x42bfbfbfu, 0x689f9f9fu, 0xa35f5f5fu, 0xa33e3e3eu, 0x68000000u,
 83+    0x688f8f8fu, 0x687f7f7fu, 0xa35f5f5fu, 0xa35f5f5fu, 0xa33e3e3eu, 0x68000000u, 0xa33e3e3eu, 0xa33e3e3eu,
 84+    0xa33e3e3eu, 0xa33e3e3eu, 0xa33e3e3eu, 0x68000000u, 0xa3000000u, 0xa3000000u, 0xa3000000u, 0xa3000000u,
 85+    0xa3000000u, 0xa3000000u
 86+};
 87+
 88+static const struct swc_decor_part afterstep_top_left = { .width = 6u, .height = 24u, .stride = 24u, .data = afterstep_top_left_pixels };
 89+
 90+static const struct swc_decor_part afterstep_top = { .width = 1u, .height = 24u, .stride = 4u, .data = afterstep_top_pixels };
 91+
 92+static const struct swc_decor_part afterstep_top_right = { .width = 6u, .height = 24u, .stride = 24u, .data = afterstep_top_right_pixels };
 93+
 94+static const struct swc_decor_part afterstep_left = { .width = 6u, .height = 1u, .stride = 24u, .data = afterstep_left_pixels };
 95+
 96+static const struct swc_decor_part afterstep_right = { .width = 6u, .height = 1u, .stride = 24u, .data = afterstep_right_pixels };
 97+
 98+static const struct swc_decor_part afterstep_bottom_left = { .width = 6u, .height = 7u, .stride = 24u, .data = afterstep_bottom_left_pixels };
 99+
100+static const struct swc_decor_part afterstep_bottom = { .width = 1u, .height = 7u, .stride = 4u, .data = afterstep_bottom_pixels };
101+
102+static const struct swc_decor_part afterstep_bottom_right = { .width = 6u, .height = 7u, .stride = 24u, .data = afterstep_bottom_right_pixels };
103+
104+static const struct swc_decor_parts afterstep_parts = {
105+    .top_left = afterstep_top_left,
106+    .top = afterstep_top,
107+    .top_right = afterstep_top_right,
108+    .left = afterstep_left,
109+    .right = afterstep_right,
110+    .bottom_left = afterstep_bottom_left,
111+    .bottom = afterstep_bottom,
112+    .bottom_right = afterstep_bottom_right,
113+};
114+
115+#endif
+2, -1
 1@@ -76,7 +76,8 @@ static void apply_decor(struct client* c, bool active)
 2 	}
 3 
 4 	decor = cfg.decor;
 5-	decor.color = active ? cfg.border_col_active : cfg.border_col_normal;
 6+	decor.parts = active ? &afterstep_parts : &afterstep_inactive_parts;
 7+	decor.title.color = active ? 0xffffffff : 0xffc0c0c0;
 8 	title = decorstring(c, process_name, sizeof(process_name));
 9 	if (title)
10 		decor.title.string = title;
A tohu
+0, -0