Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| af1c7a4061 |
@@ -0,0 +1,18 @@
|
||||
# Strip upstream (ArtCraft / Discord) branding. Run: perl tools/craft-skills/skills/debrand/debrand.pl . (--check in CI)
|
||||
delete docs/brand
|
||||
# MIT/Apache texts stay verbatim. The copyright holder line stays everywhere (legal requirement).
|
||||
keep ^(LICENSE-(MIT|APACHE)|\.debrand)$
|
||||
dropline ^ASSETS\.md$ :: \|\s*`docs/brand/
|
||||
dropline ^crates/ui-egui/src/i18n(/.*)?\.rs$ :: \s*\("[^"]*(?:ArtCraft|Discord|discord)
|
||||
sub (?s)\nThe ArtCraft name, wordmark and logos in docs/brand/.*?LICENSE-brand\.txt\.\n =>
|
||||
sub \s*\(except the ArtCraft trademarks in `docs/brand/`, under `docs/brand/LICENSE-brand\.txt`\) =>
|
||||
sub drawn in ArtCraft\) => drawn by hand)
|
||||
sub owner's ArtCraft drawing => owner's drawing
|
||||
sub by the project owner in ArtCraft, then => by the project owner, then
|
||||
sub The owner drew the cat in ArtCraft\. => The owner drew the cat by hand.
|
||||
sub the MIT OR Apache-2\.0 ArtCraft sibling catalogs => the MIT OR Apache-2.0 sibling catalogs
|
||||
forbid (?i)artcraft(?! Team and the DesignCraft contributors)
|
||||
forbid (?i)discord
|
||||
sub \s*The one exception is the ArtCraft brand files in `docs/brand/`: ArtCraft trademarks, not open source, used under `docs/brand/LICENSE-brand\.txt`\. =>
|
||||
sub https://getartcraft\.com/apps/designcraft => https://github.com/storytold/designcraft
|
||||
sub https://discord\.gg/artcraft => https://github.com/storytold/designcraft/issues
|
||||
@@ -0,0 +1,3 @@
|
||||
[submodule "tools/craft-skills"]
|
||||
path = tools/craft-skills
|
||||
url = https://git.marcospaulo.dev.br/storytold/craft-skills.git
|
||||
@@ -20,7 +20,7 @@ People trust DesignCraft with their layouts; a crash loses their work. **This ou
|
||||
|
||||
## Non-negotiables
|
||||
- **Clean-room.** InDesign is installed on the dev machine and may be *observed* black-box: run it, use its UI with synthetic documents, take screenshots (by window id) stored only under `plan/indesign/screenshots/` (never committed). Never read, disassemble or copy anything inside the InDesign bundle (names/listings only), never copy Adobe icons, artwork, presets or wording beyond feature names, never commit files produced by InDesign. Never copy GPL/AGPL/LGPL code (Scribus, LibreOffice, Ghostscript…).
|
||||
- **Assets:** no Adobe iconography or images — ever. Every asset is original / OSI / CC0 / redistributable CC (except the ArtCraft trademarks in `docs/brand/`, under `docs/brand/LICENSE-brand.txt`) and has a row in `ASSETS.md` (`cargo xtask assets` enforces it). Prefer art generated in code.
|
||||
- **Assets:** no Adobe iconography or images — ever. Every asset is original / OSI / CC0 / redistributable CC and has a row in `ASSETS.md` (`cargo xtask assets` enforces it). Prefer art generated in code.
|
||||
- **Fonts live in [`storytold/craft-fonts`](https://github.com/storytold/craft-fonts)**, never in this repo: don't commit new font files (the Latin UI/document fonts already in `assets/fonts/` stay). It is an optional build input, never a `Cargo.toml` dependency: `CRAFT_FONTS_DIR=/abs/path/to/craft-fonts cargo build` makes `crates/fonts/build.rs` embed its fonts as `designcraft_fonts::CRAFT_FONTS` (Japanese: BIZ UDPGothic for the UI, Mincho first for document text; web builds embed BIZ UDPGothic Regular only). Unset, `CRAFT_FONTS` is empty and the app uses its bundled and system fonts; code and tests must work that way (tests on its glyphs skip). Releases build with it. Standard: [craftrules `standards/fonts.md`](https://github.com/storytold/craftrules/blob/main/standards/fonts.md).
|
||||
- **Shared test corpora.** Real-file test oracles (Photoshop-authored PSDs, etc.) live in [`storytold/photocraft-corpus`](https://github.com/storytold/photocraft-corpus), explained in [craftrules `standards/test-corpora.md`](https://github.com/storytold/craftrules/blob/main/standards/test-corpora.md). Never commit large binary fixtures to this repo; fetch them pinned by commit and sha256-verified, as PhotoCraft does with `cargo xtask corpus`.
|
||||
- **Everything is a command.** User-visible behaviour = a command in `crates/engine/src/cmd/*` (id, label, menu path, shortcut, params doc, `enabled`, `run`) + tests. Tools emit commands (Begin/Preview/Commit). UI-only commands live in `crates/ui-egui/src/menus.rs` (`UI_COMMANDS`). The control channel and MCP reach all of them.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Every non-code asset in this repository (fonts, images, example art, presets) is listed here with its author, source and licence. `cargo xtask assets` (part of `cargo xtask ci`) fails if an asset file is missing from this table.
|
||||
|
||||
**Policy (mandatory):** DesignCraft contains **no Adobe iconography, images, artwork, presets, swatch libraries or ICC profiles**. Every asset is original work by DesignCraft contributors or third-party material under an open licence (OSI open source, public domain / CC0, or Creative Commons that allows redistribution). Screenshots of Adobe software are never committed. Font files are not added here: shared fonts live in [storytold/craft-fonts](https://github.com/storytold/craft-fonts), an optional build input (`CRAFT_FONTS_DIR`, see AGENTS.md and craftrules [`standards/fonts.md`](https://github.com/storytold/craftrules/blob/main/standards/fonts.md)). The one exception is the ArtCraft brand files in `docs/brand/`: ArtCraft trademarks, not open source, used under `docs/brand/LICENSE-brand.txt`.
|
||||
**Policy (mandatory):** DesignCraft contains **no Adobe iconography, images, artwork, presets, swatch libraries or ICC profiles**. Every asset is original work by DesignCraft contributors or third-party material under an open licence (OSI open source, public domain / CC0, or Creative Commons that allows redistribution). Screenshots of Adobe software are never committed. Font files are not added here: shared fonts live in [storytold/craft-fonts](https://github.com/storytold/craft-fonts), an optional build input (`CRAFT_FONTS_DIR`, see AGENTS.md and craftrules [`standards/fonts.md`](https://github.com/storytold/craftrules/blob/main/standards/fonts.md)).
|
||||
|
||||
Generated-in-code art is original and has no file to list: the UI icon set (`crates/ui-egui/src/icons.rs`), default swatches, and the sample magazine's imagery (`crates/engine/src/sample.rs`).
|
||||
|
||||
@@ -45,25 +45,20 @@ Generated-in-code art is original and has no file to list: the UI icon set (`cra
|
||||
| `crates/render/tests/golden/inner-shadow.png` | DesignCraft contributors (generated) | rendered by DesignCraft's own renderer (`crates/render/tests/effects.rs`, synthetic shapes and bundled fonts) | MIT OR Apache-2.0 | Golden test image for soft effects |
|
||||
| `crates/render/tests/golden/outer-glow.png` | DesignCraft contributors (generated) | rendered by DesignCraft's own renderer (`crates/render/tests/effects.rs`, synthetic shapes and bundled fonts) | MIT OR Apache-2.0 | Golden test image for soft effects |
|
||||
| `assets/app-icon/LICENSE.txt` | (licence text) | this project | — | Licence for the app icon |
|
||||
| `assets/app-icon/designcraft-1024.png` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/designcraft-macos-512.png` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/designcraft-small.svg` | DesignCraft project owner (drawn in ArtCraft) | owner's ArtCraft drawing, vectorised with craftrules `assets/logo-options/_tools/vectorize_tile.py` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/designcraft.icns` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/designcraft.ico` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/designcraft.svg` | DesignCraft project owner (drawn in ArtCraft) | owner's ArtCraft drawing, vectorised with craftrules `assets/logo-options/_tools/vectorize_tile.py` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/128x128/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/16x16/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/24x24/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/256x256/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/32x32/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/48x48/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/512x512/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn in ArtCraft) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/scalable/apps/ai.storyteller.designcraft.svg` | DesignCraft project owner (drawn in ArtCraft) | owner's ArtCraft drawing, vectorised with craftrules `assets/logo-options/_tools/vectorize_tile.py` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `docs/brand/artcraft-logo.svg`, `docs/brand/artcraft-logo.png` | ArtCraft / Storyteller | ArtCraft brand kit (project owner) | ArtCraft trademark, see docs/brand/LICENSE-brand.txt (not open source) | ArtCraft wordmark (README header) |
|
||||
| `docs/brand/artcraft-logo-white.svg`, `docs/brand/artcraft-logo-white.png` | ArtCraft / Storyteller | ArtCraft brand kit (project owner) | ArtCraft trademark, see docs/brand/LICENSE-brand.txt (not open source) | Wordmark for dark backgrounds |
|
||||
| `docs/brand/artcraft-mark.svg`, `docs/brand/artcraft-mark.png` | ArtCraft / Storyteller | ArtCraft brand kit (project owner) | ArtCraft trademark, see docs/brand/LICENSE-brand.txt (not open source) | The mark; its outline is drawn in code by `crates/ui-egui/src/about.rs` (About splash, start screen) |
|
||||
| `docs/brand/artcraft-mark-black.svg`, `docs/brand/artcraft-mark-black.png` | ArtCraft / Storyteller | ArtCraft brand kit (project owner) | ArtCraft trademark, see docs/brand/LICENSE-brand.txt (not open source) | Mark for light backgrounds |
|
||||
| `docs/brand/LICENSE-brand.txt` | (licence text) | ArtCraft Team | — | Terms for the ArtCraft Marks in `docs/brand/` |
|
||||
| `assets/app-icon/designcraft-1024.png` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/designcraft-macos-512.png` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/designcraft-small.svg` | DesignCraft project owner (drawn by hand) | owner's drawing, vectorised with craftrules `assets/logo-options/_tools/vectorize_tile.py` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/designcraft.icns` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/designcraft.ico` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/designcraft.svg` | DesignCraft project owner (drawn by hand) | owner's drawing, vectorised with craftrules `assets/logo-options/_tools/vectorize_tile.py` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/128x128/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/16x16/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/24x24/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/256x256/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/32x32/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/48x48/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/512x512/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png` | DesignCraft project owner (drawn by hand) | rendered from `assets/app-icon/designcraft.svg` by `packaging/icons.sh` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `assets/app-icon/hicolor/scalable/apps/ai.storyteller.designcraft.svg` | DesignCraft project owner (drawn by hand) | owner's drawing, vectorised with craftrules `assets/logo-options/_tools/vectorize_tile.py` | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) | App icon: calico cat in a polka-dot scarf (see `assets/app-icon/README.md`) |
|
||||
| `packaging/macos/dmg/background.svg` | @XusBadia | original work for this repository, derived from the DesignCraft app icon (`assets/app-icon/designcraft.svg`, referenced via `<image>`, not copied); text is outlined Inter / JetBrains Mono glyph paths | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | DesignCraft macOS DMG window background for the Finder window; `packaging/macos/dmg/generate.py` renders it to `background.tiff` (2026-10-08) |
|
||||
| `packaging/macos/dmg/background.tiff` | @XusBadia | Rendered from `packaging/macos/dmg/background.svg` by `packaging/macos/dmg/generate.py` | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | 1x + 2x HiDPI TIFF for the macOS DMG window; includes the app icon (see its row) and LittleCMS's built-in sRGB profile ("No copyright, use freely") |
|
||||
|
||||
@@ -20,7 +20,7 @@ People trust DesignCraft with their layouts; a crash loses their work. **This ou
|
||||
|
||||
## Non-negotiables
|
||||
- **Clean-room.** InDesign is installed on the dev machine and may be *observed* black-box: run it, use its UI with synthetic documents, take screenshots (by window id) stored only under `plan/indesign/screenshots/` (never committed). Never read, disassemble or copy anything inside the InDesign bundle (names/listings only), never copy Adobe icons, artwork, presets or wording beyond feature names, never commit files produced by InDesign. Never copy GPL/AGPL/LGPL code (Scribus, LibreOffice, Ghostscript…).
|
||||
- **Assets:** no Adobe iconography or images — ever. Every asset is original / OSI / CC0 / redistributable CC (except the ArtCraft trademarks in `docs/brand/`, under `docs/brand/LICENSE-brand.txt`) and has a row in `ASSETS.md` (`cargo xtask assets` enforces it). Prefer art generated in code.
|
||||
- **Assets:** no Adobe iconography or images — ever. Every asset is original / OSI / CC0 / redistributable CC and has a row in `ASSETS.md` (`cargo xtask assets` enforces it). Prefer art generated in code.
|
||||
- **Fonts live in [`storytold/craft-fonts`](https://github.com/storytold/craft-fonts)**, never in this repo: don't commit new font files (the Latin UI/document fonts already in `assets/fonts/` stay). It is an optional build input, never a `Cargo.toml` dependency: `CRAFT_FONTS_DIR=/abs/path/to/craft-fonts cargo build` makes `crates/fonts/build.rs` embed its fonts as `designcraft_fonts::CRAFT_FONTS` (Japanese: BIZ UDPGothic for the UI, Mincho first for document text; web builds embed BIZ UDPGothic Regular only). Unset, `CRAFT_FONTS` is empty and the app uses its bundled and system fonts; code and tests must work that way (tests on its glyphs skip). Releases build with it. Standard: [craftrules `standards/fonts.md`](https://github.com/storytold/craftrules/blob/main/standards/fonts.md).
|
||||
- **Shared test corpora.** Real-file test oracles (Photoshop-authored PSDs, etc.) live in [`storytold/photocraft-corpus`](https://github.com/storytold/photocraft-corpus), explained in [craftrules `standards/test-corpora.md`](https://github.com/storytold/craftrules/blob/main/standards/test-corpora.md). Never commit large binary fixtures to this repo; fetch them pinned by commit and sha256-verified, as PhotoCraft does with `cargo xtask corpus`.
|
||||
- **Everything is a command.** User-visible behaviour = a command in `crates/engine/src/cmd/*` (id, label, menu path, shortcut, params doc, `enabled`, `run`) + tests. Tools emit commands (Begin/Preview/Commit). UI-only commands live in `crates/ui-egui/src/menus.rs` (`UI_COMMANDS`). The control channel and MCP reach all of them.
|
||||
|
||||
@@ -3,10 +3,6 @@ Copyright (c) 2026 ArtCraft Team and the DesignCraft contributors.
|
||||
Licensed under the MIT License or the Apache License, Version 2.0, at your option
|
||||
(LICENSE-MIT, LICENSE-APACHE).
|
||||
|
||||
The ArtCraft name, wordmark and logos in docs/brand/ are trademarks of the ArtCraft Team. They are
|
||||
not open source and are not covered by the license above; their terms are in
|
||||
docs/brand/LICENSE-brand.txt.
|
||||
|
||||
Third-party material
|
||||
|
||||
This product bundles third-party material under its own licenses, listed below. The per-file
|
||||
|
||||
@@ -1,13 +1,3 @@
|
||||
<p align="center">
|
||||
<a href="https://getartcraft.com/">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="docs/brand/artcraft-logo-white.svg">
|
||||
<img alt="ArtCraft" src="docs/brand/artcraft-logo.svg" width="200">
|
||||
</picture>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
|
||||
<h1 align="center">DesignCraft</h1>
|
||||
|
||||
<p align="center">
|
||||
@@ -16,8 +6,7 @@
|
||||
|
||||
<p align="center">
|
||||
A fast, open-source, clean-room take on the Adobe InDesign workflow. It runs natively on macOS,
|
||||
Windows and Linux, and in the browser via WebAssembly.<br>
|
||||
<i>By the ArtCraft team.</i>
|
||||
Windows and Linux, and in the browser via WebAssembly.
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -27,16 +16,6 @@
|
||||
<img alt="Agent-drivable over MCP" src="https://img.shields.io/badge/agents-MCP-7bb51c?style=flat-square">
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://getartcraft.com/apps/designcraft"><b>DesignCraft on getartcraft.com</b></a> ·
|
||||
<a href="https://getartcraft.com/">ArtCraft</a> ·
|
||||
<a href="https://getartcraft.com/apps">All Crafting Apps</a>
|
||||
</p>
|
||||
|
||||
<br>
|
||||
|
||||
<p align="center">
|
||||
@@ -44,10 +23,6 @@
|
||||
<br><sub><b>Quarterly, Spring Issue</b>: threaded three-column body text, a wrapped pull quote and parent-page folios, all set by DesignCraft's own paragraph composer.</sub>
|
||||
</p>
|
||||
|
||||
> [!NOTE]
|
||||
> **ArtCraft is a community of artists from all walks of life.** Digital, generative, music,
|
||||
> games — if you make things, you're one of us. **[Come say hi on Discord](https://discord.gg/artcraft).**
|
||||
|
||||
<p align="center">
|
||||
<a href="#the-sample-magazine">The sample magazine</a> ·
|
||||
<a href="#why-designcraft">Why DesignCraft</a> ·
|
||||
@@ -192,9 +167,7 @@ egui frontend is a separate crate, so the UI can be swapped without touching the
|
||||
|
||||
## Downloads
|
||||
|
||||
**New to DesignCraft?** Download it from the [DesignCraft page on getartcraft.com](https://getartcraft.com/apps/designcraft). That's the easiest way to install it.
|
||||
|
||||
**Want a specific build or format?** On GitHub, the [latest release](https://github.com/storytold/designcraft/releases/latest) has every build listed below, and [all releases](https://github.com/storytold/designcraft/releases) has earlier versions and their notes. `<ver>` in the file names is the version number, and `SHA256SUMS.txt` lists a checksum for every file.
|
||||
The [latest release](https://github.com/storytold/designcraft/releases/latest) has every build listed below, and [all releases](https://github.com/storytold/designcraft/releases) has earlier versions and their notes. `<ver>` in the file names is the version number, and `SHA256SUMS.txt` lists a checksum for every file.
|
||||
|
||||
### Windows
|
||||
|
||||
@@ -240,42 +213,20 @@ RISC-V (riscv64): `designcraft-<ver>-linux-riscv64.tar.gz` only, cross-compiled;
|
||||
## The Crafting Apps
|
||||
|
||||
DesignCraft is one of the **Crafting Apps**: free, open-source creative tools from the
|
||||
[ArtCraft](https://getartcraft.com/) team, each written from scratch in Rust and each able to
|
||||
[storytold](https://github.com/storytold) team, each written from scratch in Rust and each able to
|
||||
stand on its own.
|
||||
|
||||
| | App | What it's for | Code | Learn more |
|
||||
|:-:|---|---|---|---|
|
||||
| <img src="https://raw.githubusercontent.com/storytold/photocraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png" alt="" width="32" height="32"> | **PhotoCraft** | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) | [Website](https://getartcraft.com/apps/photocraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/vectorcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.vectorcraft.png" alt="" width="32" height="32"> | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) | [Website](https://getartcraft.com/apps/vectorcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/filmcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png" alt="" width="32" height="32"> | **FilmCraft** | Video editing, color and sound | [GitHub](https://github.com/storytold/filmcraft) | [Website](https://getartcraft.com/apps/filmcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/lightcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.lightcraft.png" alt="" width="32" height="32"> | **LightCraft** | Photo library and raw development | [GitHub](https://github.com/storytold/lightcraft) | [Website](https://getartcraft.com/apps/lightcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/pdfcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png" alt="" width="32" height="32"> | **PdfCraft** | Reading, organizing and protecting PDFs | [GitHub](https://github.com/storytold/pdfcraft) | [Website](https://getartcraft.com/apps/pdfcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) | [Website](https://getartcraft.com/apps/effectcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | **Page layout and publishing · you are here** | [GitHub](https://github.com/storytold/designcraft) | [Website](https://getartcraft.com/apps/designcraft) |
|
||||
| | App | What it's for | Code |
|
||||
|:-:|---|---|---|
|
||||
| <img src="https://raw.githubusercontent.com/storytold/photocraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png" alt="" width="32" height="32"> | **PhotoCraft** | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/vectorcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.vectorcraft.png" alt="" width="32" height="32"> | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/filmcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png" alt="" width="32" height="32"> | **FilmCraft** | Video editing, color and sound | [GitHub](https://github.com/storytold/filmcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/lightcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.lightcraft.png" alt="" width="32" height="32"> | **LightCraft** | Photo library and raw development | [GitHub](https://github.com/storytold/lightcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/pdfcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png" alt="" width="32" height="32"> | **PdfCraft** | Reading, organizing and protecting PDFs | [GitHub](https://github.com/storytold/pdfcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | **Page layout and publishing · you are here** | [GitHub](https://github.com/storytold/designcraft) |
|
||||
|
||||
And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video studio for artists who want real control.
|
||||
|
||||
<br>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
|
||||
</p>
|
||||
|
||||
<h3 align="center">Come make things with us</h3>
|
||||
|
||||
<p align="center">
|
||||
Our Discord is where artists of every kind hang out: people who paint, shoot, draw, cut film,
|
||||
set type, and people still figuring out what they like to make. Share what you're working on,
|
||||
ask for help, tell us what's broken, or tell us what you wish these tools could do.
|
||||
Whatever your medium and however long you've been at it, you're welcome here.
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://discord.gg/artcraft"><b>discord.gg/artcraft</b></a> ·
|
||||
<a href="https://getartcraft.com/">getartcraft.com</a> ·
|
||||
<a href="https://getartcraft.com/apps">The Crafting Apps</a> ·
|
||||
<a href="https://getartcraft.com/apps/designcraft">DesignCraft</a>
|
||||
</p>
|
||||
The Crafting Apps share the same conventions: clean-room and pure Rust, native on macOS, Windows and Linux, in the browser via WebAssembly, and fully drivable by agents.
|
||||
|
||||
## License and credits
|
||||
|
||||
@@ -288,16 +239,4 @@ with its author, source and license in [ASSETS.md](ASSETS.md).
|
||||
The bundled fonts, and the craft-fonts fonts embedded by release builds, are under the SIL Open
|
||||
Font License; all UI icons are drawn in code and are original.
|
||||
|
||||
The ArtCraft name, wordmark and logos in [`docs/brand/`](docs/brand/) are trademarks of the
|
||||
ArtCraft Team and are not covered by this license. They may be used only unmodified, and only as
|
||||
part of this repository and DesignCraft, under [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt).
|
||||
Forks and modified versions must remove them.
|
||||
|
||||
<sub>Adobe, Photoshop, Illustrator, Premiere Pro, Lightroom, Acrobat, After Effects and InDesign are trademarks or registered trademarks of Adobe Inc. in the United States and/or other countries. DesignCraft is an independent, open-source project and is not affiliated with, sponsored by or endorsed by Adobe Inc.; these names are used only to describe the workflows it is compatible with.</sub>
|
||||
|
||||
<br>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://getartcraft.com/"><img alt="ArtCraft" src="docs/brand/artcraft-mark.svg" width="28"></a><br>
|
||||
<sub>Made by the <a href="https://getartcraft.com/">ArtCraft</a> team and community.</sub>
|
||||
</p>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
//! designcraft-cli perf [--pages N] [--frames N] [--chars N] [--images N] [--runs N] [--strict] # budgets on a synthetic stress document
|
||||
//! designcraft-cli bench FILE [--runs N] # the same measurements on one document
|
||||
//! designcraft-cli validate-pdf FILE.pdf # run the built-in PDF/X-4 conformance checks
|
||||
//! designcraft-cli links # Discord, website, app page and GitHub links
|
||||
//! designcraft-cli links # GitHub and issue-tracker links
|
||||
//! designcraft-cli --version # print the version
|
||||
//! ```
|
||||
#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)]
|
||||
@@ -40,12 +40,7 @@ const USAGE: &str = "usage: designcraft-cli run [--in FILE | --sample] [--cmd ID
|
||||
|
||||
/// The links line under the usage block.
|
||||
fn usage_footer() -> String {
|
||||
format!(
|
||||
"\nCommunity: {} · {} · {}",
|
||||
designcraft_engine::links::DISCORD,
|
||||
designcraft_engine::links::APP_PAGE,
|
||||
designcraft_engine::links::GITHUB
|
||||
)
|
||||
format!("\nSource: {} · Issues: {}", designcraft_engine::links::GITHUB, designcraft_engine::links::ISSUES)
|
||||
}
|
||||
|
||||
/// stdout went away. A reader that stopped early (a closed pipe) ends the program quietly, as
|
||||
@@ -88,7 +83,7 @@ fn main() -> ExitCode {
|
||||
Some("validate-pdf") => report(validate_pdf(args.get(1).map(String::as_str))),
|
||||
Some("links") => {
|
||||
use designcraft_engine::links::*;
|
||||
outln!("Discord {DISCORD}\nWebsite {WEBSITE}\nApp page {APP_PAGE}\nGitHub {GITHUB}\nIssues {ISSUES}");
|
||||
outln!("GitHub {GITHUB}\nIssues {ISSUES}");
|
||||
ExitCode::SUCCESS
|
||||
}
|
||||
// Asking for help is not an error: it goes to stdout and succeeds. An unknown command
|
||||
|
||||
@@ -37,12 +37,10 @@ impl NativeMenu {
|
||||
let mut counter = 0usize;
|
||||
// Application menu.
|
||||
let app_menu = Submenu::new("DesignCraft", true);
|
||||
// Our own About splash (with the community links) instead of the stock panel.
|
||||
// Our own About splash instead of the stock panel.
|
||||
let about = MenuItem::with_id("dc-about", "About DesignCraft", true, None);
|
||||
let discord = MenuItem::with_id("dc-discord", "Join the ArtCraft Discord…", true, None);
|
||||
let _ = app_menu.append_items(&[
|
||||
&about,
|
||||
&discord,
|
||||
&PredefinedMenuItem::separator(),
|
||||
&PredefinedMenuItem::services(None),
|
||||
&PredefinedMenuItem::separator(),
|
||||
@@ -53,7 +51,6 @@ impl NativeMenu {
|
||||
&PredefinedMenuItem::quit(None),
|
||||
]);
|
||||
items.insert("dc-about".into(), ("help.about".into(), serde_json::Value::Null, Handle::Plain(about)));
|
||||
items.insert("dc-discord".into(), ("help.discord".into(), serde_json::Value::Null, Handle::Plain(discord)));
|
||||
let _ = menu.append(&app_menu);
|
||||
for (title, entries) in menus::menu_tree() {
|
||||
let sub = Submenu::new(designcraft_ui_egui::i18n::tr(&app.ui.language, title), true);
|
||||
|
||||
@@ -2,7 +2,7 @@ DesignCraft app icon (designcraft.svg, designcraft-small.svg and every file deri
|
||||
this directory: designcraft-1024.png, designcraft-macos-512.png, designcraft.icns, designcraft.ico,
|
||||
hicolor/).
|
||||
|
||||
Original artwork made for this project by the project owner in ArtCraft, then vectorised. No
|
||||
Original artwork made for this project by the project owner, then vectorised. No
|
||||
third-party material. Licensed like the rest of DesignCraft, under either of
|
||||
|
||||
* Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0)
|
||||
|
||||
@@ -22,7 +22,7 @@ transparent margin.
|
||||
|
||||
## Provenance
|
||||
|
||||
The owner drew the cat in ArtCraft. The 2880 px drawing, keyed to the three-colour palette, lives
|
||||
The owner drew the cat by hand. The 2880 px drawing, keyed to the three-colour palette, lives
|
||||
outside this repo in craftrules at `assets/app-icons/designcraft/source.png`. It was vectorised with
|
||||
craftrules' `assets/logo-options/_tools/vectorize_tile.py`: `designcraft.svg` is traced at 2048 px and
|
||||
`designcraft-small.svg` at 1024 px. Design rules: craftrules `standards/icon-design.md`.
|
||||
|
||||
@@ -10,7 +10,7 @@ pub fn specs() -> Vec<CommandSpec> {
|
||||
vec![
|
||||
cmd!(query "document.inspect", "Inspect Document", [], None, "{} → pages, spreads, items, stories (with overset), styles, swatches, selection", has_doc, inspect),
|
||||
cmd!(query "app.links", "Community & Project Links", [], None,
|
||||
"{} → {discord, website, appPage, github, issues} (ArtCraft Discord, website, DesignCraft page and repository)", always, |_, _| Ok(crate::links::all())),
|
||||
"{} → {github, issues} (DesignCraft repository and issue tracker)", always, |_, _| Ok(crate::links::all())),
|
||||
cmd!(query "document.list", "List Documents", [], None, "{}", always, |s, _| {
|
||||
Ok(json!(s.documents().iter().enumerate().map(|(i, d)| json!({"index": i, "title": d.title(), "dirty": d.is_dirty(), "active": Some(i) == s.active_index()})).collect::<Vec<_>>()))
|
||||
}),
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
//! ArtCraft community and project links (Help menu, About, start screen, CLI, MCP).
|
||||
//! Project links (Help menu, About, CLI, MCP).
|
||||
|
||||
use serde_json::{Value, json};
|
||||
|
||||
/// The app's slug on getartcraft.com and GitHub.
|
||||
/// The app's slug on GitHub.
|
||||
pub const APP: &str = "designcraft";
|
||||
/// The ArtCraft community Discord.
|
||||
pub const DISCORD: &str = "https://discord.gg/artcraft";
|
||||
/// The ArtCraft website.
|
||||
pub const WEBSITE: &str = "https://getartcraft.com";
|
||||
/// DesignCraft's page on the ArtCraft website.
|
||||
pub const APP_PAGE: &str = "https://getartcraft.com/apps/designcraft";
|
||||
/// DesignCraft's source repository.
|
||||
pub const GITHUB: &str = "https://github.com/storytold/designcraft";
|
||||
/// Where to report bugs and request features.
|
||||
@@ -18,20 +12,14 @@ pub const ISSUES: &str = "https://github.com/storytold/designcraft/issues";
|
||||
/// All links as JSON (the `app.links` command).
|
||||
pub fn all() -> Value {
|
||||
json!({
|
||||
"discord": DISCORD,
|
||||
"website": WEBSITE,
|
||||
"appPage": APP_PAGE,
|
||||
"github": GITHUB,
|
||||
"issues": ISSUES,
|
||||
})
|
||||
}
|
||||
|
||||
/// A link by key (`discord`, `website`, `appPage`, `github`, `issues`).
|
||||
/// A link by key (`github`, `issues`).
|
||||
pub fn get(key: &str) -> Option<&'static str> {
|
||||
Some(match key {
|
||||
"discord" => DISCORD,
|
||||
"website" => WEBSITE,
|
||||
"appPage" => APP_PAGE,
|
||||
"github" => GITHUB,
|
||||
"issues" => ISSUES,
|
||||
_ => return None,
|
||||
@@ -44,10 +32,9 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn links_follow_the_app_slug() {
|
||||
assert!(APP_PAGE.ends_with(&format!("/apps/{APP}")));
|
||||
assert!(GITHUB.ends_with(&format!("/storytold/{APP}")));
|
||||
assert!(ISSUES.starts_with(GITHUB));
|
||||
for k in ["discord", "website", "appPage", "github", "issues"] {
|
||||
for k in ["github", "issues"] {
|
||||
assert!(get(k).is_some_and(|u| u.starts_with("https://")), "{k}");
|
||||
assert_eq!(all()[k], get(k).unwrap());
|
||||
}
|
||||
|
||||
@@ -134,13 +134,12 @@ impl Server {
|
||||
Ok(json!({
|
||||
"protocolVersion": version,
|
||||
"capabilities": {"tools": {}, "resources": {}},
|
||||
"serverInfo": {"name": "designcraft", "title": "DesignCraft", "version": env!("CARGO_PKG_VERSION"), "websiteUrl": designcraft_engine::links::APP_PAGE},
|
||||
"serverInfo": {"name": "designcraft", "title": "DesignCraft", "version": env!("CARGO_PKG_VERSION"), "websiteUrl": designcraft_engine::links::GITHUB},
|
||||
"instructions": format!(
|
||||
"{INSTRUCTIONS} Backend: {}. Community: {} (Discord), {} (app page), {} (source). The `app.links` command returns these links.",
|
||||
"{INSTRUCTIONS} Backend: {}. Source: {}, issues: {}. The `app.links` command returns these links.",
|
||||
self.backend.describe(),
|
||||
designcraft_engine::links::DISCORD,
|
||||
designcraft_engine::links::APP_PAGE,
|
||||
designcraft_engine::links::GITHUB
|
||||
designcraft_engine::links::GITHUB,
|
||||
designcraft_engine::links::ISSUES
|
||||
),
|
||||
}))
|
||||
}
|
||||
|
||||
@@ -1,98 +1,16 @@
|
||||
//! Help › About DesignCraft: tabs About · Contributors · Models. About is the splash with the
|
||||
//! ArtCraft mark, version, and community links (Discord first and largest), plus the other ArtCraft
|
||||
//! apps; Contributors and Models are the compiled-in credits (`crate::credits`).
|
||||
//! version and project links; Contributors and Models are the compiled-in credits (`crate::credits`).
|
||||
|
||||
use designcraft_engine::links;
|
||||
use egui::{Color32, Rect, Sense, Stroke, pos2, vec2};
|
||||
use egui::{Color32, Sense, vec2};
|
||||
use serde_json::json;
|
||||
|
||||
use crate::DesignApp;
|
||||
use crate::theme::{Tokens, semibold};
|
||||
|
||||
/// ArtCraft brand blue (from `docs/brand/artcraft-mark.svg`).
|
||||
pub const BRAND: Color32 = Color32::from_rgb(0x4e, 0x7b, 0xfb);
|
||||
/// Discord's brand colour, used for the "Join our Discord" buttons (colour only; no Discord artwork).
|
||||
pub const DISCORD: Color32 = Color32::from_rgb(0x58, 0x65, 0xf2);
|
||||
|
||||
/// The ArtCraft mark outline (viewBox -10 -19.42 136.34 136.34), from `docs/brand/artcraft-mark.svg`.
|
||||
const MARK_PATH: &str = "M104.28,49.49L81.55,0h-31.23l-3.17,4.76L14.75,53.63,0,75.85l21.55,21.55,63.79-36.94,16.99,37.04,14.01-21.74-12.06-26.27ZM32.89,65.66l32.42-48.87,10.91,23.77-43.32,25.09Z";
|
||||
|
||||
/// The other ArtCraft apps (app-page slug, name, what it is) — same list as the README.
|
||||
pub const SIBLINGS: &[(&str, &str, &str)] = &[
|
||||
("photocraft", "PhotoCraft", "image editing"),
|
||||
("vectorcraft", "VectorCraft", "vector illustration"),
|
||||
("filmcraft", "FilmCraft", "video editing, color and sound"),
|
||||
("lightcraft", "LightCraft", "photo library and raw development"),
|
||||
("pdfcraft", "PdfCraft", "reading, organizing and protecting PDFs"),
|
||||
("effectcraft", "EffectCraft", "motion graphics and visual effects"),
|
||||
];
|
||||
|
||||
/// The About window's tabs, in `UiState::about_tab` order (`help.about {tab}` names them in lowercase).
|
||||
pub const ABOUT_TABS: [&str; 3] = ["About", "Contributors", "Models"];
|
||||
|
||||
/// Paint the ArtCraft mark into `rect` (square), rasterised once per size and cached.
|
||||
pub fn paint_mark(ui: &egui::Ui, rect: Rect, color: Color32) {
|
||||
use designcraft_render::vello_cpu::{self, kurbo, peniko};
|
||||
let ctx = ui.ctx();
|
||||
let ppp = ctx.pixels_per_point();
|
||||
let px = ((rect.width().min(rect.height()) * ppp).round() as u32).clamp(8, 1024);
|
||||
let key = egui::Id::new(("artcraft_mark", px, color.to_array()));
|
||||
let tex: Option<egui::TextureHandle> = ctx.data(|d| d.get_temp(key));
|
||||
let tex = tex.unwrap_or_else(|| {
|
||||
let mut rc = vello_cpu::RenderContext::new_with(px as u16, px as u16, vello_cpu::RenderSettings { num_threads: 0, ..Default::default() });
|
||||
let k = px as f64 / 136.34;
|
||||
rc.set_transform(kurbo::Affine::scale(k) * kurbo::Affine::translate((10.0, 19.42)));
|
||||
let [r, g, b, a] = color.to_srgba_unmultiplied();
|
||||
rc.set_paint(peniko::Color::from_rgba8(r, g, b, a));
|
||||
if let Ok(p) = kurbo::BezPath::from_svg(MARK_PATH) {
|
||||
rc.fill_path(&p);
|
||||
}
|
||||
rc.flush();
|
||||
let mut pm = vello_cpu::Pixmap::new(px as u16, px as u16);
|
||||
let mut res = vello_cpu::Resources::new();
|
||||
rc.render(&mut pm, &mut res);
|
||||
let ci = egui::ColorImage::from_rgba_premultiplied([px as usize, px as usize], pm.data_as_u8_slice());
|
||||
let t = ctx.load_texture("artcraft_mark", ci, egui::TextureOptions::LINEAR);
|
||||
ctx.data_mut(|d| d.insert_temp(key, t.clone()));
|
||||
t
|
||||
});
|
||||
let side = rect.width().min(rect.height());
|
||||
let r = Rect::from_center_size(rect.center(), vec2(side, side));
|
||||
ui.painter().image(tex.id(), r, Rect::from_min_max(pos2(0.0, 0.0), pos2(1.0, 1.0)), Color32::WHITE);
|
||||
}
|
||||
|
||||
/// A speech-bubble glyph (drawn in code) for Discord buttons.
|
||||
pub fn paint_chat_icon(p: &egui::Painter, c: egui::Pos2, s: f32, color: Color32) {
|
||||
let body = Rect::from_center_size(c - vec2(0.0, s * 0.06), vec2(s, s * 0.72));
|
||||
p.rect_filled(body, s * 0.24, color);
|
||||
let tail = vec![
|
||||
pos2(body.left() + s * 0.22, body.bottom() - 1.0),
|
||||
pos2(body.left() + s * 0.12, body.bottom() + s * 0.24),
|
||||
pos2(body.left() + s * 0.44, body.bottom() - 1.0),
|
||||
];
|
||||
p.add(egui::Shape::convex_polygon(tail, color, Stroke::NONE));
|
||||
let eye = s * 0.09;
|
||||
let bg = if color.r() as u32 + color.g() as u32 + color.b() as u32 > 380 { DISCORD } else { Color32::WHITE };
|
||||
p.circle_filled(body.center() - vec2(s * 0.18, 0.0), eye, bg);
|
||||
p.circle_filled(body.center() + vec2(s * 0.18, 0.0), eye, bg);
|
||||
}
|
||||
|
||||
/// The big "Join our Discord" button. Returns true when clicked.
|
||||
pub fn discord_button(ui: &mut egui::Ui, label: &str, size: egui::Vec2) -> bool {
|
||||
let (r, resp) = ui.allocate_exact_size(size, Sense::click());
|
||||
let resp = resp.on_hover_text(links::DISCORD).on_hover_cursor(egui::CursorIcon::PointingHand);
|
||||
let fill = if resp.hovered() { Color32::from_rgb(0x47, 0x52, 0xc4) } else { DISCORD };
|
||||
ui.painter().rect_filled(r, size.y / 2.0, fill);
|
||||
let icon = size.y * 0.5;
|
||||
let font = semibold((size.y * 0.42).max(11.0));
|
||||
let galley = crate::rtl::plain(ui.ctx(), label, font, Color32::WHITE);
|
||||
let total = icon + 8.0 + galley.size().x;
|
||||
let x0 = r.center().x - total / 2.0;
|
||||
paint_chat_icon(ui.painter(), pos2(x0 + icon / 2.0, r.center().y), icon, Color32::WHITE);
|
||||
ui.painter().galley(pos2(x0 + icon + 8.0, r.center().y - galley.size().y / 2.0), galley, Color32::WHITE);
|
||||
resp.clicked()
|
||||
}
|
||||
|
||||
/// A text link that opens `url`. Returns true when clicked.
|
||||
fn link(ui: &mut egui::Ui, text: &str, url: &str, color: Color32) -> bool {
|
||||
let resp = ui.add(egui::Label::new(egui::RichText::new(text).size(13.0).color(color).underline()).sense(Sense::click()));
|
||||
@@ -137,9 +55,6 @@ pub fn show(app: &mut DesignApp, ctx: &egui::Context) {
|
||||
}
|
||||
ui.vertical_centered(|ui| {
|
||||
ui.add_space(8.0);
|
||||
let (r, _) = ui.allocate_exact_size(vec2(72.0, 72.0), Sense::hover());
|
||||
paint_mark(ui, r, BRAND);
|
||||
ui.add_space(6.0);
|
||||
ui.label(crate::rtl::widget(
|
||||
ui,
|
||||
egui::RichText::new(crate::i18n::tr(&app.ui.language, "DesignCraft")).font(semibold(26.0)).color(t.text_strong),
|
||||
@@ -157,62 +72,18 @@ pub fn show(app: &mut DesignApp, ctx: &egui::Context) {
|
||||
.size(13.0)
|
||||
.color(t.text),
|
||||
));
|
||||
ui.label(crate::rtl::widget(
|
||||
ui,
|
||||
egui::RichText::new(crate::i18n::tr(&app.ui.language, "Part of the ArtCraft suite of open creative tools."))
|
||||
.size(12.0)
|
||||
.color(t.text_dim),
|
||||
));
|
||||
ui.add_space(16.0);
|
||||
if discord_button(ui, "Join the ArtCraft Discord", vec2(300.0, 40.0)) {
|
||||
open = Some("discord");
|
||||
}
|
||||
ui.add_space(4.0);
|
||||
ui.label(crate::rtl::widget(
|
||||
ui,
|
||||
egui::RichText::new(crate::i18n::tr(&app.ui.language, "discord.gg/artcraft — help, feedback and show-and-tell"))
|
||||
.size(11.0)
|
||||
.color(t.text_dim),
|
||||
));
|
||||
ui.add_space(14.0);
|
||||
ui.horizontal(|ui| {
|
||||
// Centre the row of links.
|
||||
let w = 330.0;
|
||||
let w = 190.0;
|
||||
ui.add_space(((ui.available_width() - w) / 2.0).max(0.0));
|
||||
for (text, key) in
|
||||
[("DesignCraft page", "appPage"), ("GitHub", "github"), ("getartcraft.com", "website"), ("Report an issue", "issues")]
|
||||
{
|
||||
for (text, key) in [("GitHub", "github"), ("Report an issue", "issues")] {
|
||||
if link(ui, text, links::get(key).unwrap_or_default(), t.accent) {
|
||||
open = Some(key);
|
||||
}
|
||||
ui.add_space(6.0);
|
||||
}
|
||||
});
|
||||
ui.add_space(16.0);
|
||||
ui.separator();
|
||||
ui.add_space(6.0);
|
||||
ui.label(crate::rtl::widget(
|
||||
ui,
|
||||
egui::RichText::new(crate::i18n::tr(&app.ui.language, "More ArtCraft apps")).font(semibold(12.0)).color(t.text_strong),
|
||||
));
|
||||
ui.add_space(4.0);
|
||||
ui.horizontal(|ui| {
|
||||
let pad = ui.spacing().button_padding.x * 2.0 + ui.spacing().item_spacing.x;
|
||||
let w: f32 = SIBLINGS
|
||||
.iter()
|
||||
.map(|(_, n, _)| ui.painter().layout_no_wrap(n.to_string(), egui::FontId::proportional(12.0), Color32::WHITE).size().x + pad)
|
||||
.sum::<f32>()
|
||||
- ui.spacing().item_spacing.x;
|
||||
ui.add_space(((ui.available_width() - w) / 2.0).max(0.0));
|
||||
for (slug, name, what) in SIBLINGS {
|
||||
let url = format!("{}/apps/{slug}", links::WEBSITE);
|
||||
let b =
|
||||
ui.add(egui::Button::new(egui::RichText::new(*name).size(12.0)).corner_radius(10.0)).on_hover_text(format!("{what} — {url}"));
|
||||
if b.clicked() {
|
||||
app.ui.pending_urls.push(url);
|
||||
}
|
||||
}
|
||||
});
|
||||
ui.add_space(12.0);
|
||||
ui.label(crate::rtl::widget(
|
||||
ui,
|
||||
|
||||
@@ -123,11 +123,6 @@ pub fn app_bar(app: &mut DesignApp, ui: &mut egui::Ui) {
|
||||
if icons::button(ui, "share", 22.0, false, crate::i18n::tr(&app.ui.language, "Share")).clicked() {
|
||||
app.status("Export a PDF, IDML or package to share — no cloud account needed.");
|
||||
}
|
||||
ui.add_space(8.0);
|
||||
// Always one click away: the ArtCraft community Discord.
|
||||
if crate::about::discord_button(ui, "Discord", vec2(78.0, 22.0)) {
|
||||
let _ = app.run("help.discord", json!({}));
|
||||
}
|
||||
tools_start = ui.min_rect().min.x;
|
||||
ui.min_rect().width()
|
||||
});
|
||||
@@ -684,8 +679,6 @@ pub fn start_screen(app: &mut DesignApp, ui: &mut egui::Ui) {
|
||||
let _ = app.run("file.newSample", json!({}));
|
||||
}
|
||||
});
|
||||
ui.add_space(20.0);
|
||||
community_card(app, ui);
|
||||
ui.add_space(24.0);
|
||||
ui.label(crate::rtl::widget(
|
||||
ui,
|
||||
@@ -718,50 +711,6 @@ pub fn start_screen(app: &mut DesignApp, ui: &mut egui::Ui) {
|
||||
let _ = Content::Unassigned;
|
||||
}
|
||||
|
||||
/// Start screen: the ArtCraft community (Discord first) and project links.
|
||||
fn community_card(app: &mut DesignApp, ui: &mut egui::Ui) {
|
||||
let t = Tokens::get(ui.ctx());
|
||||
egui::Frame::NONE.fill(t.panel).corner_radius(10.0).inner_margin(egui::Margin::same(14)).show(ui, |ui| {
|
||||
ui.set_max_width(640.0);
|
||||
ui.horizontal(|ui| {
|
||||
let (r, _) = ui.allocate_exact_size(vec2(44.0, 44.0), Sense::hover());
|
||||
crate::about::paint_mark(ui, r, crate::about::BRAND);
|
||||
ui.add_space(8.0);
|
||||
ui.vertical(|ui| {
|
||||
ui.label(crate::rtl::widget(
|
||||
ui,
|
||||
egui::RichText::new(crate::i18n::tr(&app.ui.language, "Join the ArtCraft community")).font(semibold(14.0)).color(t.text_strong),
|
||||
));
|
||||
ui.label(crate::rtl::widget(
|
||||
ui,
|
||||
egui::RichText::new(crate::i18n::tr(&app.ui.language, "Get help, share your layouts and shape what we build next."))
|
||||
.size(12.0)
|
||||
.color(t.text_dim),
|
||||
));
|
||||
ui.add_space(4.0);
|
||||
ui.horizontal(|ui| {
|
||||
for (text, id) in [("DesignCraft page", "help.appPage"), ("GitHub", "help.github"), ("getartcraft.com", "help.website")] {
|
||||
let url = designcraft_engine::links::get(&id[5..]).unwrap_or_default();
|
||||
let l = ui
|
||||
.add(egui::Label::new(egui::RichText::new(text).size(12.0).color(t.accent).underline()).sense(Sense::click()))
|
||||
.on_hover_text(url)
|
||||
.on_hover_cursor(egui::CursorIcon::PointingHand);
|
||||
if l.clicked() {
|
||||
let _ = app.run(id, json!({}));
|
||||
}
|
||||
ui.add_space(8.0);
|
||||
}
|
||||
});
|
||||
});
|
||||
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
|
||||
if crate::about::discord_button(ui, crate::i18n::tr(&app.ui.language, "Join our Discord"), vec2(190.0, 38.0)) {
|
||||
let _ = app.run("help.discord", json!({}));
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use egui::{pos2, vec2};
|
||||
|
||||
@@ -743,8 +743,6 @@ const TABLE: &[(&str, [&str; 5])] = &[
|
||||
"Apply Parent to Pages…",
|
||||
["Apply Parent to Pages…", "Apply Parent to Pages…", "Apply Parent to Pages…", "Apply Parent to Pages…", "将主页应用于页面…"],
|
||||
),
|
||||
("ArtCraft App Page…", ["ArtCraft App Page…", "ArtCraft App Page…", "ArtCraft App Page…", "ArtCraft App Page…", "ArtCraft 应用页面…"]),
|
||||
("ArtCraft Website…", ["ArtCraft Website…", "ArtCraft Website…", "ArtCraft Website…", "ArtCraft Website…", "ArtCraft 网站…"]),
|
||||
("Attributes", ["Attributes", "Attributes", "Attributes", "Attributes", "属性"]),
|
||||
("Bevel and Emboss", ["Bevel and Emboss", "Bevel and Emboss", "Bevel and Emboss", "Bevel and Emboss", "斜面和浮雕"]),
|
||||
("Buttons", ["Buttons", "Buttons", "Buttons", "Buttons", "按钮"]),
|
||||
@@ -1020,16 +1018,6 @@ const TABLE: &[(&str, [&str; 5])] = &[
|
||||
("Insert Variable", ["Insert Variable", "Insert Variable", "Insert Variable", "Insert Variable", "插入变量"]),
|
||||
("Inspect Document", ["Inspect Document", "Inspect Document", "Inspect Document", "Inspect Document", "检查文档"]),
|
||||
("Interface Color Theme", ["Interface Color Theme", "Interface Color Theme", "Interface Color Theme", "Interface Color Theme", "界面颜色主题"]),
|
||||
(
|
||||
"Join the ArtCraft Discord…",
|
||||
[
|
||||
"Join the ArtCraft Discord…",
|
||||
"Join the ArtCraft Discord…",
|
||||
"Join the ArtCraft Discord…",
|
||||
"Join the ArtCraft Discord…",
|
||||
"加入 ArtCraft Discord…",
|
||||
],
|
||||
),
|
||||
("Last Object Below", ["Last Object Below", "Last Object Below", "Last Object Below", "Last Object Below", "下方最后一个对象"]),
|
||||
("Library Contents", ["Library Contents", "Library Contents", "Library Contents", "Library Contents", "库内容"]),
|
||||
("Library Items", ["Library Items", "Library Items", "Library Items", "Library Items", "库项目"]),
|
||||
@@ -1556,20 +1544,9 @@ const TABLE: &[(&str, [&str; 5])] = &[
|
||||
("Hyphens and Dashes", ["Hyphens and Dashes", "Hyphens and Dashes", "Hyphens and Dashes", "Hyphens and Dashes", "连字符和破折号"]),
|
||||
("Interactive", ["Interactive", "Interactive", "Interactive", "Interactive", "交互式"]),
|
||||
("Invert", ["Invert", "Invert", "Invert", "Invert", "反相"]),
|
||||
(
|
||||
"Join the ArtCraft community",
|
||||
[
|
||||
"Join the ArtCraft community",
|
||||
"Join the ArtCraft community",
|
||||
"Join the ArtCraft community",
|
||||
"Join the ArtCraft community",
|
||||
"加入 ArtCraft 社区",
|
||||
],
|
||||
),
|
||||
("Keyboard Increments", ["Keyboard Increments", "Keyboard Increments", "Keyboard Increments", "Keyboard Increments", "键盘增量"]),
|
||||
("Liquid guides", ["Liquid guides", "Liquid guides", "Liquid guides", "Liquid guides", "自适应参考线"]),
|
||||
("Markers", ["Markers", "Markers", "Markers", "Markers", "标记"]),
|
||||
("More ArtCraft apps", ["More ArtCraft apps", "More ArtCraft apps", "More ArtCraft apps", "More ArtCraft apps", "更多 ArtCraft 应用"]),
|
||||
("Nested Line Styles", ["Nested Line Styles", "Nested Line Styles", "Nested Line Styles", "Nested Line Styles", "嵌套行样式"]),
|
||||
("Nested Styles", ["Nested Styles", "Nested Styles", "Nested Styles", "Nested Styles", "嵌套样式"]),
|
||||
(
|
||||
@@ -1688,16 +1665,6 @@ const TABLE: &[(&str, [&str; 5])] = &[
|
||||
],
|
||||
),
|
||||
("Page · PPI", ["Page · PPI", "Page · PPI", "Page · PPI", "Page · PPI", "页面 · PPI"]),
|
||||
(
|
||||
"Part of the ArtCraft suite of open creative tools.",
|
||||
[
|
||||
"Part of the ArtCraft suite of open creative tools.",
|
||||
"Part of the ArtCraft suite of open creative tools.",
|
||||
"Part of the ArtCraft suite of open creative tools.",
|
||||
"Part of the ArtCraft suite of open creative tools.",
|
||||
"ArtCraft 开源创意工具套件的一部分。",
|
||||
],
|
||||
),
|
||||
("Pasteboard Options", ["Pasteboard Options", "Pasteboard Options", "Pasteboard Options", "Pasteboard Options", "粘贴板选项"]),
|
||||
("Paths", ["Paths", "Paths", "Paths", "Paths", "路径"]),
|
||||
(
|
||||
@@ -1872,16 +1839,6 @@ const TABLE: &[(&str, [&str; 5])] = &[
|
||||
"[无] — 在色带上选择一种颜色。",
|
||||
],
|
||||
),
|
||||
(
|
||||
"discord.gg/artcraft — help, feedback and show-and-tell",
|
||||
[
|
||||
"discord.gg/artcraft — help, feedback and show-and-tell",
|
||||
"discord.gg/artcraft — help, feedback and show-and-tell",
|
||||
"discord.gg/artcraft — help, feedback and show-and-tell",
|
||||
"discord.gg/artcraft — help, feedback and show-and-tell",
|
||||
"discord.gg/artcraft — 帮助、反馈和展示",
|
||||
],
|
||||
),
|
||||
(
|
||||
"⌥-click clears overrides",
|
||||
["⌥-click clears overrides", "⌥-click clears overrides", "⌥-click clears overrides", "⌥-click clears overrides", "⌥-单击清除覆盖"],
|
||||
@@ -2607,7 +2564,6 @@ const TABLE: &[(&str, [&str; 5])] = &[
|
||||
("H&J Violations", ["H&J Violations", "H&J Violations", "H&J Violations", "H&J Violations", "断字与对齐违规"]),
|
||||
("Include Bleed", ["Include Bleed", "Include Bleed", "Include Bleed", "Include Bleed", "包含出血"]),
|
||||
("Include Stroke Weight", ["Include Stroke Weight", "Include Stroke Weight", "Include Stroke Weight", "Include Stroke Weight", "包含描边粗细"]),
|
||||
("Join our Discord", ["Join our Discord", "Join our Discord", "Join our Discord", "Join our Discord", "加入我们的 Discord 社区"]),
|
||||
("Keep Violations", ["Keep Violations", "Keep Violations", "Keep Violations", "Keep Violations", "保持选项违规"]),
|
||||
(
|
||||
"Overprint [Black] Swatch at 100%",
|
||||
|
||||
@@ -156,12 +156,9 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
(" Open sample magazine ", " فتح نموذج المجلة "),
|
||||
("Start a new document", "بدء مستند جديد"),
|
||||
("No document open", "لا يوجد مستند مفتوح"),
|
||||
("Join the ArtCraft community", "انضم إلى مجتمع ArtCraft"),
|
||||
("Get help, share your layouts and shape what we build next.", "احصل على المساعدة وشارك تصميماتك وساهم في تطوير التطبيق."),
|
||||
("Join our Discord", "انضم إلى Discord"),
|
||||
("Community", "المجتمع"),
|
||||
("Join the community", "انضم إلى المجتمع"),
|
||||
("discord.gg/artcraft — help, feedback and show-and-tell", "discord.gg/artcraft — مساعدة وآراء وعرض الأعمال"),
|
||||
(" OK ", " موافق "),
|
||||
("Float panel", "تعويم اللوحة"),
|
||||
("Dock panel", "إرساء اللوحة"),
|
||||
@@ -895,7 +892,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Merge into Active Layer", "دمج في الطبقة النشطة"),
|
||||
("Misspelled word → Correction (one per line):", "كلمة خاطئة ← تصحيح (واحد في كل سطر):"),
|
||||
("Mobile", "جوال"),
|
||||
("More ArtCraft apps", "المزيد من تطبيقات ArtCraft"),
|
||||
("Move Selection Here", "نقل التحديد إلى هنا"),
|
||||
("Move to Color Group", "نقل إلى مجموعة ألوان"),
|
||||
("Move to Group", "نقل إلى مجموعة"),
|
||||
@@ -934,7 +930,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Page Numbering", "ترقيم الصفحات"),
|
||||
("Page · PPI", "صفحة · PPI"),
|
||||
("Pages:", "الصفحات:"),
|
||||
("Part of the ArtCraft suite of open creative tools.", "جزء من مجموعة ArtCraft للأدوات الإبداعية المفتوحة."),
|
||||
("Pasteboard Options", "خيارات مساحة اللصق"),
|
||||
("Path", "مسار"),
|
||||
("Place the insertion point in a table, or create one.", "ضع نقطة الإدراج داخل جدول أو أنشئ جدولًا."),
|
||||
@@ -1110,8 +1105,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Apply Cell Style", "تطبيق نمط الخلية"),
|
||||
("Apply Condition", "تطبيق شرط"),
|
||||
("Apply Parent to Pages…", "تطبيق الصفحة الأصلية على الصفحات…"),
|
||||
("ArtCraft App Page…", "صفحة تطبيق ArtCraft…"),
|
||||
("ArtCraft Website…", "موقع ArtCraft…"),
|
||||
("Attributes", "السمات"),
|
||||
("Bevel and Emboss", "القطع المشطوف والنقش البارز"),
|
||||
("Buttons", "أزرار"),
|
||||
@@ -1213,7 +1206,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Insert Variable", "إدراج متغير"),
|
||||
("Inspect Document", "فحص المستند"),
|
||||
("Interface Color Theme", "نسق ألوان الواجهة"),
|
||||
("Join the ArtCraft Discord…", "الانضمام إلى Discord الخاص بـ ArtCraft…"),
|
||||
("Last Object Below", "آخر كائن أسفل"),
|
||||
("Library Contents", "محتويات المكتبة"),
|
||||
("Library Items", "عناصر المكتبة"),
|
||||
|
||||
@@ -413,8 +413,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Apply Color", "Applica colore"),
|
||||
("Apply Condition", "Applica condizione"),
|
||||
("Apply Parent to Pages…", "Applica pagina mastro alle pagine…"),
|
||||
("ArtCraft App Page…", "Pagina dell'app ArtCraft…"),
|
||||
("ArtCraft Website…", "Sito web di ArtCraft…"),
|
||||
("Attributes", "Attributi"),
|
||||
("Bevel and Emboss", "Smusso e rilievo"),
|
||||
("Buttons", "Pulsanti"),
|
||||
@@ -541,7 +539,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Insert Variable", "Inserisci variabile"),
|
||||
("Inspect Document", "Ispeziona documento"),
|
||||
("Interface Color Theme", "Tema colore dell'interfaccia"),
|
||||
("Join the ArtCraft Discord…", "Unisciti al Discord di ArtCraft…"),
|
||||
("Last Object Below", "Ultimo oggetto sotto"),
|
||||
("Library Contents", "Contenuto libreria"),
|
||||
("Library Items", "Elementi libreria"),
|
||||
@@ -846,11 +843,9 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Hyphens and Dashes", "Trattini e lineette"),
|
||||
("Interactive", "Interattivo"),
|
||||
("Invert", "Inverti"),
|
||||
("Join the ArtCraft community", "Unisciti alla community ArtCraft"),
|
||||
("Keyboard Increments", "Incrementi da tastiera"),
|
||||
("Liquid guides", "Guide liquide"),
|
||||
("Markers", "Indicatori"),
|
||||
("More ArtCraft apps", "Altre app ArtCraft"),
|
||||
("Nested Line Styles", "Stili di riga nidificati"),
|
||||
("Nested Styles", "Stili nidificati"),
|
||||
("No articles: exports follow page order.", "Nessun articolo: le esportazioni seguono l'ordine delle pagine."),
|
||||
@@ -885,7 +880,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
"Impaginazione per la stampa e lo schermo — veloce, aperta e automatizzabile con script.",
|
||||
),
|
||||
("Page · PPI", "Pagina · PPI"),
|
||||
("Part of the ArtCraft suite of open creative tools.", "Parte della suite ArtCraft di strumenti creativi aperti."),
|
||||
("Pasteboard Options", "Opzioni tavolo di montaggio"),
|
||||
("Paths", "Tracciati"),
|
||||
("Place the insertion point in a table, or create one.", "Posiziona il punto di inserimento in una tabella o creane una."),
|
||||
@@ -937,7 +931,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("[No Group]", "[Nessun gruppo]"),
|
||||
("[None]", "[Nessuno]"),
|
||||
("[None] — choose a colour on the ramp.", "[Nessuno] — scegli un colore sulla barra dei colori."),
|
||||
("discord.gg/artcraft — help, feedback and show-and-tell", "discord.gg/artcraft — aiuto, feedback e condivisione dei lavori"),
|
||||
("⌥-click clears overrides", "⌥-clic cancella le modifiche locali"),
|
||||
("⚠ out of date", "⚠ non aggiornato"),
|
||||
("General", "Generale"),
|
||||
@@ -1338,7 +1331,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("H&J Violations", "Violazioni di sillabazione e giustificazione"),
|
||||
("Include Bleed", "Includi pagina al vivo"),
|
||||
("Include Stroke Weight", "Includi spessore traccia"),
|
||||
("Join our Discord", "Unisciti al nostro Discord"),
|
||||
("Keep Violations", "Violazioni opzioni di mantenimento"),
|
||||
("Overprint [Black] Swatch at 100%", "Sovrastampa campione [Nero] al 100%"),
|
||||
("Printer's Marks", "Segni di stampa"),
|
||||
|
||||
@@ -415,8 +415,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Apply Color", "カラーを適用"),
|
||||
("Apply Condition", "条件を適用"),
|
||||
("Apply Parent to Pages…", "ページに親ページを適用…"),
|
||||
("ArtCraft App Page…", "ArtCraft アプリページ…"),
|
||||
("ArtCraft Website…", "ArtCraft ウェブサイト…"),
|
||||
("Attributes", "属性"),
|
||||
("Bevel and Emboss", "ベベルとエンボス"),
|
||||
("Buttons", "ボタン"),
|
||||
@@ -543,7 +541,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Insert Variable", "変数を挿入"),
|
||||
("Inspect Document", "ドキュメントを調査"),
|
||||
("Interface Color Theme", "インターフェイスのカラーテーマ"),
|
||||
("Join the ArtCraft Discord…", "ArtCraft の Discord に参加…"),
|
||||
("Last Object Below", "最背面のオブジェクト"),
|
||||
("Library Contents", "ライブラリの内容"),
|
||||
("Library Items", "ライブラリの項目"),
|
||||
@@ -845,11 +842,9 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Hyphens and Dashes", "ハイフンとダッシュ"),
|
||||
("Interactive", "インタラクティブ"),
|
||||
("Invert", "反転"),
|
||||
("Join the ArtCraft community", "ArtCraft コミュニティに参加"),
|
||||
("Keyboard Increments", "キーボードの移動量"),
|
||||
("Liquid guides", "リキッドガイド"),
|
||||
("Markers", "マーカー"),
|
||||
("More ArtCraft apps", "他の ArtCraft アプリ"),
|
||||
("Nested Line Styles", "入れ子行スタイル"),
|
||||
("Nested Styles", "入れ子スタイル"),
|
||||
("No articles: exports follow page order.", "アーティクルがありません。ページ順に書き出します。"),
|
||||
@@ -884,7 +879,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
"印刷・画面向けの高速なページレイアウトツールです。オープンで、スクリプトにも対応します。",
|
||||
),
|
||||
("Page · PPI", "ページ・PPI"),
|
||||
("Part of the ArtCraft suite of open creative tools.", "オープンな制作ツール群 ArtCraft の一部です。"),
|
||||
("Pasteboard Options", "ペーストボードのオプション"),
|
||||
("Paths", "パス"),
|
||||
("Place the insertion point in a table, or create one.", "表内に挿入位置を置くか、表を作成してください。"),
|
||||
@@ -936,7 +930,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("[No Group]", "[グループなし]"),
|
||||
("[None]", "[なし]"),
|
||||
("[None] — choose a colour on the ramp.", "[なし] — カラーバーでカラーを選択してください。"),
|
||||
("discord.gg/artcraft — help, feedback and show-and-tell", "discord.gg/artcraft — サポート・ご意見・作品紹介"),
|
||||
("⌥-click clears overrides", "⌥ を押しながらクリックするとオーバーライドを消去します"),
|
||||
("⚠ out of date", "⚠ 要更新"),
|
||||
("General", "一般"),
|
||||
@@ -1334,7 +1327,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("H&J Violations", "H&J の制約違反"),
|
||||
("Include Bleed", "裁ち落としを含める"),
|
||||
("Include Stroke Weight", "線の太さを含める"),
|
||||
("Join our Discord", "Discord に参加"),
|
||||
("Keep Violations", "段落保持の制約違反"),
|
||||
("Overprint [Black] Swatch at 100%", "100% の「黒」スウォッチをオーバープリント"),
|
||||
("Printer's Marks", "プリント用マーク"),
|
||||
@@ -1459,8 +1451,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
// few field labels.
|
||||
("Anchored Object Options", "アンカー付きオブジェクトのオプション"),
|
||||
("Apply Parent to Pages", "ページに親ページを適用"),
|
||||
("ArtCraft App Page", "ArtCraft アプリページ"),
|
||||
("ArtCraft Website", "ArtCraft ウェブサイト"),
|
||||
("Check Spelling", "スペルチェック"),
|
||||
("Corner Options", "角のオプション"),
|
||||
("Create Guides", "ガイドを作成"),
|
||||
@@ -1489,7 +1479,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Insert Cross-Reference", "相互参照を挿入"),
|
||||
("Insert Math Expression", "数式を挿入"),
|
||||
("Insert Pages", "ページを挿入"),
|
||||
("Join the ArtCraft Discord", "ArtCraft の Discord に参加"),
|
||||
("Load DTD", "DTD を読み込み"),
|
||||
("Load Swatches", "スウォッチを読み込み"),
|
||||
("Margins and Columns", "マージン・段組"),
|
||||
|
||||
@@ -156,15 +156,12 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
(" Open sample magazine ", " Abrir revista de exemplo "),
|
||||
("Start a new document", "Iniciar um novo documento"),
|
||||
("No document open", "Nenhum documento aberto"),
|
||||
("Join the ArtCraft community", "Junte-se à comunidade ArtCraft"),
|
||||
(
|
||||
"Get help, share your layouts and shape what we build next.",
|
||||
"Obtenha ajuda, compartilhe seus layouts e ajude a moldar o que construímos em seguida.",
|
||||
),
|
||||
("Join our Discord", "Junte-se ao nosso Discord"),
|
||||
("Community", "Comunidade"),
|
||||
("Join the community", "Junte-se à comunidade"),
|
||||
("discord.gg/artcraft — help, feedback and show-and-tell", "discord.gg/artcraft — ajuda, feedback e demonstrações"),
|
||||
(" OK ", " OK "),
|
||||
("Float panel", "Painel flutuante"),
|
||||
("Dock panel", "Painel encaixado"),
|
||||
@@ -897,7 +894,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Merge into Active Layer", "Mesclar na camada ativa"),
|
||||
("Misspelled word → Correction (one per line):", "Palavra incorreta → Correção (uma por linha):"),
|
||||
("Mobile", "Dispositivo móvel"),
|
||||
("More ArtCraft apps", "Mais aplicativos ArtCraft"),
|
||||
("Move Selection Here", "Mover a seleção para cá"),
|
||||
("Move to Color Group", "Mover para grupo de cores"),
|
||||
("Move to Group", "Mover para grupo"),
|
||||
@@ -942,7 +938,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Page Numbering", "Numeração de página"),
|
||||
("Page · PPI", "Página · PPI"),
|
||||
("Pages:", "Páginas:"),
|
||||
("Part of the ArtCraft suite of open creative tools.", "Parte do conjunto ArtCraft de ferramentas criativas abertas."),
|
||||
("Pasteboard Options", "Opções da área de transferência"),
|
||||
("Path", "Caminho"),
|
||||
("Place the insertion point in a table, or create one.", "Coloque o ponto de inserção em uma tabela ou crie uma."),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//! Ukrainian interface translations; publishing terms are reviewed in context.
|
||||
//! Common phrases are adapted from the MIT OR Apache-2.0 ArtCraft sibling catalogs
|
||||
//! Common phrases are adapted from the MIT OR Apache-2.0 sibling catalogs
|
||||
//! (VectorCraft, PhotoCraft, WordCraft and DeckCraft); see ASSETS.md for pinned sources.
|
||||
pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("File", "Файл"),
|
||||
@@ -416,8 +416,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Apply Color", "Застосувати колір"),
|
||||
("Apply Condition", "Застосувати умову"),
|
||||
("Apply Parent to Pages…", "Застосувати шаблон до сторінок…"),
|
||||
("ArtCraft App Page…", "Сторінка програми ArtCraft…"),
|
||||
("ArtCraft Website…", "Вебсайт ArtCraft…"),
|
||||
("Attributes", "Атрибути"),
|
||||
("Bevel and Emboss", "Скіс і рельєф"),
|
||||
("Buttons", "Кнопки"),
|
||||
@@ -544,7 +542,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Insert Variable", "Вставити змінну"),
|
||||
("Inspect Document", "Перевірити документ"),
|
||||
("Interface Color Theme", "Колірна тема інтерфейсу"),
|
||||
("Join the ArtCraft Discord…", "Приєднатися до Discord ArtCraft…"),
|
||||
("Last Object Below", "Останній об’єкт нижче"),
|
||||
("Library Contents", "Вміст бібліотеки"),
|
||||
("Library Items", "Елементи бібліотеки"),
|
||||
@@ -846,11 +843,9 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Hyphens and Dashes", "Дефіси та тире"),
|
||||
("Interactive", "Інтерактивність"),
|
||||
("Invert", "Інвертувати"),
|
||||
("Join the ArtCraft community", "Приєднатися до спільноти ArtCraft"),
|
||||
("Keyboard Increments", "Кроки переміщення клавішами"),
|
||||
("Liquid guides", "Напрямні гнучкого макета"),
|
||||
("Markers", "Маркери"),
|
||||
("More ArtCraft apps", "Інші програми ArtCraft"),
|
||||
("Nested Line Styles", "Вкладені стилі рядків"),
|
||||
("Nested Styles", "Вкладені стилі"),
|
||||
("No articles: exports follow page order.", "Немає статей: експорт дотримується порядку сторінок."),
|
||||
@@ -882,7 +877,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("Page Numbering", "Нумерація сторінок"),
|
||||
("Page layout for print and screen — fast, open and scriptable.", "Верстка для друку й екрана — швидка, відкрита, зі сценаріями."),
|
||||
("Page · PPI", "Сторінка · PPI"),
|
||||
("Part of the ArtCraft suite of open creative tools.", "Частина набору відкритих творчих інструментів ArtCraft."),
|
||||
("Pasteboard Options", "Параметри монтажного столу"),
|
||||
("Paths", "Контури"),
|
||||
("Place the insertion point in a table, or create one.", "Установіть курсор у таблиці або створіть її."),
|
||||
@@ -934,7 +928,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("[No Group]", "[Без групи]"),
|
||||
("[None]", "[Немає]"),
|
||||
("[None] — choose a colour on the ramp.", "[Немає] — виберіть колір на шкалі."),
|
||||
("discord.gg/artcraft — help, feedback and show-and-tell", "discord.gg/artcraft — допомога, відгуки та обмін роботами"),
|
||||
("⌥-click clears overrides", "⌥-клацання скидає перевизначення"),
|
||||
("⚠ out of date", "⚠ застаріле"),
|
||||
("General", "Загальні"),
|
||||
@@ -1335,7 +1328,6 @@ pub(super) const TABLE: &[(&str, &str)] = &[
|
||||
("H&J Violations", "Порушення переносів і вирівнювання"),
|
||||
("Include Bleed", "Включати виліт"),
|
||||
("Include Stroke Weight", "Враховувати товщину обведення"),
|
||||
("Join our Discord", "Приєднуйтесь до нашого Discord"),
|
||||
("Keep Violations", "Порушення правил утримання рядків"),
|
||||
("Overprint [Black] Swatch at 100%", "Накладання зразка [Чорний] на 100%"),
|
||||
("Printer's Marks", "Друкарські позначки"),
|
||||
|
||||
@@ -158,12 +158,8 @@ pub const UI_COMMANDS: &[(&str, &str, Option<&str>, &str)] = &[
|
||||
"{on?: bool, at?: [x, y] (points from the canvas's top-left)} — the Contextual Task Bar stays where it is (or at `at`) instead of following the selection; with neither, toggles",
|
||||
),
|
||||
("window.taskBarReset", "Reset Bar Position", None, "{} — the Contextual Task Bar follows the selection again, under it"),
|
||||
("help.discord", "Join the ArtCraft Discord…", None, "{} — opens https://discord.gg/artcraft in the browser"),
|
||||
("help.appPage", "DesignCraft Website…", None, "{} — opens https://getartcraft.com/apps/designcraft"),
|
||||
("help.github", "DesignCraft on GitHub…", None, "{} — opens https://github.com/storytold/designcraft"),
|
||||
("help.issues", "Report an Issue…", None, "{} — opens the GitHub issue tracker"),
|
||||
("help.website", "ArtCraft Website…", None, "{} — opens https://getartcraft.com"),
|
||||
("help.app", "ArtCraft App Page…", None, "{app} — opens https://getartcraft.com/apps/{app} (e.g. photocraft)"),
|
||||
(
|
||||
"help.about",
|
||||
"About DesignCraft",
|
||||
@@ -700,21 +696,7 @@ pub const MENUS: &[(&str, &[&str])] = &[
|
||||
"ui:window.brightness",
|
||||
],
|
||||
),
|
||||
(
|
||||
"Help",
|
||||
&[
|
||||
"ui:help.discord",
|
||||
"-",
|
||||
"ui:help.appPage",
|
||||
"ui:help.github",
|
||||
"ui:help.issues",
|
||||
"ui:help.website",
|
||||
"-",
|
||||
"cmd:file.newSample",
|
||||
"-",
|
||||
"ui:help.about",
|
||||
],
|
||||
),
|
||||
("Help", &["ui:help.github", "ui:help.issues", "-", "cmd:file.newSample", "-", "ui:help.about"]),
|
||||
];
|
||||
|
||||
pub fn ui_label(id: &str) -> Option<(&'static str, Option<&'static str>)> {
|
||||
@@ -1368,14 +1350,6 @@ pub fn run_ui(app: &mut DesignApp, id: &str, p: &Value) -> Option<Result<Value,
|
||||
app.ui.about = p.get("open").and_then(Value::as_bool).unwrap_or(true);
|
||||
Ok(json!(app.ui.about))
|
||||
}
|
||||
"help.app" => match p.get("app").and_then(Value::as_str) {
|
||||
Some(slug) if !slug.is_empty() && slug.chars().all(|c| c.is_ascii_alphanumeric() || c == '-') => {
|
||||
let url = format!("{}/apps/{slug}", designcraft_engine::links::WEBSITE);
|
||||
app.ui.pending_urls.push(url.clone());
|
||||
Ok(json!({"url": url}))
|
||||
}
|
||||
_ => Err("help.app: give `app` (e.g. \"photocraft\")".into()),
|
||||
},
|
||||
h if h.starts_with("help.") && designcraft_engine::links::get(&h[5..]).is_some() => {
|
||||
let url = designcraft_engine::links::get(&h[5..]).unwrap_or_default().to_string();
|
||||
app.ui.pending_urls.push(url.clone());
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
ArtCraft brand assets: license
|
||||
|
||||
The ArtCraft name, wordmark and mark (the "ArtCraft Marks"), including every file in this
|
||||
directory in every color, size and format, are owned by the ArtCraft Team. They are trademarks
|
||||
and are NOT open source. They are not covered by DesignCraft's MIT OR Apache-2.0 license, and nothing in
|
||||
that license, in NOTICE or in any other file of this repository grants any right to them.
|
||||
|
||||
Permission
|
||||
|
||||
The ArtCraft Team grants a limited, non-exclusive, non-transferable, revocable, royalty-free
|
||||
permission to use the ArtCraft Marks only:
|
||||
|
||||
1. as part of copies of this repository; and
|
||||
2. within DesignCraft itself, its documentation and its official builds, to identify DesignCraft as made
|
||||
by the ArtCraft team and community and to link to getartcraft.com and its community.
|
||||
|
||||
Conditions
|
||||
|
||||
The permission holds only while every one of these is true:
|
||||
|
||||
- The marks are used exactly as supplied in this directory. Do not redraw, recolor, crop,
|
||||
stretch, rotate, animate, outline or add effects to them, extract parts of them, or combine
|
||||
them with any other name, mark or artwork.
|
||||
- They are used only in the context of DesignCraft, and only to say that the ArtCraft team makes it.
|
||||
They must never suggest that the ArtCraft Team made, sponsors, endorses, certifies or supports
|
||||
any other product, service, fork, modified version, plug-in, organization or person.
|
||||
- Neither the marks nor the ArtCraft name appear in the name, logo, icon, domain, social media
|
||||
handle, app-store listing, advertising or marketing of anything other than DesignCraft.
|
||||
|
||||
Forks and modified versions
|
||||
|
||||
If you distribute or publish a modified version of DesignCraft, or any work derived from it, you must
|
||||
remove the ArtCraft Marks from it (or replace them with your own) and must not call it ArtCraft or
|
||||
present it as an ArtCraft product. You may say, in plain text, that your work is based on DesignCraft by
|
||||
the ArtCraft team. A fork kept only to propose changes back to this repository may keep the marks
|
||||
unchanged.
|
||||
|
||||
Everything else
|
||||
|
||||
Any use not expressly permitted here needs prior written permission from the ArtCraft Team
|
||||
(https://getartcraft.com/). The permission ends automatically for anyone who breaks these terms.
|
||||
All other rights are reserved.
|
||||
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 26 KiB |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -19.42 136.34 136.34" role="img" aria-label="ArtCraft">
|
||||
<title>ArtCraft</title>
|
||||
<path fill="#0b0b0c" d="M104.28,49.49L81.55,0h-31.23l-3.17,4.76L14.75,53.63,0,75.85l21.55,21.55,63.79-36.94,16.99,37.04,14.01-21.74-12.06-26.27ZM32.89,65.66l32.42-48.87,10.91,23.77-43.32,25.09Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 341 B |
|
Before Width: | Height: | Size: 24 KiB |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -19.42 136.34 136.34" role="img" aria-label="ArtCraft">
|
||||
<title>ArtCraft</title>
|
||||
<path fill="#4e7bfb" d="M104.28,49.49L81.55,0h-31.23l-3.17,4.76L14.75,53.63,0,75.85l21.55,21.55,63.79-36.94,16.99,37.04,14.01-21.74-12.06-26.27ZM32.89,65.66l32.42-48.87,10.91,23.77-43.32,25.09Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 341 B |
@@ -118,4 +118,4 @@ key {"key": "Escape"}
|
||||
|
||||
## Community links
|
||||
|
||||
`app.links` returns the ArtCraft Discord (https://discord.gg/artcraft), the website (https://getartcraft.com), DesignCraft's app page (https://getartcraft.com/apps/designcraft), its GitHub repository (https://github.com/storytold/designcraft) and the issue tracker. In the running app, the UI commands `help.discord`, `help.appPage`, `help.github`, `help.issues`, `help.website`, `help.app {app}` open them in the browser and `help.about {tab?}` shows the About window (tabs `about`, `contributors`, `models`). The server's `serverInfo.websiteUrl` is the app page.
|
||||
`app.links` returns the GitHub repository (https://github.com/storytold/designcraft) and the issue tracker. In the running app, the UI commands `help.github` and `help.issues` open them in the browser and `help.about {tab?}` shows the About window (tabs `about`, `contributors`, `models`). The server's `serverInfo.websiteUrl` is the GitHub repository.
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
<launchable type="desktop-id">ai.storyteller.designcraft.desktop</launchable>
|
||||
<icon type="stock">ai.storyteller.designcraft</icon>
|
||||
<!-- Only url types known to appstream 0.15 (Ubuntu 22.04, where CI validates): no vcs-browser. -->
|
||||
<url type="homepage">https://getartcraft.com/apps/designcraft</url>
|
||||
<url type="homepage">https://github.com/storytold/designcraft</url>
|
||||
<url type="bugtracker">https://github.com/storytold/designcraft/issues</url>
|
||||
<url type="help">https://github.com/storytold/designcraft</url>
|
||||
<url type="contact">https://discord.gg/artcraft</url>
|
||||
<url type="contact">https://github.com/storytold/designcraft/issues</url>
|
||||
<categories>
|
||||
<category>Graphics</category>
|
||||
<category>RasterGraphics</category>
|
||||
|
||||
@@ -14,7 +14,7 @@ section: graphics
|
||||
priority: optional
|
||||
maintainer: ${DESIGNCRAFT_MAINTAINER}
|
||||
vendor: Learning Machines LLC
|
||||
homepage: https://getartcraft.com/apps/designcraft
|
||||
homepage: https://github.com/storytold/designcraft
|
||||
license: MIT OR Apache-2.0
|
||||
description: |-
|
||||
Open-source, native page layout and publishing that works the way InDesign users expect.
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
|
||||
<Icon Id="DesigncraftIcon.ico" SourceFile="$(var.IconPath)" />
|
||||
<Property Id="ARPPRODUCTICON" Value="DesigncraftIcon.ico" />
|
||||
<Property Id="ARPURLINFOABOUT" Value="https://getartcraft.com/apps/designcraft" />
|
||||
<Property Id="ARPURLUPDATEINFO" Value="https://getartcraft.com/apps/designcraft" />
|
||||
<Property Id="ARPHELPLINK" Value="https://discord.gg/artcraft" />
|
||||
<Property Id="ARPURLINFOABOUT" Value="https://github.com/storytold/designcraft" />
|
||||
<Property Id="ARPURLUPDATEINFO" Value="https://github.com/storytold/designcraft" />
|
||||
<Property Id="ARPHELPLINK" Value="https://github.com/storytold/designcraft/issues" />
|
||||
|
||||
<StandardDirectory Id="ProgramFiles6432Folder">
|
||||
<Directory Id="INSTALLFOLDER" Name="DesignCraft" />
|
||||
|
||||