Add FigCraft; release 0.4.1 (#313)

* Add FigCraft to the launcher

FigCraft (storytold/figcraft): interface design and prototyping, the
thirteenth Craft App and the sixth in the New group.

- Catalog row (brand colour #02da96 from FigCraft's icon README), details
  page (no pictures yet), Linux desktop categories, icon tables, tagline
  in every catalog, xtask local mirror list.
- Icon copied unmodified from FigCraft's repo; ATTRIBUTION.md row.
- The Windows installer art fits five rows of icons.
- Test that a companion figcraft-server tarball is never picked as the app.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Release 0.4.1

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Brandon ThomasandClaude Opus 5.5 authored and GitHub committed 2026-10-13 12:28:29 -04:00
1 parent d6fdab6596
commit cbae640688
27 files changed
+93 -35

No files matched your search

+1 -1
View File
@@ -2,7 +2,7 @@
ArtCraft Launcher installs, updates and launches the **Craft App Suite** (PhotoCraft, LightCraft,
FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft,
CADCraft, SoundCraft). It is written in **Rust only** (no JavaScript or TypeScript): the desktop
CADCraft, SoundCraft, FigCraft). It is written in **Rust only** (no JavaScript or TypeScript): the desktop
app is native egui/eframe, and the web build is the same Rust compiled to WebAssembly (trunk +
wasm-bindgen). **No Tauri, Electron or webview shells**, ever.
+1
View File
@@ -42,6 +42,7 @@ licensed like those apps. Refresh them from the source path, never redraw them.
| `assets/app-icons/gridcraft.png` | GridCraft app icon (app icon), 128 px | ArtCraft Team and the GridCraft contributors | [`storytold/gridcraft`](https://github.com/storytold/gridcraft) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.gridcraft.png`, copied unmodified | MIT OR Apache-2.0 (GridCraft's [`LICENSE-MIT`](https://github.com/storytold/gridcraft/blob/main/LICENSE-MIT), [`LICENSE-APACHE`](https://github.com/storytold/gridcraft/blob/main/LICENSE-APACHE)) |
| `assets/app-icons/cadcraft.png` | CADCraft app icon (app icon), 128 px | ArtCraft Team and the CADCraft contributors | [`storytold/cadcraft`](https://github.com/storytold/cadcraft) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.cadcraft.png`, copied unmodified | MIT OR Apache-2.0 (CADCraft's [`LICENSE-MIT`](https://github.com/storytold/cadcraft/blob/main/LICENSE-MIT), [`LICENSE-APACHE`](https://github.com/storytold/cadcraft/blob/main/LICENSE-APACHE)) |
| `assets/app-icons/soundcraft.png` | SoundCraft app icon (nightingale (placeholder)), 128 px | ArtCraft Team and the SoundCraft contributors | [`storytold/soundcraft`](https://github.com/storytold/soundcraft) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.soundcraft.png`, copied unmodified | MIT OR Apache-2.0 (SoundCraft's [`LICENSE-MIT`](https://github.com/storytold/soundcraft/blob/main/LICENSE-MIT), [`LICENSE-APACHE`](https://github.com/storytold/soundcraft/blob/main/LICENSE-APACHE)) |
| `assets/app-icons/figcraft.png` | FigCraft app icon (chameleon), 128 px | ArtCraft Team and the FigCraft contributors | [`storytold/figcraft`](https://github.com/storytold/figcraft) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.figcraft.png`, copied unmodified | MIT OR Apache-2.0 (FigCraft's [`LICENSE-MIT`](https://github.com/storytold/figcraft/blob/main/LICENSE-MIT), [`LICENSE-APACHE`](https://github.com/storytold/figcraft/blob/main/LICENSE-APACHE)) |
## Documentation and README
Generated
+6 -6
View File
@@ -276,7 +276,7 @@ checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56"
[[package]]
name = "artcraft-launcher"
version = "0.4.0"
version = "0.4.1"
dependencies = [
"artcraft-launcher-core",
"artcraft-launcher-native",
@@ -300,7 +300,7 @@ dependencies = [
[[package]]
name = "artcraft-launcher-core"
version = "0.4.0"
version = "0.4.1"
dependencies = [
"semver",
"serde",
@@ -309,7 +309,7 @@ dependencies = [
[[package]]
name = "artcraft-launcher-native"
version = "0.4.0"
version = "0.4.1"
dependencies = [
"artcraft-launcher-core",
"dirs 6.0.0",
@@ -327,7 +327,7 @@ dependencies = [
[[package]]
name = "artcraft-launcher-ui-egui"
version = "0.4.0"
version = "0.4.1"
dependencies = [
"artcraft-launcher-core",
"egui",
@@ -343,7 +343,7 @@ dependencies = [
[[package]]
name = "artcraft-launcher-web"
version = "0.4.0"
version = "0.4.1"
dependencies = [
"artcraft-launcher-core",
"artcraft-launcher-ui-egui",
@@ -5803,7 +5803,7 @@ checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9"
[[package]]
name = "xtask"
version = "0.4.0"
version = "0.4.1"
[[package]]
name = "yoke"
+1 -1
View File
@@ -3,7 +3,7 @@ resolver = "3"
members = ["crates/*", "apps/*", "xtask"]
[workspace.package]
version = "0.4.0"
version = "0.4.1"
edition = "2024"
license = "MIT OR Apache-2.0"
rust-version = "1.90"
+2 -1
View File
@@ -12,7 +12,7 @@
<p align="center">
<b>One place to install, update and open every app in the Craft App Suite, rebuilt in pure Rust.</b><br>
PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft,<br>
DeckCraft, GridCraft, CADCraft and SoundCraft: the right build for your computer, kept up to date.
DeckCraft, GridCraft, CADCraft, SoundCraft and FigCraft: the right build for your computer, kept up to date.
</p>
<p align="center">
@@ -247,6 +247,7 @@ stand on its own.
| <img src="https://raw.githubusercontent.com/storytold/deckcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.deckcraft.png" alt="" width="32" height="32"> | **DeckCraft** | Presentations and slide decks | [GitHub](https://github.com/storytold/deckcraft) | [Website](https://getartcraft.com/apps/deckcraft) |
| <img src="https://raw.githubusercontent.com/storytold/cadcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.cadcraft.png" alt="" width="32" height="32"> | **CADCraft** | Computer-aided design | [GitHub](https://github.com/storytold/cadcraft) | [Website](https://getartcraft.com/apps/cadcraft) |
| <img src="https://raw.githubusercontent.com/storytold/soundcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.soundcraft.png" alt="" width="32" height="32"> | **SoundCraft** | Audio recording and editing | [GitHub](https://github.com/storytold/soundcraft) | [Website](https://getartcraft.com/apps/soundcraft) |
| <img src="https://raw.githubusercontent.com/storytold/figcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.figcraft.png" alt="" width="32" height="32"> | **FigCraft** | Interface design and prototyping | [GitHub](https://github.com/storytold/figcraft) | [Website](https://getartcraft.com/apps/figcraft) |
And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video studio for artists who want real control.
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

+14 -6
View File
@@ -1,4 +1,4 @@
//! The Craft App Suite: the twelve apps the launcher knows about.
//! The Craft App Suite: the thirteen apps the launcher knows about.
//!
//! The list is data so a later version can fetch it from an API; [`SUITE`] is the built-in copy.
//!
@@ -12,7 +12,7 @@ use serde::{Deserialize, Serialize};
pub enum AppGroup {
/// The seven original apps.
Classic,
/// The five apps added after them.
/// The six apps added after them.
New,
}
@@ -94,8 +94,8 @@ const fn app(
CraftApp { id, name, tagline, group, color, ink_light, ink_dark, repo, former_ids: &[], former_names: &[] }
}
/// The Craft App Suite, in display order: the seven classic apps, then the five new ones.
pub const SUITE: [CraftApp; 12] = [
/// The Craft App Suite, in display order: the seven classic apps, then the six new ones.
pub const SUITE: [CraftApp; 13] = [
app(
"photocraft",
"PhotoCraft",
@@ -196,6 +196,14 @@ pub const SUITE: [CraftApp; 12] = [
[[0x1f, 0xa5, 0xc9], [0x0e, 0x72, 0x90], [0x5f, 0xd0, 0xee]],
"storytold/soundcraft",
),
app(
"figcraft",
"FigCraft",
"Interface design and prototyping",
AppGroup::New,
[[0x02, 0xda, 0x96], [0x04, 0x7a, 0x56], [0x4f, 0xe8, 0xb6]],
"storytold/figcraft",
),
];
/// ArtCraft's website.
@@ -239,9 +247,9 @@ mod tests {
use super::*;
#[test]
fn suite_has_seven_classic_and_five_new_apps_with_unique_ids() {
fn suite_has_seven_classic_and_six_new_apps_with_unique_ids() {
assert_eq!(SUITE.iter().filter(|a| a.group == AppGroup::Classic).count(), 7);
assert_eq!(SUITE.iter().filter(|a| a.group == AppGroup::New).count(), 5);
assert_eq!(SUITE.iter().filter(|a| a.group == AppGroup::New).count(), 6);
let mut ids: Vec<_> = SUITE.iter().map(|a| a.id).collect();
ids.sort_unstable();
ids.dedup();
+32 -1
View File
@@ -67,7 +67,7 @@ pub fn looks_like_jpeg(bytes: &[u8]) -> bool {
/// Where every Craft App runs (getartcraft.com lists the same for each of them).
const PLATFORMS: &str = "macOS, Windows, Linux, FreeBSD, web";
pub const DETAILS: [AppDetails; 12] = [
pub const DETAILS: [AppDetails; 13] = [
AppDetails {
id: "photocraft",
headline: "The image editor you already know how to use.",
@@ -371,6 +371,37 @@ pub const DETAILS: [AppDetails; 12] = [
],
platforms: PLATFORMS,
},
AppDetails {
id: "figcraft",
headline: "Interface design and prototyping, in pure Rust.",
about: "Design screens, components and prototypes in a native app that opens instantly and works offline, \
with no account and no telemetry. Early alpha.",
features: &[
feature(
"Auto layout",
"Rows, columns, wrap and grids with padding, gaps and Hug, Fill or Fixed sizing, plus constraints and layout grids.",
),
feature(
"Components",
"Instances with overrides, variants and properties, styles, and variables with modes bound to fills, strokes and effects.",
),
feature("Vectors", "Real vector networks, the pen and pencil, the shape builder, editable booleans and variable width strokes."),
feature(
"Prototypes",
"Connections, triggers and animated transitions, variables with conditionals, flows and a presentation view with device frames.",
),
feature(
"Hand off",
"Inspect mode with measurements, annotations, ready-for-dev status, and code for CSS, HTML, React, SwiftUI and Compose.",
),
feature(
"Your files",
"Plain .figcraft files on your own disk. SVG, PNG, JPEG, WebP and PDF in and out, and .fig files open, best effort.",
),
],
shots: &[],
platforms: PLATFORMS,
},
];
impl AppDetails {
+3
View File
@@ -263,6 +263,9 @@ mod tests {
{
assert_eq!(parse_asset_name(other, &["photocraft"]), None, "{other}");
}
// FigCraft also ships its collaboration server; that tarball is not the app.
assert_eq!(parse_asset_name("figcraft-server-0.5.1-linux-x86_64.tar.gz", &["figcraft"]), None);
assert!(parse_asset_name("figcraft-0.5.1-linux-x86_64.tar.gz", &["figcraft"]).is_some());
}
#[test]
+1
View File
@@ -31,6 +31,7 @@ pub fn meta(app: &CraftApp) -> (&'static str, Option<&'static str>) {
"gridcraft" => ("Office;Spreadsheet;", None),
"cadcraft" => ("Graphics;Engineering;VectorGraphics;", None),
"soundcraft" => ("AudioVideo;Audio;Midi;Mixer;Sequencer;Recorder;", None),
"figcraft" => ("Graphics;2DGraphics;VectorGraphics;X-Design;", Some("figcraft")),
_ => ("Graphics;", None),
}
}
+1
View File
@@ -746,6 +746,7 @@ pub(crate) mod linux {
"gridcraft" => include_bytes!("../../../assets/app-icons/gridcraft.png"),
"cadcraft" => include_bytes!("../../../assets/app-icons/cadcraft.png"),
"soundcraft" => include_bytes!("../../../assets/app-icons/soundcraft.png"),
"figcraft" => include_bytes!("../../../assets/app-icons/figcraft.png"),
_ => return None,
})
}
+1
View File
@@ -152,6 +152,7 @@ deckcraft Presentations and slide shows Prezentace a promítání snímků
gridcraft Spreadsheets and data Tabulky a data
cadcraft Computer-aided design and drafting Počítačem podporované navrhování a kreslení
soundcraft Recording, editing and mixing audio Nahrávání, úpravy a mixování zvuku
figcraft Interface design and prototyping Návrh rozhraní a prototypování
month Jan 1.
month Feb 2.
month Mar 3.
1 # Czech (cs) catalog for ArtCraft Launcher.
152 cadcraft
153 soundcraft
154 month figcraft
155 month
156 month
157 month
158 month
+2 -1
View File
@@ -14,7 +14,7 @@
# Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite
# name "Craft App Suite",
# app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft,
# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub", "Discord".
# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub", "Discord".
# Shortcut keys keep their key-cap names (Shift, Alt, Ctrl, Cmd, Esc).
# Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v},
# {what}, {unit}, {real}, {e} must appear in translation.
@@ -170,6 +170,7 @@ deckcraft Presentations and slide shows Präsentationen und Diashows
gridcraft Spreadsheets and data Tabellenkalkulation und Daten
cadcraft Computer-aided design and drafting Computergestütztes Konstruieren und Zeichnen
soundcraft Recording, editing and mixing audio Audio aufnehmen, bearbeiten und mischen
figcraft Interface design and prototyping Interface-Design und Prototyping
# Contextual: month abbreviations for date rendering
month Jan Jan.
Can't render this file because it contains an unexpected character in line 11 and column 16.
+2 -1
View File
@@ -14,7 +14,7 @@
# Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite
# name "Craft App Suite", app names (PhotoCraft, LightCraft, FilmCraft,
# DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft,
# SoundCraft), "GitHub", "Discord", "Finder", "makers".
# SoundCraft, FigCraft), "GitHub", "Discord", "Finder", "makers".
# Trailing "…" (U+2026) must be preserved. Placeholders must appear in the translation:
# {ago}, {a}, {b}, {count}, {date}, {day}, {done}, {e}, {f}, {installed}, {latest}, {min},
# {month}, {name}, {n}, {os}, {platform}, {sources}, {total}, {version}, {v}, {year}.
@@ -165,6 +165,7 @@ deckcraft Presentations and slide shows Presentaciones y diapositivas
gridcraft Spreadsheets and data Hojas de cálculo y datos
cadcraft Computer-aided design and drafting CAD: diseño y dibujo técnico
soundcraft Recording, editing and mixing audio Grabación, edición y mezcla de audio
figcraft Interface design and prototyping Diseño de interfaces y prototipos
month Jan ene.
month Feb feb.
month Mar mar.
Can't render this file because it contains an unexpected character in line 5 and column 48.
+2 -1
View File
@@ -12,7 +12,7 @@
# Coverage: the whole interface: every menu string and tl! literal (complete_menus = true).
# Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite
# name "Craft App Suite", app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft,
# PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub",
# PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub",
# "Discord".
# Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v},
# {what}, {unit}, {real}, {e} must appear in translation.
@@ -168,6 +168,7 @@ deckcraft Presentations and slide shows Présentations et diaporamas
gridcraft Spreadsheets and data Tableurs et données
cadcraft Computer-aided design and drafting Conception et dessin assistés par ordinateur
soundcraft Recording, editing and mixing audio Enregistrement, édition et mixage audio
figcraft Interface design and prototyping Design d'interfaces et prototypage
# Contextual: month abbreviations for date rendering
month Jan janv.
Can't render this file because it contains an unexpected character in line 5 and column 50.
+2 -1
View File
@@ -14,7 +14,7 @@
# Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite
# name "Craft App Suite",
# app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft,
# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub", "Discord".
# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub", "Discord".
# Shortcut keys keep their key-cap names (Shift, Alt, Ctrl, Cmd, Esc).
# Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v},
# {what}, {unit}, {real}, {e} must appear in translation.
@@ -170,6 +170,7 @@ deckcraft Presentations and slide shows Prezentációk és diavetítések
gridcraft Spreadsheets and data Táblázatok és adatok
cadcraft Computer-aided design and drafting Számítógépes tervezés és műszaki rajz
soundcraft Recording, editing and mixing audio Hangrögzítés, hangszerkesztés és keverés
figcraft Interface design and prototyping Felülettervezés és prototípus-készítés
# Contextual: month abbreviations for date rendering
month Jan jan.
Can't render this file because it contains an unexpected character in line 11 and column 16.
+2 -1
View File
@@ -14,7 +14,7 @@
# Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite
# name "Craft App Suite",
# app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft,
# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub", "Discord".
# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub", "Discord".
# Shortcut keys keep their key-cap names (Shift, Alt, Ctrl, Cmd, Esc).
# Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v},
# {what}, {unit}, {real}, {e} must appear in translation.
@@ -172,6 +172,7 @@ deckcraft Presentations and slide shows プレゼンテーションとスライ
gridcraft Spreadsheets and data 表計算とデータ
cadcraft Computer-aided design and drafting コンピューター支援設計と製図
soundcraft Recording, editing and mixing audio オーディオの録音、編集、ミックス
figcraft Interface design and prototyping インターフェースデザインとプロトタイピング
# Contextual: month abbreviations for date rendering
month Jan 1月
Can't render this file because it contains an unexpected character in line 14 and column 44.
+2 -1
View File
@@ -13,7 +13,7 @@
# Coverage: the whole interface — every menu string and tl! literal (complete_menus = true).
# Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite
# name "Craft App Suite", app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft,
# PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub",
# PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub",
# "Discord".
# Shortcut keys keep their key-cap names (Shift, Alt, Ctrl, Cmd, Esc).
# Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v},
@@ -171,6 +171,7 @@ deckcraft Presentations and slide shows Prezentacje i pokazy slajdów
gridcraft Spreadsheets and data Arkusze kalkulacyjne i dane
cadcraft Computer-aided design and drafting Projektowanie i kreślenie wspomagane komputerowo
soundcraft Recording, editing and mixing audio Nagrywanie, edycja i miksowanie dźwięku
figcraft Interface design and prototyping Projektowanie interfejsów i prototypowanie
# Contextual: month abbreviations for date rendering
month Jan sty
Can't render this file because it contains an unexpected character in line 11 and column 15.
+1
View File
@@ -158,6 +158,7 @@ deckcraft Presentations and slide shows Apresentações e slides
gridcraft Spreadsheets and data Planilhas e dados
cadcraft Computer-aided design and drafting Desenho técnico e projeto assistido por computador (CAD)
soundcraft Recording, editing and mixing audio Gravação, edição e mixagem de áudio
figcraft Interface design and prototyping Design de interfaces e prototipagem
# Contextual: month abbreviations for date rendering
month Jan jan.
1 # Brazilian Portuguese (pt-BR) catalog for ArtCraft Launcher.
158 month # Contextual: month abbreviations for date rendering
159 month
160 month
161 month
162 month
163 month
164 month
+2 -1
View File
@@ -13,7 +13,7 @@
# Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite
# name "Craft App Suite",
# app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft,
# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub", "Discord", "Website".
# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub", "Discord", "Website".
# Shortcut keys keep their key-cap names (Shift, Alt, Ctrl, Cmd, Esc).
# Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v},
# {what}, {unit}, {real}, {e} must appear in translation.
@@ -168,6 +168,7 @@ deckcraft Presentations and slide shows Презентации и слайд-ш
gridcraft Spreadsheets and data Электронные таблицы и данные
cadcraft Computer-aided design and drafting Автоматизированное проектирование и черчение
soundcraft Recording, editing and mixing audio Запись, редактирование и сведение звука
figcraft Interface design and prototyping Дизайн интерфейсов и прототипирование
# Contextual: month abbreviations for date rendering
month Jan янв.
Can't render this file because it contains an unexpected character in line 13 and column 44.
+1
View File
@@ -247,6 +247,7 @@ deckcraft Presentations and slide shows 演示文稿与幻灯片
gridcraft Spreadsheets and data 电子表格与数据处理
cadcraft Computer-aided design and drafting 计算机辅助设计与制图
soundcraft Recording, editing and mixing audio 音频录制、编辑与混音
figcraft Interface design and prototyping 界面设计与原型制作
Show in Files 在文件管理器中显示
Loading ArtCraft Launcher… 正在加载 ArtCraft Launcher…
Can't render this file because it contains an unexpected character in line 4 and column 3.
+1
View File
@@ -17,6 +17,7 @@ pub fn app(id: &str) -> Option<ImageSource<'static>> {
"gridcraft" => egui::include_image!("../../../assets/app-icons/gridcraft.png"),
"cadcraft" => egui::include_image!("../../../assets/app-icons/cadcraft.png"),
"soundcraft" => egui::include_image!("../../../assets/app-icons/soundcraft.png"),
"figcraft" => egui::include_image!("../../../assets/app-icons/figcraft.png"),
_ => return None,
})
}
+3 -3
View File
@@ -631,8 +631,8 @@ fn links_to_the_website_github_and_each_apps_pages() {
// Cards: every app links to its repo and to its own page on getartcraft.com (plus the footer's).
let shown_cards = h.query_all_by_label("GitHub").count() - 1;
let shown_sites = h.query_all_by_label("Website").count() - 1;
assert!(shown_cards >= 12, "{shown_cards}");
assert_eq!(shown_sites, 12, "every app has a website page");
assert!(shown_cards >= 13, "{shown_cards}");
assert_eq!(shown_sites, 13, "every app has a website page");
// The table's … menu has the app's website and GitHub repo.
let (mut h, _) = harness(ViewMode::Table, egui::Theme::Dark, true);
h.run_steps(6);
@@ -1206,7 +1206,7 @@ fn the_lead_picture_can_be_enlarged() {
#[test]
fn every_page_opens_and_pages_through_its_pictures() {
let (mut h, _sent) = harness(ViewMode::Grid, egui::Theme::Dark, true);
// Tall enough to show all twelve cards at once.
// Tall enough to show all thirteen cards at once.
h.set_size(egui::vec2(1180.0, 3000.0));
h.run_steps(8);
for d in &artcraft_launcher_core::details::DETAILS {
@@ -13,8 +13,8 @@
<description>
<p>
ArtCraft Launcher lists every app in the Craft App Suite (PhotoCraft, LightCraft, FilmCraft,
DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft
and SoundCraft), installs the right build for your computer, and keeps them up to date.
DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft,
SoundCraft and FigCraft), installs the right build for your computer, and keeps them up to date.
</p>
<ul>
<li>One place to find, install and open every Craft app</li>
+3 -3
View File
@@ -19,9 +19,9 @@ license: MIT OR Apache-2.0
description: |-
Install, update and launch the Craft App Suite.
ArtCraft Launcher lists PhotoCraft, LightCraft, FilmCraft, DesignCraft,
VectorCraft, PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft
and SoundCraft, installs the right build for this computer and keeps them up
to date from GitHub releases. It can live in the system tray.
VectorCraft, PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft,
SoundCraft and FigCraft, installs the right build for this computer and keeps
them up to date from GitHub releases. It can live in the system tray.
# The binary links only glibc and libgcc_s directly. Windowing (X11/Wayland, xkbcommon) and the
# GPU (Vulkan, EGL/GL) are loaded at runtime with dlopen, so they aren't ELF NEEDED entries and
+4 -4
View File
@@ -111,7 +111,7 @@ function New-InstallerArt([string] $BannerOut, [string] $DialogOut) {
$line = [System.Drawing.Color]::FromArgb(38, 242, 241, 238)
# The Craft App Suite, in the launcher's order (crates/core/src/catalog.rs).
$apps = 'photocraft', 'vectorcraft', 'filmcraft', 'lightcraft', 'pdfcraft', 'effectcraft',
'designcraft', 'wordcraft', 'deckcraft', 'gridcraft', 'cadcraft', 'soundcraft'
'designcraft', 'wordcraft', 'deckcraft', 'gridcraft', 'cadcraft', 'soundcraft', 'figcraft'
$mark = [System.Drawing.Image]::FromFile((Join-Path $Root 'assets\app-icon\hicolor\256x256\apps\ai.storyteller.artcraft-launcher.png'))
$wordmark = [System.Drawing.Image]::FromFile((Join-Path $Root 'docs\brand\artcraft-logo-white.png'))
$icons = $apps | ForEach-Object { [System.Drawing.Image]::FromFile((Join-Path $Root "assets\app-icons\$_.png")) }
@@ -148,14 +148,14 @@ function New-InstallerArt([string] $BannerOut, [string] $DialogOut) {
$x += $g.MeasureString([string]$ch, $labelFont, 100, [System.Drawing.StringFormat]::GenericTypographic).Width + 1.35
}
$brush.Dispose()
# The apps, three to a row, in 40 px cells divided by hairlines.
# The apps, three to a row, in 36 px cells divided by hairlines (five rows fit above 312).
$pen = New-Object System.Drawing.Pen $line, 1
$left = 22; $top = 126; $cell = 40
$left = 22; $top = 118; $cell = 36
for ($i = 0; $i -lt $icons.Count; $i++) {
$cx = $left + ($i % 3) * $cell
$cy = $top + [math]::Floor($i / 3) * $cell
$g.DrawRectangle($pen, $cx, $cy, $cell, $cell)
$g.DrawImage($icons[$i], $cx + 6, $cy + 6, $cell - 12, $cell - 12)
$g.DrawImage($icons[$i], $cx + 5, $cy + 5, $cell - 10, $cell - 10)
}
$pen.Dispose()
}
+1
View File
@@ -31,6 +31,7 @@ const APPS: &[(&str, &str)] = &[
("gridcraft", "GridCraft"),
("cadcraft", "CADCraft"),
("soundcraft", "SoundCraft"),
("figcraft", "FigCraft"),
];
const DEFAULT_PORT: u16 = 8787;