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
+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