From a48518feda00d518949f9eecdbf661201e02e6a4 Mon Sep 17 00:00:00 2001 From: Edward Tan Date: Wed, 21 Oct 2026 15:21:06 +0800 Subject: [PATCH 1/2] feat: apply approved OctoSense icon family with local overrides Ship 28 original SVG replacements and the original Rinx PNG, including the C5 Night rose Browser compass. Apply explicit OctoSense app-ID overrides while preserving unowned upstream icons and third-party artwork, with shared platform framing and validation evidence. --- README.md | 6 + README.zh-CN.md | 2 + apps/README.md | 13 +- apps/README.zh-CN.md | 4 +- apps/calendar/bundle/icon.svg | 1 + apps/calendar/bundle/manifest.json | 2 +- apps/mail/bundle/icon.svg | 1 + apps/mail/bundle/manifest.json | 2 +- crates/shell/examples/icon_shapes.rs | 23 +- .../resources/icons/apps/family/appcard.svg | 1 + .../resources/icons/apps/family/browser.svg | 1 + .../icons/apps/family/calculator.svg | 1 + .../resources/icons/apps/family/calendar.svg | 1 + .../resources/icons/apps/family/clock.svg | 1 + .../shell/resources/icons/apps/family/fab.svg | 1 + .../resources/icons/apps/family/fabric.svg | 1 + .../resources/icons/apps/family/files.svg | 1 + .../resources/icons/apps/family/finance.svg | 1 + .../resources/icons/apps/family/image.svg | 1 + .../resources/icons/apps/family/mail.svg | 1 + .../resources/icons/apps/family/mixer.svg | 1 + .../resources/icons/apps/family/notes.svg | 1 + .../resources/icons/apps/family/octoscode.svg | 1 + .../icons/apps/family/omarchy/appcard.svg | 1 + .../icons/apps/family/omarchy/browser.svg | 1 + .../icons/apps/family/omarchy/calculator.svg | 1 + .../icons/apps/family/omarchy/calendar.svg | 1 + .../icons/apps/family/omarchy/clock.svg | 1 + .../icons/apps/family/omarchy/fab.svg | 1 + .../icons/apps/family/omarchy/fabric.svg | 1 + .../icons/apps/family/omarchy/files.svg | 1 + .../icons/apps/family/omarchy/finance.svg | 1 + .../icons/apps/family/omarchy/image.svg | 1 + .../icons/apps/family/omarchy/mail.svg | 1 + .../icons/apps/family/omarchy/mixer.svg | 1 + .../icons/apps/family/omarchy/notes.svg | 1 + .../icons/apps/family/omarchy/octoscode.svg | 1 + .../icons/apps/family/omarchy/pdf.svg | 1 + .../icons/apps/family/omarchy/reference.svg | 1 + .../icons/apps/family/omarchy/reminders.svg | 1 + .../icons/apps/family/omarchy/route.svg | 1 + .../icons/apps/family/omarchy/score.svg | 1 + .../icons/apps/family/omarchy/settings.svg | 1 + .../icons/apps/family/omarchy/sheets.svg | 1 + .../icons/apps/family/omarchy/studio.svg | 1 + .../icons/apps/family/omarchy/task.svg | 1 + .../icons/apps/family/omarchy/terminal.svg | 1 + .../icons/apps/family/omarchy/updater.svg | 1 + .../icons/apps/family/omarchy/video.svg | 1 + .../icons/apps/family/omarchy/vj.svg | 1 + .../icons/apps/family/omarchy/weather.svg | 1 + .../shell/resources/icons/apps/family/pdf.svg | 1 + .../resources/icons/apps/family/reference.svg | 1 + .../resources/icons/apps/family/reminders.svg | 1 + .../apps/family/rinx-attribution/LICENSE | 202 ++++++ .../apps/family/rinx-attribution/LICENSE-MIT | 9 + .../icons/apps/family/rinx-attribution/NOTICE | 24 + .../family/rinx-attribution/provenance.json | 12 + .../resources/icons/apps/family/rinx.png | Bin 0 -> 170004 bytes .../resources/icons/apps/family/route.svg | 1 + .../resources/icons/apps/family/score.svg | 1 + .../resources/icons/apps/family/settings.svg | 1 + .../resources/icons/apps/family/sheets.svg | 1 + .../resources/icons/apps/family/studio.svg | 1 + .../resources/icons/apps/family/task.svg | 1 + .../resources/icons/apps/family/terminal.svg | 1 + .../resources/icons/apps/family/updater.svg | 1 + .../resources/icons/apps/family/video.svg | 1 + .../shell/resources/icons/apps/family/vj.svg | 1 + .../resources/icons/apps/family/weather.svg | 1 + crates/shell/src/apps.rs | 7 + crates/shell/src/octosense/icon_family.rs | 81 +++ crates/shell/src/octosense/icon_frame.rs | 19 +- crates/shell/src/octosense/mod.rs | 1 + crates/shell/src/octosense/style.rs | 94 ++- docs/design/icon-family/README.md | 240 +++++++ docs/design/icon-family/README.zh-CN.md | 192 ++++++ docs/design/icon-family/assets/appcard.svg | 1 + docs/design/icon-family/assets/browser.svg | 1 + docs/design/icon-family/assets/calculator.svg | 1 + docs/design/icon-family/assets/calendar.svg | 1 + docs/design/icon-family/assets/clock.svg | 1 + docs/design/icon-family/assets/fab.svg | 1 + docs/design/icon-family/assets/fabric.svg | 1 + docs/design/icon-family/assets/files.svg | 1 + docs/design/icon-family/assets/finance.svg | 1 + docs/design/icon-family/assets/image.svg | 1 + docs/design/icon-family/assets/mail.svg | 1 + docs/design/icon-family/assets/mixer.svg | 1 + docs/design/icon-family/assets/notes.svg | 1 + docs/design/icon-family/assets/octoscode.svg | 1 + docs/design/icon-family/assets/pdf.svg | 1 + docs/design/icon-family/assets/reference.svg | 1 + docs/design/icon-family/assets/reminders.svg | 1 + docs/design/icon-family/assets/rinx.png | Bin 0 -> 170004 bytes docs/design/icon-family/assets/route.svg | 1 + docs/design/icon-family/assets/score.svg | 1 + docs/design/icon-family/assets/settings.svg | 1 + docs/design/icon-family/assets/sheets.svg | 1 + docs/design/icon-family/assets/studio.svg | 1 + docs/design/icon-family/assets/task.svg | 1 + docs/design/icon-family/assets/terminal.svg | 1 + docs/design/icon-family/assets/updater.svg | 1 + docs/design/icon-family/assets/video.svg | 1 + docs/design/icon-family/assets/vj.svg | 1 + docs/design/icon-family/assets/weather.svg | 1 + docs/design/icon-family/before-after.png | Bin 0 -> 178694 bytes docs/design/icon-family/before-after.svg | 1 + .../browser-alternatives/README.md | 39 ++ .../browser-alternatives/README.zh-CN.md | 30 + .../browser-alternatives/a-open-globe.svg | 1 + .../browser-alternatives/b-browser-window.svg | 1 + .../icon-family/browser-alternatives/build.py | 126 ++++ .../browser-alternatives/c-orbit.svg | 1 + .../browser-alternatives/comparison.png | Bin 0 -> 128190 bytes .../browser-alternatives/comparison.svg | 1 + .../compass-variations/README.md | 61 ++ .../compass-variations/README.zh-CN.md | 42 ++ .../compass-variations/build.py | 49 ++ .../compass-variations/c1-essential.svg | 1 + .../compass-variations/c2-mint-rim.svg | 1 + .../compass-variations/c3-compass-rose.svg | 1 + .../compass-variations/c4-night-dial.svg | 1 + .../compass-variations/c5-night-rose.svg | 1 + .../compass-variations/comparison.png | Bin 0 -> 133152 bytes .../compass-variations/comparison.svg | 1 + .../compass-variations/night-rose-preview.png | Bin 0 -> 97491 bytes .../compass-variations/night-rose-preview.svg | 1 + .../compass-variations/night-rose.py | 72 ++ .../browser-alternatives/d-linked-tabs.svg | 1 + .../browser-alternatives/set-2/README.md | 32 + .../set-2/README.zh-CN.md | 24 + .../browser-alternatives/set-2/build.py | 49 ++ .../browser-alternatives/set-2/comparison.png | Bin 0 -> 129668 bytes .../browser-alternatives/set-2/comparison.svg | 1 + .../browser-alternatives/set-2/e-compass.svg | 1 + .../set-2/f-world-pointer.svg | 1 + .../browser-alternatives/set-2/g-sail.svg | 1 + .../set-2/h-search-lens.svg | 1 + docs/design/icon-family/evidence/default.png | Bin 0 -> 116217 bytes docs/design/icon-family/evidence/family-0.png | Bin 0 -> 133322 bytes docs/design/icon-family/evidence/family-1.png | Bin 0 -> 153774 bytes docs/design/icon-family/evidence/family-2.png | Bin 0 -> 124480 bytes docs/design/icon-family/evidence/family-3.png | Bin 0 -> 154915 bytes .../icon-family/evidence/validation.json | 32 + docs/design/icon-family/family-optional.png | Bin 0 -> 170738 bytes docs/design/icon-family/family-optional.svg | 1 + docs/design/icon-family/family-primary.png | Bin 0 -> 237191 bytes docs/design/icon-family/family-primary.svg | 1 + .../implementation-validation.json | 425 ++++++++++++ docs/design/icon-family/inventory.json | 376 ++++++++++ docs/design/icon-family/platform-review.png | Bin 0 -> 623518 bytes docs/design/icon-family/platform-review.svg | 1 + .../icon-family/references/rinx/LICENSE | 202 ++++++ .../icon-family/references/rinx/LICENSE-MIT | 9 + .../design/icon-family/references/rinx/NOTICE | 24 + .../icon-family/references/rinx/icon_128.png | Bin 0 -> 9399 bytes .../references/rinx/provenance.json | 17 + docs/design/icon-family/revised-icons.png | Bin 0 -> 46085 bytes docs/design/icon-family/revised-icons.svg | 1 + docs/design/icon-family/validation.json | 315 +++++++++ .../2026-10-15-icon-family-implementation.md | 16 + docs/plans/2026-10-21-icon-overrides.md | 34 + tools/build_icon_family.py | 651 ++++++++++++++++++ tools/check_icon_family_preview.py | 141 ++++ 165 files changed, 3788 insertions(+), 19 deletions(-) create mode 100644 apps/calendar/bundle/icon.svg create mode 100644 apps/mail/bundle/icon.svg create mode 100644 crates/shell/resources/icons/apps/family/appcard.svg create mode 100644 crates/shell/resources/icons/apps/family/browser.svg create mode 100644 crates/shell/resources/icons/apps/family/calculator.svg create mode 100644 crates/shell/resources/icons/apps/family/calendar.svg create mode 100644 crates/shell/resources/icons/apps/family/clock.svg create mode 100644 crates/shell/resources/icons/apps/family/fab.svg create mode 100644 crates/shell/resources/icons/apps/family/fabric.svg create mode 100644 crates/shell/resources/icons/apps/family/files.svg create mode 100644 crates/shell/resources/icons/apps/family/finance.svg create mode 100644 crates/shell/resources/icons/apps/family/image.svg create mode 100644 crates/shell/resources/icons/apps/family/mail.svg create mode 100644 crates/shell/resources/icons/apps/family/mixer.svg create mode 100644 crates/shell/resources/icons/apps/family/notes.svg create mode 100644 crates/shell/resources/icons/apps/family/octoscode.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/appcard.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/browser.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/calculator.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/calendar.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/clock.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/fab.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/fabric.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/files.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/finance.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/image.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/mail.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/mixer.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/notes.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/octoscode.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/pdf.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/reference.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/reminders.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/route.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/score.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/settings.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/sheets.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/studio.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/task.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/terminal.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/updater.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/video.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/vj.svg create mode 100644 crates/shell/resources/icons/apps/family/omarchy/weather.svg create mode 100644 crates/shell/resources/icons/apps/family/pdf.svg create mode 100644 crates/shell/resources/icons/apps/family/reference.svg create mode 100644 crates/shell/resources/icons/apps/family/reminders.svg create mode 100644 crates/shell/resources/icons/apps/family/rinx-attribution/LICENSE create mode 100644 crates/shell/resources/icons/apps/family/rinx-attribution/LICENSE-MIT create mode 100644 crates/shell/resources/icons/apps/family/rinx-attribution/NOTICE create mode 100644 crates/shell/resources/icons/apps/family/rinx-attribution/provenance.json create mode 100644 crates/shell/resources/icons/apps/family/rinx.png create mode 100644 crates/shell/resources/icons/apps/family/route.svg create mode 100644 crates/shell/resources/icons/apps/family/score.svg create mode 100644 crates/shell/resources/icons/apps/family/settings.svg create mode 100644 crates/shell/resources/icons/apps/family/sheets.svg create mode 100644 crates/shell/resources/icons/apps/family/studio.svg create mode 100644 crates/shell/resources/icons/apps/family/task.svg create mode 100644 crates/shell/resources/icons/apps/family/terminal.svg create mode 100644 crates/shell/resources/icons/apps/family/updater.svg create mode 100644 crates/shell/resources/icons/apps/family/video.svg create mode 100644 crates/shell/resources/icons/apps/family/vj.svg create mode 100644 crates/shell/resources/icons/apps/family/weather.svg create mode 100644 crates/shell/src/octosense/icon_family.rs create mode 100644 docs/design/icon-family/README.md create mode 100644 docs/design/icon-family/README.zh-CN.md create mode 100644 docs/design/icon-family/assets/appcard.svg create mode 100644 docs/design/icon-family/assets/browser.svg create mode 100644 docs/design/icon-family/assets/calculator.svg create mode 100644 docs/design/icon-family/assets/calendar.svg create mode 100644 docs/design/icon-family/assets/clock.svg create mode 100644 docs/design/icon-family/assets/fab.svg create mode 100644 docs/design/icon-family/assets/fabric.svg create mode 100644 docs/design/icon-family/assets/files.svg create mode 100644 docs/design/icon-family/assets/finance.svg create mode 100644 docs/design/icon-family/assets/image.svg create mode 100644 docs/design/icon-family/assets/mail.svg create mode 100644 docs/design/icon-family/assets/mixer.svg create mode 100644 docs/design/icon-family/assets/notes.svg create mode 100644 docs/design/icon-family/assets/octoscode.svg create mode 100644 docs/design/icon-family/assets/pdf.svg create mode 100644 docs/design/icon-family/assets/reference.svg create mode 100644 docs/design/icon-family/assets/reminders.svg create mode 100644 docs/design/icon-family/assets/rinx.png create mode 100644 docs/design/icon-family/assets/route.svg create mode 100644 docs/design/icon-family/assets/score.svg create mode 100644 docs/design/icon-family/assets/settings.svg create mode 100644 docs/design/icon-family/assets/sheets.svg create mode 100644 docs/design/icon-family/assets/studio.svg create mode 100644 docs/design/icon-family/assets/task.svg create mode 100644 docs/design/icon-family/assets/terminal.svg create mode 100644 docs/design/icon-family/assets/updater.svg create mode 100644 docs/design/icon-family/assets/video.svg create mode 100644 docs/design/icon-family/assets/vj.svg create mode 100644 docs/design/icon-family/assets/weather.svg create mode 100644 docs/design/icon-family/before-after.png create mode 100644 docs/design/icon-family/before-after.svg create mode 100644 docs/design/icon-family/browser-alternatives/README.md create mode 100644 docs/design/icon-family/browser-alternatives/README.zh-CN.md create mode 100644 docs/design/icon-family/browser-alternatives/a-open-globe.svg create mode 100644 docs/design/icon-family/browser-alternatives/b-browser-window.svg create mode 100644 docs/design/icon-family/browser-alternatives/build.py create mode 100644 docs/design/icon-family/browser-alternatives/c-orbit.svg create mode 100644 docs/design/icon-family/browser-alternatives/comparison.png create mode 100644 docs/design/icon-family/browser-alternatives/comparison.svg create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/README.md create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/README.zh-CN.md create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/build.py create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/c1-essential.svg create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/c2-mint-rim.svg create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/c3-compass-rose.svg create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/c4-night-dial.svg create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/c5-night-rose.svg create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/comparison.png create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/comparison.svg create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/night-rose-preview.png create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/night-rose-preview.svg create mode 100644 docs/design/icon-family/browser-alternatives/compass-variations/night-rose.py create mode 100644 docs/design/icon-family/browser-alternatives/d-linked-tabs.svg create mode 100644 docs/design/icon-family/browser-alternatives/set-2/README.md create mode 100644 docs/design/icon-family/browser-alternatives/set-2/README.zh-CN.md create mode 100644 docs/design/icon-family/browser-alternatives/set-2/build.py create mode 100644 docs/design/icon-family/browser-alternatives/set-2/comparison.png create mode 100644 docs/design/icon-family/browser-alternatives/set-2/comparison.svg create mode 100644 docs/design/icon-family/browser-alternatives/set-2/e-compass.svg create mode 100644 docs/design/icon-family/browser-alternatives/set-2/f-world-pointer.svg create mode 100644 docs/design/icon-family/browser-alternatives/set-2/g-sail.svg create mode 100644 docs/design/icon-family/browser-alternatives/set-2/h-search-lens.svg create mode 100644 docs/design/icon-family/evidence/default.png create mode 100644 docs/design/icon-family/evidence/family-0.png create mode 100644 docs/design/icon-family/evidence/family-1.png create mode 100644 docs/design/icon-family/evidence/family-2.png create mode 100644 docs/design/icon-family/evidence/family-3.png create mode 100644 docs/design/icon-family/evidence/validation.json create mode 100644 docs/design/icon-family/family-optional.png create mode 100644 docs/design/icon-family/family-optional.svg create mode 100644 docs/design/icon-family/family-primary.png create mode 100644 docs/design/icon-family/family-primary.svg create mode 100644 docs/design/icon-family/implementation-validation.json create mode 100644 docs/design/icon-family/inventory.json create mode 100644 docs/design/icon-family/platform-review.png create mode 100644 docs/design/icon-family/platform-review.svg create mode 100644 docs/design/icon-family/references/rinx/LICENSE create mode 100644 docs/design/icon-family/references/rinx/LICENSE-MIT create mode 100644 docs/design/icon-family/references/rinx/NOTICE create mode 100644 docs/design/icon-family/references/rinx/icon_128.png create mode 100644 docs/design/icon-family/references/rinx/provenance.json create mode 100644 docs/design/icon-family/revised-icons.png create mode 100644 docs/design/icon-family/revised-icons.svg create mode 100644 docs/design/icon-family/validation.json create mode 100644 docs/plans/2026-10-15-icon-family-implementation.md create mode 100644 docs/plans/2026-10-21-icon-overrides.md create mode 100644 tools/build_icon_family.py create mode 100644 tools/check_icon_family_preview.py diff --git a/README.md b/README.md index bf5bdfe2d..23ebec492 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,12 @@ The script apps share [responsive, theme-aware interface styles](apps/README.md# across desktop and phone. [Local native UX checks](tools/app-ux/README.md) cover saved state and actual interaction; phone-size previews remain separate from device acceptance. +The [icon design system](docs/design/icon-family/README.md) defines a shared +visual language and provides 28 SVG replacements plus the original Rinx icon, with before/after and size +reviews. The approved icons are connected to the shared shell and system +bundles in source builds, including Browser's C5 Night rose compass. A local +catalog overlay keeps Makepad's icon files untouched and preserves new upstream identities. + | Product | What it is | Where | | --- | --- | --- | | **OctoSense desktop** | The shell as one Makepad window on macOS, Windows or Linux; platform requirements and validation are recorded in the release notes | [`desktop/`](desktop/README.md) | diff --git a/README.zh-CN.md b/README.zh-CN.md index f84fa73ca..5ffa54590 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -22,6 +22,8 @@ OctoSense 是运行在普通操作系统之上的 Agent Shell。从屏幕上看 脚本应用在桌面和手机端共用[自适应主题与布局](apps/README.zh-CN.md#共用外观)。[本机原生 UX 检查](tools/app-ux/README.zh-CN.md)验证真实交互和保存状态;手机尺寸预览与真机验收分别记录。 +[图标设计规范](docs/design/icon-family/README.zh-CN.md)定义共用的视觉语言,并提供 28 个 SVG 替换图标与 Rinx 原始图标,附前后对比、尺寸检查图。批准的图标已接入源码构建的共享 Shell 及系统应用包,包括浏览器的 C5 夜色罗盘。本地图标覆盖层保持 Makepad 图标文件原样,并保留上游新增的应用身份。 + | 产品 | 是什么 | 位置 | | --- | --- | --- | | **OctoSense 桌面端** | 在 macOS、Windows 或 Linux 上作为一个 Makepad 窗口运行的 Shell;各平台要求和验收范围见发行说明 | [`desktop/`](desktop/README.zh-CN.md) | diff --git a/apps/README.md b/apps/README.md index a895c14b2..3ff06bc93 100644 --- a/apps/README.md +++ b/apps/README.md @@ -249,8 +249,10 @@ See [capabilities and execution boundaries](../docs/capabilities.md). engine" and keep the draft; `writer/tests/ui.py` runs every screen there, light and dark (see Writer's tests, below). Writer is desktop only, so there is no phone run. -- Camera and AI providers ship PNG launcher artwork; YouTube, Quick Deck and - Writer ship SVG artwork. The shell frames bundle icons for the selected platform style. +- Camera and AI providers ship PNG launcher artwork; Mail, Calendar, YouTube, + Quick Deck, PDF Tools and Writer ship SVG artwork. The shell frames bundle + icons for the selected platform style. Native and optional app identities + use the [approved icon family](../docs/design/icon-family/README.md). ## How the shells pack them @@ -408,6 +410,13 @@ switching styles updates installed icons too. Review Android, macOS and iOS at launcher and badge sizes, on light and dark backgrounds. The shell's icon-frame/style tests run in the Phone workflow. +OctoSense's [approved family](../docs/design/icon-family/README.md), including +Browser's C5 Night rose compass, overlays the Makepad catalog by explicit app ID +in `crates/shell/src/octosense/icon_family.rs`. These local replacements win over +system bundle icons in every style. Other bundles and installed `hub:` apps keep +their own artwork. Keep replacement assets under the shared shell's resources; +updating Makepad must not require editing its theme icons or reapplying an icon patch. + For a visual regression check, build the `icon_shapes` example from `phone/` with `mobile-apps`. Run it with an isolated `OCTOSENSE_HOME`, hidden windows and the Makepad remote control surface (see the root `AGENTS.md`). It shows diff --git a/apps/README.zh-CN.md b/apps/README.zh-CN.md index 57f923036..a227730cd 100644 --- a/apps/README.zh-CN.md +++ b/apps/README.zh-CN.md @@ -191,7 +191,7 @@ WebView 页面、图库导出、邮件、新闻、Glance 或单次模型调用 切换后输入的文字也被保留并保存。`card-host` 没有 `word` 服务,保存和预览在那里回答 “Writer can't … here: this device has no word engine”并保留草稿;`writer/tests/ui.py` 在那里以浅色和深色运行 每个界面(见下文的 Writer 的测试)。Writer 只在桌面端,所以没有手机上的运行。 -- Camera 和 AI providers 自带 PNG 启动器图案,YouTube、Quick Deck 和 Writer 自带 SVG 图案;Shell 按当前平台风格统一绘制外形。 +- Camera 和 AI providers 自带 PNG 启动器图案,Mail、Calendar、YouTube、Quick Deck、PDF Tools 和 Writer 自带 SVG 图案;Shell 按当前平台风格统一绘制外形。原生和可选应用使用[已批准的图标家族](../docs/design/icon-family/README.zh-CN.md)。 ## Shell 如何打包它们 @@ -330,6 +330,8 @@ PNG/SVG 在绘制时使用同一外框策略,因此切换风格也会更新已 图标。检查 Android、macOS、iOS 风格下的启动器和小标识尺寸,以及明暗 背景。外框和风格回归测试随 Phone 工作流执行。 +OctoSense 的[已批准图标家族](../docs/design/icon-family/README.zh-CN.md)(包括浏览器的 C5 夜色罗盘)通过 `crates/shell/src/octosense/icon_family.rs` 中的明确应用 ID 覆盖 Makepad 图标目录。这些本地替换在所有样式下均优先于系统应用包图标;其他应用包及已安装的 `hub:` 应用保留自己的图案。替换资源放在共享 Shell 的资源目录中;更新 Makepad 不应需要修改其主题图标或重新应用图标补丁。 + 需要视觉回归检查时,在 `phone/` 中启用 `mobile-apps` 构建 `icon_shapes` 示例。使用隔离的 `OCTOSENSE_HOME`、隐藏窗口和 Makepad 远程控制接口运行 (参见根目录 `AGENTS.md`)。示例覆盖七种风格、内置和商店 PNG/SVG 图案、 diff --git a/apps/calendar/bundle/icon.svg b/apps/calendar/bundle/icon.svg new file mode 100644 index 000000000..f970951ed --- /dev/null +++ b/apps/calendar/bundle/icon.svg @@ -0,0 +1 @@ +Calendar diff --git a/apps/calendar/bundle/manifest.json b/apps/calendar/bundle/manifest.json index 0155da1a3..399d7996e 100644 --- a/apps/calendar/bundle/manifest.json +++ b/apps/calendar/bundle/manifest.json @@ -1,7 +1,7 @@ { "schema": 1, "id": "os.calendar", - "version": "1.0.0", + "version": "1.0.1", "name": "Calendar", "integrity": { "bundle_blake3": "" diff --git a/apps/mail/bundle/icon.svg b/apps/mail/bundle/icon.svg new file mode 100644 index 000000000..2ef0835b8 --- /dev/null +++ b/apps/mail/bundle/icon.svg @@ -0,0 +1 @@ +Mail diff --git a/apps/mail/bundle/manifest.json b/apps/mail/bundle/manifest.json index e66085aa9..65d8e77b8 100644 --- a/apps/mail/bundle/manifest.json +++ b/apps/mail/bundle/manifest.json @@ -1,7 +1,7 @@ { "schema": 1, "id": "os.mail", - "version": "1.0.0", + "version": "1.0.1", "name": "Mail", "integrity": { "bundle_blake3": "" diff --git a/crates/shell/examples/icon_shapes.rs b/crates/shell/examples/icon_shapes.rs index dc9cd5fbb..1d4636ee1 100644 --- a/crates/shell/examples/icon_shapes.rs +++ b/crates/shell/examples/icon_shapes.rs @@ -1,5 +1,6 @@ //! Visual regression sheet using the production shell renderer. //! Run from phone/ with mobile-apps so Camera is in the bundled catalog. +//! --family-page=0 through 3 reviews the approved family through this same renderer. pub use makepad_widgets; use makepad_widgets::*; use octosense_shell::octosense::style::{AppIconDraw, DesktopStyle}; @@ -41,7 +42,7 @@ impl AppMain for App { let root = std::env::var_os("OCTOSENSE_HOME").expect("set an isolated OCTOSENSE_HOME for this preview"); let root = std::path::PathBuf::from(root).join("icon-fixtures"); for (id, icon) in [("shape-svg", "icon.svg"), ("shape-png", "icon.png")] { - let bundle = root.join(id).join("bundle"); + let bundle = octosense_app_hub::installed_bundle_dir(&root, id); std::fs::create_dir_all(&bundle).unwrap(); std::fs::write(bundle.join("listing.json"), serde_json::json!({ "schema":1, "description":"Icon shape regression fixture", "category":"utilities", @@ -83,7 +84,7 @@ impl Widget for IconSheet { fn draw_walk(&mut self, cx: &mut Cx2d, _: &mut Scope, walk: Walk) -> DrawStep { let canvas = cx.walk_turtle(walk); self.background.draw_abs(cx, canvas); - let names = ["photos", "apphub", "assistant", "camera", "ai-providers", "youtube", "hub:shape-svg", "hub:shape-png"]; + let names = preview_names(); for (row, style) in [DesktopStyle::Android, DesktopStyle::Macos, DesktopStyle::Ios, DesktopStyle::Windows, DesktopStyle::NextStep, DesktopStyle::Omarchy, DesktopStyle::Windows2000].into_iter().enumerate() { let y = canvas.pos.y + 32. + row as f64 * 120.; @@ -93,10 +94,26 @@ impl Widget for IconSheet { if row == 0 { self.text.draw_abs(cx, dvec2(x - 8., canvas.pos.y + 8.), name.strip_prefix("hub:").unwrap_or(name)); } for (size, dx, dy) in [(64., 0., 0.), (24., 0., 74.), (24., 34., 74.)] { self.icons.draw(cx, name, style, Rect { pos: dvec2(x + dx, y + dy), size: dvec2(size, size) }, - if dx > 0. {0.5} else {1.}, vec4(0.9, 0.94, 1., 1.)); + if dx > 0. {0.5} else {1.}, + if dy > 0. {vec4(0.14, 0.19, 0.27, 1.)} else {vec4(0.9, 0.94, 1., 1.)}); } } } DrawStep::done() } } + +fn preview_names() -> [&'static str; 8] { + static NAMES: std::sync::OnceLock<[&'static str; 8]> = std::sync::OnceLock::new(); + *NAMES.get_or_init(|| { + let pages = [ + ["mail", "calendar", "calculator", "clock", "notes", "reminders", "weather", "sheets"], + ["settings", "updater", "terminal", "octoscode", "rinx", "reference", "appcard", "browser"], + ["files", "task", "finance", "route", "image", "pdf", "mixer", "fabric"], + ["score", "video", "vj", "fab", "studio", "photos", "apphub", "assistant"], + ]; + let page = std::env::args().find_map(|arg| arg.strip_prefix("--family-page=").and_then(|n| n.parse::().ok())); + page.map(|n| *pages.get(n).expect("family page must be 0 through 3")) + .unwrap_or(["photos", "apphub", "assistant", "camera", "ai-providers", "youtube", "hub:shape-svg", "hub:shape-png"]) + }) +} diff --git a/crates/shell/resources/icons/apps/family/appcard.svg b/crates/shell/resources/icons/apps/family/appcard.svg new file mode 100644 index 000000000..3fef290bf --- /dev/null +++ b/crates/shell/resources/icons/apps/family/appcard.svg @@ -0,0 +1 @@ +AppCard diff --git a/crates/shell/resources/icons/apps/family/browser.svg b/crates/shell/resources/icons/apps/family/browser.svg new file mode 100644 index 000000000..c628da844 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/browser.svg @@ -0,0 +1 @@ +Browser diff --git a/crates/shell/resources/icons/apps/family/calculator.svg b/crates/shell/resources/icons/apps/family/calculator.svg new file mode 100644 index 000000000..738b97964 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/calculator.svg @@ -0,0 +1 @@ +Calculator diff --git a/crates/shell/resources/icons/apps/family/calendar.svg b/crates/shell/resources/icons/apps/family/calendar.svg new file mode 100644 index 000000000..f970951ed --- /dev/null +++ b/crates/shell/resources/icons/apps/family/calendar.svg @@ -0,0 +1 @@ +Calendar diff --git a/crates/shell/resources/icons/apps/family/clock.svg b/crates/shell/resources/icons/apps/family/clock.svg new file mode 100644 index 000000000..6762addb2 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/clock.svg @@ -0,0 +1 @@ +Clock diff --git a/crates/shell/resources/icons/apps/family/fab.svg b/crates/shell/resources/icons/apps/family/fab.svg new file mode 100644 index 000000000..f9419d533 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/fab.svg @@ -0,0 +1 @@ +Fab diff --git a/crates/shell/resources/icons/apps/family/fabric.svg b/crates/shell/resources/icons/apps/family/fabric.svg new file mode 100644 index 000000000..9bd71b469 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/fabric.svg @@ -0,0 +1 @@ +Fabric diff --git a/crates/shell/resources/icons/apps/family/files.svg b/crates/shell/resources/icons/apps/family/files.svg new file mode 100644 index 000000000..05f0172ba --- /dev/null +++ b/crates/shell/resources/icons/apps/family/files.svg @@ -0,0 +1 @@ +Files diff --git a/crates/shell/resources/icons/apps/family/finance.svg b/crates/shell/resources/icons/apps/family/finance.svg new file mode 100644 index 000000000..dd2216e77 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/finance.svg @@ -0,0 +1 @@ +Finance diff --git a/crates/shell/resources/icons/apps/family/image.svg b/crates/shell/resources/icons/apps/family/image.svg new file mode 100644 index 000000000..a893d8490 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/image.svg @@ -0,0 +1 @@ +Image Viewer diff --git a/crates/shell/resources/icons/apps/family/mail.svg b/crates/shell/resources/icons/apps/family/mail.svg new file mode 100644 index 000000000..2ef0835b8 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/mail.svg @@ -0,0 +1 @@ +Mail diff --git a/crates/shell/resources/icons/apps/family/mixer.svg b/crates/shell/resources/icons/apps/family/mixer.svg new file mode 100644 index 000000000..bbd670b30 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/mixer.svg @@ -0,0 +1 @@ +Mixer diff --git a/crates/shell/resources/icons/apps/family/notes.svg b/crates/shell/resources/icons/apps/family/notes.svg new file mode 100644 index 000000000..35b29f765 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/notes.svg @@ -0,0 +1 @@ +Notes diff --git a/crates/shell/resources/icons/apps/family/octoscode.svg b/crates/shell/resources/icons/apps/family/octoscode.svg new file mode 100644 index 000000000..fe9df68c3 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/octoscode.svg @@ -0,0 +1 @@ +OctosCode diff --git a/crates/shell/resources/icons/apps/family/omarchy/appcard.svg b/crates/shell/resources/icons/apps/family/omarchy/appcard.svg new file mode 100644 index 000000000..8828d67ac --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/appcard.svg @@ -0,0 +1 @@ +AppCard diff --git a/crates/shell/resources/icons/apps/family/omarchy/browser.svg b/crates/shell/resources/icons/apps/family/omarchy/browser.svg new file mode 100644 index 000000000..d15fb73ac --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/browser.svg @@ -0,0 +1 @@ +Browser diff --git a/crates/shell/resources/icons/apps/family/omarchy/calculator.svg b/crates/shell/resources/icons/apps/family/omarchy/calculator.svg new file mode 100644 index 000000000..c7bf2bc0a --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/calculator.svg @@ -0,0 +1 @@ +Calculator diff --git a/crates/shell/resources/icons/apps/family/omarchy/calendar.svg b/crates/shell/resources/icons/apps/family/omarchy/calendar.svg new file mode 100644 index 000000000..e70f61d2c --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/calendar.svg @@ -0,0 +1 @@ +Calendar diff --git a/crates/shell/resources/icons/apps/family/omarchy/clock.svg b/crates/shell/resources/icons/apps/family/omarchy/clock.svg new file mode 100644 index 000000000..c6afc6868 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/clock.svg @@ -0,0 +1 @@ +Clock diff --git a/crates/shell/resources/icons/apps/family/omarchy/fab.svg b/crates/shell/resources/icons/apps/family/omarchy/fab.svg new file mode 100644 index 000000000..0b5377b67 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/fab.svg @@ -0,0 +1 @@ +Fab diff --git a/crates/shell/resources/icons/apps/family/omarchy/fabric.svg b/crates/shell/resources/icons/apps/family/omarchy/fabric.svg new file mode 100644 index 000000000..9f370810a --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/fabric.svg @@ -0,0 +1 @@ +Fabric diff --git a/crates/shell/resources/icons/apps/family/omarchy/files.svg b/crates/shell/resources/icons/apps/family/omarchy/files.svg new file mode 100644 index 000000000..e3858f9ca --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/files.svg @@ -0,0 +1 @@ +Files diff --git a/crates/shell/resources/icons/apps/family/omarchy/finance.svg b/crates/shell/resources/icons/apps/family/omarchy/finance.svg new file mode 100644 index 000000000..20eb8e20d --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/finance.svg @@ -0,0 +1 @@ +Finance diff --git a/crates/shell/resources/icons/apps/family/omarchy/image.svg b/crates/shell/resources/icons/apps/family/omarchy/image.svg new file mode 100644 index 000000000..4f7768f0f --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/image.svg @@ -0,0 +1 @@ +Image Viewer diff --git a/crates/shell/resources/icons/apps/family/omarchy/mail.svg b/crates/shell/resources/icons/apps/family/omarchy/mail.svg new file mode 100644 index 000000000..a888b7c9f --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/mail.svg @@ -0,0 +1 @@ +Mail diff --git a/crates/shell/resources/icons/apps/family/omarchy/mixer.svg b/crates/shell/resources/icons/apps/family/omarchy/mixer.svg new file mode 100644 index 000000000..1ab61ede2 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/mixer.svg @@ -0,0 +1 @@ +Mixer diff --git a/crates/shell/resources/icons/apps/family/omarchy/notes.svg b/crates/shell/resources/icons/apps/family/omarchy/notes.svg new file mode 100644 index 000000000..e5a409d8f --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/notes.svg @@ -0,0 +1 @@ +Notes diff --git a/crates/shell/resources/icons/apps/family/omarchy/octoscode.svg b/crates/shell/resources/icons/apps/family/omarchy/octoscode.svg new file mode 100644 index 000000000..49b68451e --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/octoscode.svg @@ -0,0 +1 @@ +OctosCode diff --git a/crates/shell/resources/icons/apps/family/omarchy/pdf.svg b/crates/shell/resources/icons/apps/family/omarchy/pdf.svg new file mode 100644 index 000000000..96089f7de --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/pdf.svg @@ -0,0 +1 @@ +PDF Viewer diff --git a/crates/shell/resources/icons/apps/family/omarchy/reference.svg b/crates/shell/resources/icons/apps/family/omarchy/reference.svg new file mode 100644 index 000000000..dada4f487 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/reference.svg @@ -0,0 +1 @@ +Reference diff --git a/crates/shell/resources/icons/apps/family/omarchy/reminders.svg b/crates/shell/resources/icons/apps/family/omarchy/reminders.svg new file mode 100644 index 000000000..b744fe70d --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/reminders.svg @@ -0,0 +1 @@ +Reminders diff --git a/crates/shell/resources/icons/apps/family/omarchy/route.svg b/crates/shell/resources/icons/apps/family/omarchy/route.svg new file mode 100644 index 000000000..e20141b17 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/route.svg @@ -0,0 +1 @@ +Route diff --git a/crates/shell/resources/icons/apps/family/omarchy/score.svg b/crates/shell/resources/icons/apps/family/omarchy/score.svg new file mode 100644 index 000000000..611122dc7 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/score.svg @@ -0,0 +1 @@ +Score diff --git a/crates/shell/resources/icons/apps/family/omarchy/settings.svg b/crates/shell/resources/icons/apps/family/omarchy/settings.svg new file mode 100644 index 000000000..3e3a60e46 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/settings.svg @@ -0,0 +1 @@ +Settings diff --git a/crates/shell/resources/icons/apps/family/omarchy/sheets.svg b/crates/shell/resources/icons/apps/family/omarchy/sheets.svg new file mode 100644 index 000000000..3ed67e7a4 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/sheets.svg @@ -0,0 +1 @@ +Sheets diff --git a/crates/shell/resources/icons/apps/family/omarchy/studio.svg b/crates/shell/resources/icons/apps/family/omarchy/studio.svg new file mode 100644 index 000000000..d624c3733 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/studio.svg @@ -0,0 +1 @@ +Director diff --git a/crates/shell/resources/icons/apps/family/omarchy/task.svg b/crates/shell/resources/icons/apps/family/omarchy/task.svg new file mode 100644 index 000000000..c520fcf64 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/task.svg @@ -0,0 +1 @@ +Task Manager diff --git a/crates/shell/resources/icons/apps/family/omarchy/terminal.svg b/crates/shell/resources/icons/apps/family/omarchy/terminal.svg new file mode 100644 index 000000000..03adc196f --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/terminal.svg @@ -0,0 +1 @@ +Terminal diff --git a/crates/shell/resources/icons/apps/family/omarchy/updater.svg b/crates/shell/resources/icons/apps/family/omarchy/updater.svg new file mode 100644 index 000000000..957fe55b7 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/updater.svg @@ -0,0 +1 @@ +OctoSense Updates diff --git a/crates/shell/resources/icons/apps/family/omarchy/video.svg b/crates/shell/resources/icons/apps/family/omarchy/video.svg new file mode 100644 index 000000000..f64370dcc --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/video.svg @@ -0,0 +1 @@ +Video Player diff --git a/crates/shell/resources/icons/apps/family/omarchy/vj.svg b/crates/shell/resources/icons/apps/family/omarchy/vj.svg new file mode 100644 index 000000000..bf04f1bd8 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/vj.svg @@ -0,0 +1 @@ +VJ diff --git a/crates/shell/resources/icons/apps/family/omarchy/weather.svg b/crates/shell/resources/icons/apps/family/omarchy/weather.svg new file mode 100644 index 000000000..9f0394645 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/omarchy/weather.svg @@ -0,0 +1 @@ +Weather diff --git a/crates/shell/resources/icons/apps/family/pdf.svg b/crates/shell/resources/icons/apps/family/pdf.svg new file mode 100644 index 000000000..3ba3ae7fa --- /dev/null +++ b/crates/shell/resources/icons/apps/family/pdf.svg @@ -0,0 +1 @@ +PDF Viewer diff --git a/crates/shell/resources/icons/apps/family/reference.svg b/crates/shell/resources/icons/apps/family/reference.svg new file mode 100644 index 000000000..0b06f1277 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/reference.svg @@ -0,0 +1 @@ +Reference diff --git a/crates/shell/resources/icons/apps/family/reminders.svg b/crates/shell/resources/icons/apps/family/reminders.svg new file mode 100644 index 000000000..ac8ea4481 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/reminders.svg @@ -0,0 +1 @@ +Reminders diff --git a/crates/shell/resources/icons/apps/family/rinx-attribution/LICENSE b/crates/shell/resources/icons/apps/family/rinx-attribution/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/rinx-attribution/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/crates/shell/resources/icons/apps/family/rinx-attribution/LICENSE-MIT b/crates/shell/resources/icons/apps/family/rinx-attribution/LICENSE-MIT new file mode 100644 index 000000000..7f77de13d --- /dev/null +++ b/crates/shell/resources/icons/apps/family/rinx-attribution/LICENSE-MIT @@ -0,0 +1,9 @@ +The MIT License (MIT) + +Copyright (c) 2023-2026 Project Robius Developers + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/crates/shell/resources/icons/apps/family/rinx-attribution/NOTICE b/crates/shell/resources/icons/apps/family/rinx-attribution/NOTICE new file mode 100644 index 000000000..ea0489236 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/rinx-attribution/NOTICE @@ -0,0 +1,24 @@ +Rinx +Copyright 2026 Rinx Contributors +https://github.com/upstreamlabs/Rinx + +Rinx is an independent derivative of Robrix and Robrix2, extracted from +OctoSense-org/robrix2's wechat-ui branch at commit +16913e0c6f0397b4ed1272b7dcd421935521d5f3. + +With gratitude to Kevin Boos, Project Robius, the Robrix2 contributors, +and all upstream contributors for their work on native Rust Matrix clients. + +Robrix: https://github.com/project-robius/robrix +Robrix2: https://github.com/Project-Robius-China/robrix2 +Copyright (c) 2023-2026 Project Robius Developers +The inherited MIT copyright and permission notice is preserved in LICENSE-MIT. + +Rinx is distributed under the Apache License, Version 2.0 (LICENSE). +Dependencies, copied components, fonts, artwork, and other third-party assets +retain their respective licenses and attribution requirements. See licenses/ +and crates/article-makepad/MAKEPAD-LICENSE.txt for retained notices. + +Rinx modifications include the WeChat-style UI, English/Chinese localization, +Matrix Moments, scoped mini-app and article-editor integration, native +makepad-html/Blitz previews, and the independent Rinx application identity. diff --git a/crates/shell/resources/icons/apps/family/rinx-attribution/provenance.json b/crates/shell/resources/icons/apps/family/rinx-attribution/provenance.json new file mode 100644 index 000000000..0e4fde5c6 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/rinx-attribution/provenance.json @@ -0,0 +1,12 @@ +{ + "repository": "https://github.com/hagency-org/Rinx.git", + "revision": "4b89097d8791a7190d01de1c576979c93df0013d", + "treatment": "Original upstream PNGs copied byte-for-byte; no recoloring or redraw.", + "files": [ + { + "source": "resources/icon_1024.png", + "local": "../rinx.png", + "sha256": "a5db71934b2fd2e8177637527db2d925c01bbe9bb046aecf0d2eddc5bef43329" + } + ] +} diff --git a/crates/shell/resources/icons/apps/family/rinx.png b/crates/shell/resources/icons/apps/family/rinx.png new file mode 100644 index 0000000000000000000000000000000000000000..8d9ea6bf86874b6499a3b3c371aacf0e6d64c291 GIT binary patch literal 170004 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

K?cxDPLz$z1!sXLZE~Pm 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

B#k~Mbp~TtE)xj}W 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 C3yviK literal 0 HcmV?d00001 diff --git a/crates/shell/resources/icons/apps/family/route.svg b/crates/shell/resources/icons/apps/family/route.svg new file mode 100644 index 000000000..1893e23e4 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/route.svg @@ -0,0 +1 @@ +Route diff --git a/crates/shell/resources/icons/apps/family/score.svg b/crates/shell/resources/icons/apps/family/score.svg new file mode 100644 index 000000000..72e55b66f --- /dev/null +++ b/crates/shell/resources/icons/apps/family/score.svg @@ -0,0 +1 @@ +Score diff --git a/crates/shell/resources/icons/apps/family/settings.svg b/crates/shell/resources/icons/apps/family/settings.svg new file mode 100644 index 000000000..36c3c56e9 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/settings.svg @@ -0,0 +1 @@ +Settings diff --git a/crates/shell/resources/icons/apps/family/sheets.svg b/crates/shell/resources/icons/apps/family/sheets.svg new file mode 100644 index 000000000..6df194ae1 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/sheets.svg @@ -0,0 +1 @@ +Sheets diff --git a/crates/shell/resources/icons/apps/family/studio.svg b/crates/shell/resources/icons/apps/family/studio.svg new file mode 100644 index 000000000..1a005c079 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/studio.svg @@ -0,0 +1 @@ +Director diff --git a/crates/shell/resources/icons/apps/family/task.svg b/crates/shell/resources/icons/apps/family/task.svg new file mode 100644 index 000000000..c2cddb570 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/task.svg @@ -0,0 +1 @@ +Task Manager diff --git a/crates/shell/resources/icons/apps/family/terminal.svg b/crates/shell/resources/icons/apps/family/terminal.svg new file mode 100644 index 000000000..111bfea6b --- /dev/null +++ b/crates/shell/resources/icons/apps/family/terminal.svg @@ -0,0 +1 @@ +Terminal diff --git a/crates/shell/resources/icons/apps/family/updater.svg b/crates/shell/resources/icons/apps/family/updater.svg new file mode 100644 index 000000000..19770f5a4 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/updater.svg @@ -0,0 +1 @@ +OctoSense Updates diff --git a/crates/shell/resources/icons/apps/family/video.svg b/crates/shell/resources/icons/apps/family/video.svg new file mode 100644 index 000000000..767eb9eee --- /dev/null +++ b/crates/shell/resources/icons/apps/family/video.svg @@ -0,0 +1 @@ +Video Player diff --git a/crates/shell/resources/icons/apps/family/vj.svg b/crates/shell/resources/icons/apps/family/vj.svg new file mode 100644 index 000000000..ee0fe30be --- /dev/null +++ b/crates/shell/resources/icons/apps/family/vj.svg @@ -0,0 +1 @@ +VJ diff --git a/crates/shell/resources/icons/apps/family/weather.svg b/crates/shell/resources/icons/apps/family/weather.svg new file mode 100644 index 000000000..0a772dad6 --- /dev/null +++ b/crates/shell/resources/icons/apps/family/weather.svg @@ -0,0 +1 @@ +Weather diff --git a/crates/shell/src/apps.rs b/crates/shell/src/apps.rs index 5a25f64af..76fcc946d 100644 --- a/crates/shell/src/apps.rs +++ b/crates/shell/src/apps.rs @@ -1256,6 +1256,13 @@ mod tests { if system_app_ids().contains(&"camera") { assert!(octosense_app_hub_app::system_icon("camera").is_some(), "Camera ships its own icon"); } + for (id, title) in [("mail", "Mail"), ("calendar", "Calendar")] { + if !system_app_ids().contains(&id) { continue; } + let Some(octosense_app_hub_app::icons::IconData::Svg(svg)) = octosense_app_hub_app::system_icon(id) else { + panic!("{id} must ship its approved bundle SVG"); + }; + assert!(svg.contains(&format!("{title}"))); + } } /// native-apps.json is the one declaration: every native module this diff --git a/crates/shell/src/octosense/icon_family.rs b/crates/shell/src/octosense/icon_family.rs new file mode 100644 index 000000000..9f982479e --- /dev/null +++ b/crates/shell/src/octosense/icon_family.rs @@ -0,0 +1,81 @@ +//! Approved OctoSense identities, shared by desktop and Home. +//! Regenerate resource copies with `python3 tools/build_icon_family.py --install`. +use makepad_widgets::{app_icon, desktop_style::DesktopStyle}; +use super::icon_frame; + +macro_rules! icon { + ($name:literal) => { + ($name, + include_str!(concat!("../../resources/icons/apps/family/", $name, ".svg")), + include_str!(concat!("../../resources/icons/apps/family/omarchy/", $name, ".svg"))) + }; +} + +pub(super) const ICONS: &[(&str, &str, &str)] = &[ + icon!("mail"), icon!("calendar"), icon!("calculator"), icon!("clock"), + icon!("notes"), icon!("reminders"), icon!("weather"), icon!("sheets"), + icon!("settings"), icon!("updater"), icon!("terminal"), icon!("octoscode"), + icon!("reference"), icon!("appcard"), icon!("browser"), icon!("files"), + icon!("task"), icon!("finance"), icon!("route"), icon!("image"), + icon!("pdf"), icon!("mixer"), icon!("fabric"), icon!("score"), + icon!("video"), icon!("vj"), icon!("fab"), icon!("studio"), +]; + +fn artwork(style: DesktopStyle) -> impl Iterator { + ICONS.iter().map(move |&(name, source, mono)| { + let svg = if style == DesktopStyle::Omarchy { + mono.to_string() + } else { + icon_frame::styled_svg(source, style) + }; + (name, svg) + }) +} + +/// Overlay the explicit local identities onto an otherwise untouched catalog. +/// Upstream can change these images or add new IDs without an asset merge here. +pub(super) fn apply(assets: &mut Vec, style: DesktopStyle) { + for (name, svg) in artwork(style) { + match assets.iter_mut().find(|asset| asset.name == name) { + Some(asset) => asset.svg = svg, + None => assets.push(app_icon::IconAsset { name: name.into(), svg }), + } + } +} + +/// Explicit built-in replacements win over system bundle art in every style. +/// Installed `hub:` names and identities outside this list keep their own art. +pub(super) fn owns_svg(name: &str) -> bool { + ICONS.iter().any(|&(id, _, _)| id == app_icon::canonical_name(name)) +} + +/// Native identity only: never intercept an installed app's `hub:` namespace. +pub(super) fn png(name: &str) -> Option<&'static [u8]> { + (makepad_widgets::app_icon::canonical_name(name) == "rinx") + .then_some(include_bytes!("../../resources/icons/apps/family/rinx.png").as_slice()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn upstream_changes_and_new_identities_survive_the_local_overlay() { + for style in DesktopStyle::ALL { + let mut assets = vec![ + app_icon::IconAsset { name: "browser".into(), svg: "changed upstream Browser".into() }, + app_icon::IconAsset { name: "photos".into(), svg: "upstream Photos".into() }, + app_icon::IconAsset { name: "future-app".into(), svg: "new upstream identity".into() }, + ]; + apply(&mut assets, style); + let source = |name| &assets.iter().find(|asset| asset.name == name).unwrap().svg; + assert_eq!(source("photos"), "upstream Photos"); + assert_eq!(source("future-app"), "new upstream identity"); + assert_eq!(source("browser"), &artwork(style).find(|(name, _)| *name == "browser").unwrap().1); + assert_eq!(assets.len(), ICONS.len() + 2); + let original = assets.clone(); + apply(&mut assets, style); + assert_eq!(assets, original, "reapplying must not duplicate or change identities"); + } + } +} diff --git a/crates/shell/src/octosense/icon_frame.rs b/crates/shell/src/octosense/icon_frame.rs index a836dbebb..04ca563c5 100644 --- a/crates/shell/src/octosense/icon_frame.rs +++ b/crates/shell/src/octosense/icon_frame.rs @@ -46,12 +46,14 @@ impl IconFrame { // These shell-owned SVGs share an explicit tile element. Keep foreground // identity and gradients intact; don't try to rewrite arbitrary store SVGs. const SOURCE_TILE: &str = r#""#; +const SOURCE_SQUARE_TILE: &str = r#""#; pub(super) const SHELL_ART_MARKER: &str = ""; pub(super) fn styled_svg(source: &str, style: DesktopStyle) -> String { - debug_assert!(source.contains(SOURCE_TILE), "shell icon needs the shared tile element"); + let source_tile = if source.contains(SOURCE_SQUARE_TILE) { SOURCE_SQUARE_TILE } else { SOURCE_TILE }; + debug_assert!(source.contains(source_tile), "shell icon needs the shared tile element"); let tile = IconFrame::for_style(style).map_or_else(String::new, IconFrame::svg); - source.replacen(SOURCE_TILE, &format!("{SHELL_ART_MARKER}{tile}"), 1) + source.replacen(source_tile, &format!("{SHELL_ART_MARKER}{tile}"), 1) } script_mod! { @@ -178,6 +180,19 @@ pub(super) fn placement(style: DesktopStyle, canvas: Rect) -> (Rect, f32, Vec4f) mod tests { use super::*; + #[test] + fn approved_square_sources_use_the_shared_frame() { + let source = r##""##; + for style in DesktopStyle::ALL { + let framed = styled_svg(source, style); + assert!(!framed.contains(SOURCE_SQUARE_TILE)); + assert!(framed.contains("r=\"10\" fill=\"#fffdf7\""), "the foreground identity must be preserved"); + if style == DesktopStyle::Android { + assert!(framed.contains("r=\"31\" fill=\"url(#tile)\"")); + } + } + } + #[test] fn frames_match_the_platform_catalog_and_keep_freeform_themes() { let canvas = Rect { pos: dvec2(10., 20.), size: dvec2(64., 64.) }; diff --git a/crates/shell/src/octosense/mod.rs b/crates/shell/src/octosense/mod.rs index 4da63f2e6..98312f6e2 100644 --- a/crates/shell/src/octosense/mod.rs +++ b/crates/shell/src/octosense/mod.rs @@ -2,6 +2,7 @@ pub mod catalog; pub mod makepad_source; pub mod style; pub(crate) mod icon_frame; +mod icon_family; pub mod paths; pub mod policy; pub mod retired_passes; diff --git a/crates/shell/src/octosense/style.rs b/crates/shell/src/octosense/style.rs index 7cac403fe..3ddb01553 100644 --- a/crates/shell/src/octosense/style.rs +++ b/crates/shell/src/octosense/style.rs @@ -1,8 +1,9 @@ //! OctoSense's additional desktop style, layered on the upstream widget API. use makepad_widgets::{app_icon, desktop_style::{DesktopStyle as UpstreamStyle, StyleSheet}, *}; -use super::icon_frame; +use super::{icon_family, icon_frame}; +use super::icon_frame::DrawIconImage; #[cfg(any(feature = "app-hub", native_mobile))] -use super::icon_frame::{DrawIconImage, SvgIconTexture}; +use super::icon_frame::SvgIconTexture; #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] pub enum DesktopStyle { @@ -86,8 +87,7 @@ pub fn load_sheet(style: DesktopStyle, dark: bool) -> StyleSheet { } } -/// The framework's artwork for a style with this shell's own laid over it: -/// News as redrawn here, and OctosMap, which the framework has no art for. +/// The framework's artwork with approved OctoSense identities laid over it. pub fn icon_assets(style: UpstreamStyle) -> Vec { fn wear(assets: &mut Vec, name: &str, svg: String) { match assets.iter_mut().find(|asset| asset.name == name) { @@ -110,6 +110,7 @@ pub fn icon_assets(style: UpstreamStyle) -> Vec { } } } + icon_family::apply(&mut assets, style); wear(&mut assets, "apphub", icon_frame::styled_svg(apphub_svg(), style)); // The system chat's dock entry and home chip (#143): its own art, so it // never reads as the AI pane's app. @@ -157,6 +158,7 @@ fn own_artwork(style: UpstreamStyle) -> Option<[&'static str; 2]> { #[derive(Default)] pub struct AppIconDraw { draw: app_icon::AppIconDraw, + original_png: Option<(DrawIconImage, Texture)>, #[cfg(any(feature = "app-hub", native_mobile))] library: InstalledIcons, /// The styles whose catalog this drawer has seen to, by discriminant. @@ -165,7 +167,25 @@ pub struct AppIconDraw { impl AppIconDraw { pub fn draw(&mut self, cx: &mut Cx2d, name: &str, style: DesktopStyle, rect: Rect, opacity: f32, ink: Vec4f) { #[cfg(any(feature = "app-hub", native_mobile))] - if self.library.draw(cx, name, style.framework(), rect, opacity) { return; } + if !icon_family::owns_svg(name) + && self.library.draw(cx, name, style.framework(), rect, opacity) { return; } + if let Some(bytes) = icon_family::png(name) { + let (draw, texture) = self.original_png.get_or_insert_with(|| { + let buffer = image_cache::ImageBuffer::from_png(bytes).expect("bundled Rinx icon is valid PNG"); + let size = vec2(buffer.width as f32, buffer.height as f32); + let texture = buffer.into_new_texture(cx); + let mut draw = cx.with_vm(|vm| DrawIconImage::script_new_with_default(vm)); + draw.source_size = size; + (draw, texture) + }); + let (rect, radius, backing) = icon_frame::placement(style.framework(), rect); + draw.draw_vars.set_texture(0, texture); + draw.radius = radius; + draw.backing = backing; + draw.opacity = opacity; + draw.draw_abs(cx, rect); + return; + } let style = style.framework(); // A style can be drawn before its sheet is applied (a crossfade's // target, the first frame); the framework would then fall back to @@ -256,6 +276,57 @@ mod tests { &assets.iter().find(|asset| asset.name == name).unwrap_or_else(|| panic!("no {name} icon")).svg } + #[test] + fn approved_family_replaces_generic_catalog_artwork() { + for style in UpstreamStyle::ALL { + let assets = icon_assets(style); + for (name, title) in [ + ("clock", "Clock"), ("sheets", "Sheets"), ("settings", "Settings"), + ("updater", "OctoSense Updates"), ("octoscode", "OctosCode"), + ("reference", "Reference"), ("appcard", "AppCard"), + ("mail", "Mail"), ("calendar", "Calendar"), + ] { + assert!(svg_of(&assets, name).contains(&format!("{title}")), + "{} {name} must use the approved family", style.id()); + } + assert_eq!(svg_of(&assets, "photos"), svg_of(&app_icon::load_assets(style), "photos")); + } + } + + #[test] + fn approved_family_is_complete_and_parses_in_the_production_renderer() { + assert_eq!(icon_family::ICONS.len(), 28); + for style in UpstreamStyle::ALL { + let assets = icon_assets(style); + for &(name, _, _) in icon_family::ICONS { + let svg = svg_of(&assets, name); + let doc = makepad_widgets::makepad_draw::svg::parse_svg(svg); + assert_eq!(doc.logical_size(), (64., 64.), "{} {name}", style.id()); + assert!(!doc.root.is_empty(), "{} {name}", style.id()); + for unsupported in [" = framework.iter().map(|asset| asset.name.as_str()).collect(); + expected.extend(icon_family::ICONS.iter().map(|&(name, _, _)| name)); + expected.extend(["maps", "apphub", "assistant"]); + assert_eq!(assets.iter().map(|asset| asset.name.as_str()).collect::>(), expected, "{}", style.id()); + assert_eq!(assets.len(), expected.len(), "identities must not be duplicated"); assert!(svg_of(&assets, "assistant").contains("OctoSense #143"), "{}", style.id()); assert!(assets.windows(2).all(|pair| pair[0].name < pair[1].name), "{}", style.id()); for asset in &framework { - if asset.name != "news" { + if asset.name != "news" && !icon_family::ICONS.iter().any(|&(name, _, _)| name == asset.name) { assert_eq!(svg_of(&assets, &asset.name), asset.svg, "{} {}", style.id(), asset.name); } } diff --git a/docs/design/icon-family/README.md b/docs/design/icon-family/README.md new file mode 100644 index 000000000..f2909511c --- /dev/null +++ b/docs/design/icon-family/README.md @@ -0,0 +1,240 @@ +# OctoSense icon family + +English | [简体中文](README.zh-CN.md) + +**Approved family, 2026-10-15.** This package contains 28 original SVG replacement +icons, the original Rinx PNG, and an icon design system derived from the existing News, Photos, App Hub, +Maps and OctoSense artwork. The approved family is now connected to the shared +shell catalog and the Mail/Calendar system bundles. It takes effect in builds +from this source; existing installed releases are not updated by a source edit. +**Browser updated, 2026-10-21:** C5 Night rose is the approved replacement, +with an ink dial, mint rim, four-spoke rose and ivory northeast point. + +![Primary icon family with existing references](family-primary.png) + +## How many icons are needed? + +**14 product identities need new artwork**, including feature-selectable native +apps; **Rinx reuses its original icon**. **14 additional identities** appear in the optional checkout catalogs. +Together, these are **28 new icons and one restored original**. This is a count of app identities across +both products, not a claim that every build exposes all 29. + +The audit covers the union of `desktop/system-apps.json` (10 bundles), +`phone/system-apps.json` (8 bundles; 11 unique bundles across both), active or +feature-selectable entries in `native-apps.json`, Home's Settings, the shell's +Assistant entry, and both `config/apps.json` catalogs. An entry with a binary +in a checkout catalog need not be installed or visible on a given machine. + +Before this change, six product identities had no matching catalog artwork and resolved to the +same default `app.svg`: **Settings, Updates, Rinx, OctosCode, Reference and +AppCard**. The other replacements use Makepad's existing illustrations; they +are app-specific, but have no local OctoSense identity. + +Rinx does have original artwork in its own repository. The shell now restores +that icon instead of redesigning it. Its 1024 px PNG is copied byte-for-byte from +`resources/icon_1024.png` at the revision pinned in `native-apps.json`. +See [provenance and checksums](references/rinx/provenance.json); upstream license +and attribution notices are retained alongside it. + +| Product app | Existing artwork | Proposed identity | +| --- | --- | --- | +| Mail | Makepad envelope | Folded ivory envelope, mint letter, coral seal | +| Calendar | Makepad calendar | Coral flip calendar with physical binding rings | +| Calculator | Makepad calculator | Ivory calculator, sage display, coral equals key | +| Clock | Makepad dial | Two-color ivory dial and dark hands; no rim, feet or second hand | +| Notes | Makepad notepad | Pocket notebook with a mint pencil | +| Reminders | Makepad checklist | Ivory clipboard with coral completion marker | +| Weather | Makepad sun/cloud | Butter sun, ivory cloud and two rain strokes | +| Sheets | Makepad workbook | Ivory workbook with a green formula tab; every cell uses the same color | +| Settings | Shared default app | Ivory plate with three tactile sliders | +| OctoSense Updates | Shared default app | Upward install arrow between mint cycle arcs | +| Terminal | Makepad prompt | Ink command window, mint prompt, apricot cursor | +| OctosCode | Shared default app | Ivory code window, violet brackets, amber tab | +| Rinx | Shared default app | Restore the original Rinx cube artwork | +| Reference | Shared default app | Ivory reference book with apricot bookmark | +| AppCard | Shared default app | Layered ivory cards with an inset chat panel | + +Reference, Sheets and AppCard have feature-dependent availability; Terminal is +desktop-only. Settings belongs to Home. The artwork can be shared whenever the +same identity appears on either product. + +The **14 optional catalog apps** are Browser, Files, Task Manager, Finance, +Route, Image Viewer, PDF Viewer, Mixer, Fabric, Score, Video Player, VJ, Fab and +Director (`studio`). Task's native module is disabled in both products, but its +process entry remains in the checkout catalogs. + +![Optional catalog icon family](family-optional.png) + +## Existing identities to retain + +| Identity | Current source | Treatment | +| --- | --- | --- | +| News | `crates/shell/resources/icons/apps/