mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-15 22:28:10 +08:00
Refactor the TypeScript data flow for full type safety and auto-generation of Rust types (#3865)
* Migrate Specta to Tsify to auto-generate messages.ts, working except colors and widgets * Adopt the generated FillColor/Color/GradientStops * Fix widget typing * Separate WidgetGroup enum variants into wrapper structs * Small rename * Simplify widgets further * Clean up message type references * Switch type imports to the auto-generated file * Remove lowercase serde rename * Fix FillChoice deserialization * Fix small regression from #3837 * Improve type safety * Make WidgetSpan type-safe * More cleanup and type safety * More type safety * More type safety * Get the rest to type-check without errors; improve widget builder macro to have optional icons; improve Svelte 5 configs * Cargo fmt * Fix imports * Update outdated readme info * Fix lint command rename references * Fix typos * One more typos fix * Remove unnecessary dep: prefix from the edited Cargo.toml files * Remove excess parts from Cargo.toml * Fix compiling on desktop * Revert "Remove excess parts from Cargo.toml" This reverts commit 6b711117b3a5d5d8a3ee20f36a43bc74930b7c82. * Update dev docs with simpler, more accurate instructions
This commit is contained in:
@@ -26,6 +26,7 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
|
||||
});
|
||||
}
|
||||
FrontendMessage::TriggerSaveDocument { document_id, name, path, content } => {
|
||||
let content = content.into_vec();
|
||||
if let Some(path) = path {
|
||||
dispatcher.respond(DesktopFrontendMessage::WriteFile { path, content });
|
||||
} else {
|
||||
@@ -42,6 +43,7 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
|
||||
}
|
||||
}
|
||||
FrontendMessage::TriggerSaveFile { name, content } => {
|
||||
let content = content.into_vec();
|
||||
dispatcher.respond(DesktopFrontendMessage::SaveFileDialog {
|
||||
title: "Save File".to_string(),
|
||||
default_filename: name,
|
||||
|
||||
@@ -6,7 +6,7 @@ pub(crate) mod menu {
|
||||
use graphite_editor::messages::input_mapper::utility_types::input_keyboard::{Key, LabeledKeyOrMouseMotion, LabeledShortcut};
|
||||
use graphite_editor::messages::input_mapper::utility_types::misc::ActionShortcut;
|
||||
use graphite_editor::messages::layout::LayoutMessage;
|
||||
use graphite_editor::messages::tool::tool_messages::tool_prelude::{Layout, LayoutGroup, LayoutTarget, MenuListEntry, Widget, WidgetId};
|
||||
use graphite_editor::messages::tool::tool_messages::tool_prelude::{Layout, LayoutGroup, LayoutTarget, MenuListEntry, Widget, WidgetId, WidgetRow};
|
||||
|
||||
use crate::messages::{EditorMessage, KeyCode, MenuItem, Modifiers, Shortcut};
|
||||
|
||||
@@ -15,7 +15,7 @@ pub(crate) mod menu {
|
||||
[layout_group] => layout_group,
|
||||
_ => panic!("Menu bar layout is supposed to have exactly one layout group"),
|
||||
};
|
||||
let LayoutGroup::Row { widgets } = layout_group else {
|
||||
let LayoutGroup::Row(WidgetRow { widgets }) = layout_group else {
|
||||
panic!("Menu bar layout group is supposed to be a row");
|
||||
};
|
||||
widgets
|
||||
@@ -88,8 +88,8 @@ pub(crate) mod menu {
|
||||
_ => None,
|
||||
};
|
||||
|
||||
match icon.as_str() {
|
||||
"CheckboxChecked" => {
|
||||
match icon.as_deref() {
|
||||
Some("CheckboxChecked") => {
|
||||
return MenuItem::Checkbox {
|
||||
id,
|
||||
text,
|
||||
@@ -98,7 +98,7 @@ pub(crate) mod menu {
|
||||
checked: true,
|
||||
};
|
||||
}
|
||||
"CheckboxUnchecked" => {
|
||||
Some("CheckboxUnchecked") => {
|
||||
return MenuItem::Checkbox {
|
||||
id,
|
||||
text,
|
||||
|
||||
Reference in New Issue
Block a user