The app has an icon
Every build so far shipped the default Electron one. electron-builder said so on every run — "default Electron icon is used, reason=application icon is not set" — in a line that is very easy to read past. A store people install games with should not look like a framework demo in the Dock. The mark is a W with three lines running into it: the product's initial, and what it is doing. It uses the window's own palette, so the icon and the application it opens are the same object. Drawn for the smallest size first, which is what settled it — at 32px the W still reads and the lines survive as motion rather than as noise, where a ring, an outline or fine detail did not. A portal, a play triangle and a send arrow were each drawn and each discarded: they already mean a loading spinner, a media player and a submit button. `resources/icon.svg` is the source and the only file anybody should edit. `make icons` renders the rest. Three committed binaries with no way to regenerate them is how an icon becomes something nobody dares change, so the ICO is written here rather than shelling out to ImageMagick — the container is a header and 16 bytes per image, which is not worth a build dependency this machine does not have. `directories.buildResources` had to move off the default: electron-builder looks in `build/`, which this project uses for compiled output and wipes on `make clean`, so the icons would have been deleted before every package. The window picks it up when run from source too, where there is otherwise nothing to carry an icon and a dev run looks like a different application. Guarded on `app.isPackaged`, because `resources/` is not inside the package and pointing at it there would be a path that does not exist. Verified by reading the icon back out of the built bundle rather than trusting the config: extracted from `WarpEngine Client.app/Contents/Resources/icon.icns` and looked at, and the ICO parsed entry by entry — 7 images, 16 to 256, each a valid PNG. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -230,6 +230,7 @@ names. `make` on its own lists everything.
|
||||
| `make lint` | the strict rule set (`lint-fix` fixes what it can) |
|
||||
| `make check` | **typecheck, lint and every test suite** — the gate |
|
||||
| `make start` | run the app against whatever store is installed |
|
||||
| `make icons` | render every icon format from `resources/icon.svg` |
|
||||
| `make smoke` | drive the store with no window and no Electron at all |
|
||||
| `make storetest` | add and remove a store in a sandbox — the only code that deletes a tree |
|
||||
| `SMOKE_HOME=<dir> SMOKE_TOKEN=<bearer> npm run smoke` | the same, against a sandbox store and as a signed-in person |
|
||||
@@ -246,6 +247,23 @@ The npm scripts still work directly (`npm start`, `npm run dist:mac`) — the
|
||||
Makefile adds no logic of its own beyond the release step. Every script that runs the
|
||||
app builds first, so there is no way to test a stale bundle.
|
||||
|
||||
### The icon
|
||||
|
||||
`resources/icon.svg` is the source and the only file to edit; `make icons` renders the
|
||||
rest — `icon.png`, `icon.ico`, `icon.icns` and the `icons/` directory Linux packages
|
||||
want. Three committed binaries with no way to regenerate them is how an icon becomes
|
||||
something nobody dares change, so the render is a script rather than a memory.
|
||||
|
||||
It needs `rsvg-convert` (`brew install librsvg`, `apt install librsvg2-bin`). The
|
||||
`.icns` step additionally needs `iconutil`, which exists only on macOS — elsewhere it
|
||||
is skipped with a warning and the committed `.icns` stands, which is what a mac build
|
||||
uses anyway.
|
||||
|
||||
The mark is a **W with three lines running into it**: the product's initial, and what
|
||||
it is doing. It was drawn for the smallest size first — at 32px the W still reads and
|
||||
the lines survive as motion rather than as noise. A portal, a play triangle and a send
|
||||
arrow were all tried and all discarded: each already means something else.
|
||||
|
||||
### Continuous integration
|
||||
|
||||
`.woodpecker.yaml` builds the **Linux and Windows** packages, and on a tag attaches
|
||||
|
||||
Reference in New Issue
Block a user