From c1790414668d995a6148db428d2a315c8a6aa3ac Mon Sep 17 00:00:00 2001 From: ethernet Date: Fri, 25 Sep 2026 14:02:13 -0400 Subject: [PATCH] feat(icons): macOS 26 layered icon whose border follows Apple's mask macOS 26 clips every app icon to its own squircle and shows legacy .icns art inside a glass plate. Our border is a stroke on the tile's rounded rect, so on 26 the ring sits inside a grey rim and thins toward the corners where Apple's curve and ours diverge. Add an Icon Composer package (apps/desktop/assets/icon.icon) of canvas-filling layers the system masks itself: a border band whose outer edge is the canvas (the mask supplies the outline) and whose inner edge is Apple's mask offset inward by the brand border thickness, so the band is the same width everywhere along the visible outline; and the girl (+ commit badge) as a second layer. Build flavours recolour the fill in icon.json only. Apple's mask is a circular arc flanked by two cubic easing segments (the Figma corner-smoothing construction). Fitted to macOS 26.6.2's own render of a system icon on the 824-on-1024 grid: radius 214px, smoothing 0.645, rms 0.32px / worst 0.81px; a superellipse cannot get under 0.54px rms. The .icns targets are unchanged: Apple's own 26-era .icns still sit on the 824 grid, and macOS <= 15 keeps showing that artwork. The new contract test probes the border layer 640 points along the mask: opaque at thickness-1.5px, transparent at thickness+1.5px. Rendering the layers with the old r=185.4 corner violates it at 1448 probe points. --- .../assets/icon.icon/Assets/art-dark.png | Bin 0 -> 58295 bytes .../assets/icon.icon/Assets/art-light.png | Bin 0 -> 47793 bytes .../assets/icon.icon/Assets/border-dark.png | Bin 0 -> 11121 bytes .../assets/icon.icon/Assets/border-light.png | Bin 0 -> 10549 bytes apps/desktop/assets/icon.icon/icon.json | 65 +++++ scripts/generate_icons.py | 236 ++++++++++++++++-- tests/scripts/test_icon_flavors.py | 81 +++++- 7 files changed, 365 insertions(+), 17 deletions(-) create mode 100644 apps/desktop/assets/icon.icon/Assets/art-dark.png create mode 100644 apps/desktop/assets/icon.icon/Assets/art-light.png create mode 100644 apps/desktop/assets/icon.icon/Assets/border-dark.png create mode 100644 apps/desktop/assets/icon.icon/Assets/border-light.png create mode 100644 apps/desktop/assets/icon.icon/icon.json diff --git a/apps/desktop/assets/icon.icon/Assets/art-dark.png b/apps/desktop/assets/icon.icon/Assets/art-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2031563e62d696b03a25e52f601830618137a074 GIT binary patch literal 58295 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/assets/icon.icon/Assets/art-light.png b/apps/desktop/assets/icon.icon/Assets/art-light.png new file mode 100644 index 0000000000000000000000000000000000000000..a64468c9ec3347323ce14c2852b86c512fe86254 GIT binary patch literal 47793 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 HRw4ffaS925 literal 0 HcmV?d00001 diff --git a/apps/desktop/assets/icon.icon/Assets/border-dark.png b/apps/desktop/assets/icon.icon/Assets/border-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..0c12da9b45417b252aacca628d2b3864310d5089 GIT binary patch literal 11121 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 E1EtP2DF6Tf literal 0 HcmV?d00001 diff --git a/apps/desktop/assets/icon.icon/Assets/border-light.png b/apps/desktop/assets/icon.icon/Assets/border-light.png new file mode 100644 index 0000000000000000000000000000000000000000..2ffc3dd6ae0e54b15815646cdf167ed651c69d87 GIT binary patch literal 10549 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

Q_gt`%Gx=yk`?OS0TJ!F;bi+#P2=g?*QGFa(YT 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 ET.Element: + """The registered girl with her lowest nodes dragged down to `join_bottom` + (the border's inner edge) so hair meets the ring instead of floating.""" + box = GIRL_BOXES[bg] + portrait = ET.fromstring(girl_layer(art, girl, box, align="xMidYMax")) + _, y, portrait_width, portrait_height = box + _, by, bw, bh = girl_bbox(art, girl) + scale = min(portrait_width / bw, portrait_height / bh) + drag_bottom_nodes( + portrait[0], cutoff=by + bh * 0.97, band=bh * 0.02, + distance=max(0.0, join_bottom - (y + portrait_height)) / scale, + ) + # Keep the fitted viewBox fixed, but let edited nodes reach into the border. + portrait.set("overflow", "visible") + return portrait + + def compose_svg(art: IconArt, girl: str, bg: str) -> str: """Full svg text: background + girl layer, in the background's native coordinate space (resvg scales to whatever output size is requested, so @@ -368,18 +403,7 @@ def compose_svg(art: IconArt, girl: str, bg: str) -> str: tile.set("stroke-width", str(thickness)) inner = "".join(ET.tostring(child, encoding="unicode") for child in background) clip = ET.tostring(silhouette, encoding="unicode") - box = GIRL_BOXES[bg] - portrait = ET.fromstring(girl_layer(art, girl, box, align="xMidYMax")) - _, y, portrait_width, portrait_height = box - _, by, bw, bh = girl_bbox(art, girl) - scale = min(portrait_width / bw, portrait_height / bh) - join_bottom = geometry["y"] + geometry["height"] - thickness + 10 - drag_bottom_nodes( - portrait[0], cutoff=by + bh * 0.97, band=bh * 0.02, - distance=max(0.0, join_bottom - (y + portrait_height)) / scale, - ) - # Keep the fitted viewBox fixed, but let edited nodes reach into the border. - portrait.set("overflow", "visible") + portrait = portrait_layer(art, girl, bg, geometry["y"] + geometry["height"] - thickness + 10) badge = f" {commit_layer(art.commit, bg)}\n" if art.commit else "" return ( f'\n' @@ -391,6 +415,182 @@ def compose_svg(art: IconArt, girl: str, bg: str) -> str: ) +# ─── macOS 26 layered icon (.icon → Assets.car) ───────────────────────────── +# +# macOS 26 clips every app icon to its own mask and shows legacy .icns art +# inside a glass plate, so a ring drawn around our tile no longer follows the +# visible outline. The .icon package gives the system canvas-filling layers +# to mask itself: the border layer is a band whose OUTER edge is the canvas +# (the system's mask becomes the outline) and whose INNER edge is the mask +# offset inward by the border thickness — constant thickness by construction. +# +# The mask is Apple's smoothed rounded square: a circular arc flanked by two +# cubic easing segments (the Figma corner-smoothing construction). Fitted to +# macOS 26.6.2's own render of a system icon on the 824-on-1024 grid: +# radius 214px, smoothing 0.645 (rms 0.32px, worst 0.81px). Layers are +# placed on that grid by the system, so in layer coordinates the mask fills +# the canvas. +MAC_MASK_RADIUS_FRACTION = 214.0 / 824.0 +MAC_MASK_SMOOTHING = 0.645 +ICON_CANVAS = 1024 + + +def _cubic(p0, p1, p2, p3, t: float) -> tuple[float, float]: + u = 1.0 - t + return (u ** 3 * p0[0] + 3 * u * u * t * p1[0] + 3 * u * t * t * p2[0] + t ** 3 * p3[0], + u ** 3 * p0[1] + 3 * u * u * t * p1[1] + 3 * u * t * t * p2[1] + t ** 3 * p3[1]) + + +def _mask_corner(side: float, samples: int) -> list[tuple[float, float]]: + """Top-left corner with the tile corner at the origin, running clockwise + from the left edge (0, p) around to the top edge (p, 0).""" + radius = side * MAC_MASK_RADIUS_FRACTION + smoothing = MAC_MASK_SMOOTHING + p = min((1 + smoothing) * radius, side / 2) + arc_measure = 90 * (1 - smoothing) + arc_len = math.sin(math.radians(arc_measure / 2)) * radius * math.sqrt(2) + angle_alpha = (90 - arc_measure) / 2 + p3p4 = radius * math.tan(math.radians(angle_alpha / 2)) + angle_beta = 45 * smoothing + c = p3p4 * math.cos(math.radians(angle_beta)) + d = c * math.tan(math.radians(angle_beta)) + b = (p - arc_len - c - d) / 3 + a = 2 * b + # Trace the construction's top-right corner (corner at the origin, x <= 0): + # easing cubic, circular arc, easing cubic. + pts: list[tuple[float, float]] = [] + p0 = (-p, 0.0) + p1, p2, p3 = (p0[0] + a, 0.0), (p0[0] + a + b, 0.0), (p0[0] + a + b + c, d) + for i in range(samples): + pts.append(_cubic(p0, p1, p2, p3, i / samples)) + length = math.hypot(c, d) + nx, ny = -d / length, c / length + cx, cy = p3[0] + nx * radius, p3[1] + ny * radius + start = math.atan2(p3[1] - cy, p3[0] - cx) + for i in range(samples): + angle = start + math.radians(arc_measure) * i / samples + pts.append((cx + radius * math.cos(angle), cy + radius * math.sin(angle))) + p4 = (p3[0] + arc_len, p3[1] + arc_len) + p5, p6, p7 = (p4[0] + d, p4[1] + c), (p4[0] + d, p4[1] + b + c), (0.0, p) + for i in range(samples + 1): + pts.append(_cubic(p4, p5, p6, p7, i / samples)) + # Mirror into the top-left corner and reverse so the run is clockwise. + return [(-x, y) for x, y in reversed(pts)] + + +def mac_mask_outline(side: float, samples: int = 96) -> list[tuple[float, float]]: + """Closed clockwise outline of the macOS 26 icon mask for a tile of `side`.""" + tl = _mask_corner(side, samples) + tr = [(side - y, x) for x, y in tl] + br = [(side - x, side - y) for x, y in tl] + bl = [(y, side - x) for x, y in tl] + outline: list[tuple[float, float]] = [] + for point in tl + tr + br + bl: + if not outline or math.hypot(point[0] - outline[-1][0], point[1] - outline[-1][1]) > 1e-9: + outline.append(point) + return outline + + +def offset_inward(points: list[tuple[float, float]], distance: float) -> list[tuple[float, float]]: + """Parallel curve `distance` inside a convex closed outline.""" + count = len(points) + cx = sum(x for x, _ in points) / count + cy = sum(y for _, y in points) / count + result = [] + for i, (x, y) in enumerate(points): + px, py = points[i - 1] + qx, qy = points[(i + 1) % count] + tx, ty = qx - px, qy - py + length = math.hypot(tx, ty) or 1.0 + nx, ny = -ty / length, tx / length + if (cx - x) * nx + (cy - y) * ny < 0: + nx, ny = -nx, -ny + result.append((x + nx * distance, y + ny * distance)) + return result + + +def closed_path(points: list[tuple[float, float]]) -> str: + """SVG path through the points as a closed Catmull-Rom spline (cubic Beziers).""" + count = len(points) + parts = [f"M{points[0][0]:.3f} {points[0][1]:.3f}"] + for i in range(count): + p0, p1 = points[(i - 1) % count], points[i] + p2, p3 = points[(i + 1) % count], points[(i + 2) % count] + c1 = (p1[0] + (p2[0] - p0[0]) / 6.0, p1[1] + (p2[1] - p0[1]) / 6.0) + c2 = (p2[0] - (p3[0] - p1[0]) / 6.0, p2[1] - (p3[1] - p1[1]) / 6.0) + parts.append(f"C{c1[0]:.3f} {c1[1]:.3f} {c2[0]:.3f} {c2[1]:.3f} {p2[0]:.3f} {p2[1]:.3f}") + parts.append("Z") + return "".join(parts) + + +def icon_border_svg(ink: str) -> str: + """Border layer: the canvas minus the mask's inward offset (even-odd).""" + thickness = ICON_CANVAS * BORDER_FRACTION + inner = closed_path(offset_inward(mac_mask_outline(float(ICON_CANVAS)), thickness)) + return ( + f'\n' + f' \n' + "\n" + ) + + +def icon_art_svg(art: IconArt, girl: str) -> str: + """Art layer: the girl registered as on the canvas-filling squircle, joined + to the border band; the commit badge rides along for commit builds.""" + thickness = ICON_CANVAS * BORDER_FRACTION + bg = "squircle-light.svg" # canvas-filling registration; the system supplies the grid + portrait = portrait_layer(art, girl, bg, ICON_CANVAS - thickness + 10) + badge = f" {commit_layer(art.commit, bg)}\n" if art.commit else "" + return ( + f'\n' + f"{badge}" + f" {ET.tostring(portrait, encoding='unicode')}\n" + "\n" + ) + + +def icon_color(hex_color: str) -> str: + """Icon Composer colour literal for an opaque sRGB hex colour.""" + value = hex_color.lstrip("#") + r, g, b = (int(value[i:i + 2], 16) / 255.0 for i in (0, 2, 4)) + return f"srgb:{r:.5f},{g:.5f},{b:.5f},1.00000" + + +def icon_manifest(art: IconArt) -> str: + """icon.json: flat brand fill (flavoured for canary/commit builds), a + border layer and an art layer, each with a dark-appearance variant.""" + light, dark = art.colors or ("#ffffff", DARK_HEX) + + def layer(name: str) -> dict: + return { + "name": name, + "image-name": f"{name}-light.png", + "image-name-specializations": [ + {"value": f"{name}-light.png"}, + {"appearance": "dark", "value": f"{name}-dark.png"}, + ], + "glass": False, + "hidden": False, + } + + manifest = { + "fill-specializations": [ + {"value": {"solid": icon_color(light)}}, + {"appearance": "dark", "value": {"solid": icon_color(dark)}}, + ], + "groups": [{ + "lighting": "individual", + "specular": False, + "translucency": {"enabled": False, "value": 0}, + "shadow": {"kind": "none", "opacity": 0}, + "blur-material": None, + "layers": [layer("border"), layer("art")], + }], + "supported-platforms": {"squares": "shared"}, + } + return json.dumps(manifest, indent=2) + "\n" + + # ─── rendering ────────────────────────────────────────────────────────────── def render(master: str, size: int, *, background: str | None = None) -> Image.Image: @@ -458,6 +658,8 @@ def target_bytes(art: IconArt, kind: str, arg: object) -> bytes: return art.master_dark.encode("utf-8") if kind == "svg_copy": return art.master.encode("utf-8") + if kind == "icon_manifest": + return icon_manifest(art).encode("utf-8") buf = io.BytesIO() if kind == "png": @@ -472,6 +674,10 @@ def target_bytes(art: IconArt, kind: str, arg: object) -> bytes: render(art.master_dark, arg, background=DARK_HEX).convert("RGB").save(buf, "PNG", optimize=True) elif kind in ("girl_light", "girl_dark"): save_png(girl_mark(art, kind, arg), buf) + elif kind == "icon_border": + save_png(render_svg(icon_border_svg(arg), ICON_CANVAS), buf) + elif kind == "icon_art": + save_png(render_svg(icon_art_svg(art, arg), ICON_CANVAS), buf) elif kind == "ico": img = render(art.master, max(arg)) img.save(buf, format="ICO", sizes=[(s, s) for s in arg]) @@ -542,8 +748,8 @@ def cmd_write(source: Path, out: Path) -> int: for rel, kind, arg in TARGETS: path = out / rel try: - if kind in ("svg", "svg_dark", "svg_copy"): - print(f" {rel}: {path.stat().st_size} bytes SVG") + if kind in ("svg", "svg_dark", "svg_copy", "icon_manifest"): + print(f" {rel}: {path.stat().st_size} bytes {'JSON' if kind == 'icon_manifest' else 'SVG'}") continue im = Image.open(path) if kind in ("ico", "ico_dark"): diff --git a/tests/scripts/test_icon_flavors.py b/tests/scripts/test_icon_flavors.py index 81e1e203ec..38527e8e9f 100644 --- a/tests/scripts/test_icon_flavors.py +++ b/tests/scripts/test_icon_flavors.py @@ -14,6 +14,7 @@ import pytest ROOT = Path(__file__).resolve().parents[2] +LAYERED_ICON = "icon.icon" # apps/desktop/assets/icon.icon: the macOS 26 Icon Composer package @pytest.fixture(scope="module") @@ -140,8 +141,8 @@ def test_canary_changes_only_desktop_background_preserving_art_and_native_geomet stable = generate("v1.2.3") canary = generate("v1.2.3+canary.20260911T010203Z") for path in (stable / "apps/desktop").rglob("*"): - if not path.is_file(): - continue + if not path.is_file() or LAYERED_ICON in path.parts: + continue # the layered macOS icon carries its flavor in icon.json, tested below original_frames = list(frames(path)) canary_frames = list(frames(canary / path.relative_to(stable))) assert len(original_frames) == len(canary_frames) @@ -168,6 +169,8 @@ def test_commit_icons_are_red_and_print_only_the_actual_seven_digit_prefix(gener continue rel = path.relative_to(first) assert path.read_bytes() == (same_prefix / rel).read_bytes(), rel + if LAYERED_ICON in path.parts: + continue # the layered macOS icon carries its flavor in icon.json, tested below first_frames = list(frames(path)) other_frames = list(frames(changed / rel)) stable_frames = list(frames(stable / rel)) @@ -213,6 +216,80 @@ def test_commit_icons_are_red_and_print_only_the_actual_seven_digit_prefix(gener assert_unbranded_outputs(stable, first) +def load_generator(monkeypatch): + import importlib.util + import types + + monkeypatch.setitem(sys.modules, "resvg_py", types.ModuleType("resvg_py")) + spec = importlib.util.spec_from_file_location("generate_icons", ROOT / "scripts/generate_icons.py") + assert spec is not None and spec.loader is not None + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +def manifest_fills(package): + """(light, dark) fill colours of an Icon Composer package as 0..1 RGB tuples.""" + import json + + manifest = json.loads((package / "icon.json").read_text(encoding="utf-8")) + fills = {} + for spec in manifest["fill-specializations"]: + prefix, _, channels = spec["value"]["solid"].partition(":") + assert prefix == "srgb" + fills[spec.get("appearance", "light")] = tuple(float(v) for v in channels.split(","))[:3] + layers = [layer for group in manifest["groups"] for layer in group["layers"]] + referenced = {layer["image-name"] for layer in layers} | { + spec["value"] for layer in layers for spec in layer["image-name-specializations"]} + assert referenced == {p.name for p in (package / "Assets").iterdir()}, "every layer image is referenced, none dangle" + return fills["light"], fills["dark"] + + +def test_layered_macos_icon_border_hugs_the_system_mask_and_flavor_stays_in_the_fill(generate, monkeypatch): + """macOS 26 masks the layers itself: the border layer must be a band of the + brand thickness measured perpendicular to Apple's mask everywhere along it, + reaching the canvas edge so the mask supplies the outline. Build flavors + recolour the fill in icon.json only; the ring and the girl never change.""" + module = load_generator(monkeypatch) + stable = generate("v1.2.3") / "apps/desktop/assets" / LAYERED_ICON + canary = generate("v1.2.3+canary.20260911T010203Z") / "apps/desktop/assets" / LAYERED_ICON + commit = generate(commit="0123456" + "a" * 33) / "apps/desktop/assets" / LAYERED_ICON + + canvas = module.ICON_CANVAS + thickness = canvas * module.BORDER_FRACTION + outline = module.mac_mask_outline(float(canvas), 160) + for name, ink in (("border-light.png", (0, 0, 0)), ("border-dark.png", (255, 255, 255))): + layer = Image.open(stable / "Assets" / name).convert("RGBA") + assert layer.size == (canvas, canvas) + assert layer.getpixel((0, 0))[3] == 255 and layer.getpixel((canvas - 1, canvas - 1))[3] == 255 + for (xi, yi), (xo, yo) in zip(module.offset_inward(outline, thickness - 1.5), + module.offset_inward(outline, thickness + 1.5), strict=True): + inside = layer.getpixel((int(xi), int(yi))) + assert inside[3] >= 250 and inside[:3] == ink, (name, xi, yi, inside) + assert layer.getpixel((int(xo), int(yo)))[3] <= 5, (name, xo, yo) + + for name in ("border-light.png", "border-dark.png", "art-light.png", "art-dark.png"): + assert (stable / "Assets" / name).read_bytes() == (canary / "Assets" / name).read_bytes(), name + for name in ("border-light.png", "border-dark.png"): + assert (stable / "Assets" / name).read_bytes() == (commit / "Assets" / name).read_bytes(), name + for name in ("art-light.png", "art-dark.png"): + # The commit badge is the only difference, and it lives in the top quarter. + plain = Image.open(stable / "Assets" / name).convert("RGBA") + badged = Image.open(commit / "Assets" / name).convert("RGBA") + changed = ImageChops.difference(plain, badged).convert("L").getbbox() + assert changed is not None and changed[3] <= canvas * 0.25 + 3, (name, changed) + + light, dark = manifest_fills(stable) + assert light == (1.0, 1.0, 1.0) and max(dark) < 0.1 + for package, low, high in ((canary, 0.10, 0.18), (commit, -0.05, 0.05)): + light, dark = manifest_fills(package) + for fill, dark_fill in ((light, False), (dark, True)): + hue, saturation, value = colorsys.rgb_to_hsv(*fill) + hue = hue - 1 if hue > 0.5 else hue # red straddles the hue wrap + assert low < hue < high and saturation > 0.6, (package, fill) + assert (value < 0.4) if dark_fill else (value > 0.8), (package, fill) + + @pytest.mark.parametrize("tag,commit", [ ("", "abcdef0"), ("", "a" * 41), ("", "A" * 40), ("", "a" * 39 + "g"), ("", "a" * 40 + "\n"),