Skip to content

Commit 2448d64

Browse files
committed
Merge branch 'master' into deep-select-fix
2 parents 254df5c + 0570edc commit 2448d64

File tree

263 files changed

+2811
-2479
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

263 files changed

+2811
-2479
lines changed

Cargo.lock

+21-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+3
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ syn = { version = "2.0", default-features = false, features = [
9595
"derive",
9696
] }
9797
kurbo = { version = "0.11.0", features = ["serde"] }
98+
petgraph = { version = "0.7.1", default-features = false, features = [
99+
"graphmap",
100+
] }
98101

99102
[profile.dev]
100103
opt-level = 1

demo-artwork/isometric-fountain.graphite

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deny.toml

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ ignore = [
4747
"RUSTSEC-2024-0388", # Unmaintained but still fully functional crate `derivative`
4848
"RUSTSEC-2025-0007", # Unmaintained but still fully functional crate `ring`
4949
"RUSTSEC-2024-0436", # Unmaintained but still fully functional crate `paste`
50+
"RUSTSEC-2025-0014", # Unmaintained but still fully functional crate `humantime`
5051
]
5152
# Threshold for security vulnerabilities, any vulnerability with a CVSS score
5253
# lower than the range specified will be ignored. Note that ignored advisories

editor/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
name = "graphite-editor"
33
publish = false
44
version = "0.0.0"
5-
rust-version = "1.82"
5+
rust-version = "1.85"
66
authors = ["Graphite Authors <contact@graphite.rs>"]
7-
edition = "2021"
7+
edition = "2024"
88
readme = "../README.md"
99
homepage = "https://graphite.rs"
1010
repository = "https://github.com/GraphiteEditor/Graphite"

editor/src/application.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use crate::dispatcher::Dispatcher;
22
use crate::messages::prelude::*;
3-
43
pub use graphene_core::uuid::*;
54

65
// TODO: serialize with serde to save the current editor state

editor/src/dispatcher.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -141,14 +141,18 @@ impl Dispatcher {
141141
};
142142

143143
let graphene_std::renderer::RenderMetadata {
144-
footprints,
144+
upstream_footprints: footprints,
145+
local_transforms,
145146
click_targets,
146147
clip_targets,
147148
} = render_metadata;
148149

149150
// Run these update state messages immediately
150151
let messages = [
151-
DocumentMessage::UpdateUpstreamTransforms { upstream_transforms: footprints },
152+
DocumentMessage::UpdateUpstreamTransforms {
153+
upstream_footprints: footprints,
154+
local_transforms,
155+
},
152156
DocumentMessage::UpdateClickTargets { click_targets },
153157
DocumentMessage::UpdateClipTargets { clip_targets },
154158
];
@@ -299,11 +303,7 @@ impl Dispatcher {
299303
fn create_indents(queues: &[VecDeque<Message>]) -> String {
300304
String::from_iter(queues.iter().enumerate().skip(1).map(|(index, queue)| {
301305
if index == queues.len() - 1 {
302-
if queue.is_empty() {
303-
"└── "
304-
} else {
305-
"├── "
306-
}
306+
if queue.is_empty() { "└── " } else { "├── " }
307307
} else if queue.is_empty() {
308308
" "
309309
} else {

editor/src/macros.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
/// ```
2626
///
2727
macro_rules! actions {
28-
($($v:expr),* $(,)?) => {{
28+
($($v:expr_2021),* $(,)?) => {{
2929
vec![$(vec![$v.into()]),*]
3030
}};
3131

@@ -42,7 +42,7 @@ macro_rules! actions {
4242
/// }
4343
/// ```
4444
macro_rules! advertise_actions {
45-
($($v:expr),* $(,)?) => {
45+
($($v:expr_2021),* $(,)?) => {
4646
fn actions(&self) -> $crate::utility_traits::ActionList {
4747
actions!($($v),*)
4848
}

editor/src/messages/dialog/new_document_dialog/new_document_dialog_message_handler.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
use crate::messages::layout::utility_types::widget_prelude::*;
22
use crate::messages::prelude::*;
3-
4-
use graph_craft::document::NodeId;
5-
63
use glam::{IVec2, UVec2};
4+
use graph_craft::document::NodeId;
75

86
/// A dialog to allow users to set some initial options about a new document.
97
#[derive(Debug, Clone, Default)]

editor/src/messages/dialog/simple_dialogs/coming_soon_dialog.rs

+12-10
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,18 @@ impl LayoutHolder for ComingSoonDialog {
2626

2727
if let Some(issue) = self.issue {
2828
let row2 = vec![TextLabel::new("But you can help build it! Visit its issue:").widget_holder()];
29-
let row3 = vec![TextButton::new(format!("GitHub Issue #{issue}"))
30-
.icon(Some("Website".into()))
31-
.flush(true)
32-
.on_update(move |_| {
33-
FrontendMessage::TriggerVisitLink {
34-
url: format!("https://github.com/GraphiteEditor/Graphite/issues/{issue}"),
35-
}
36-
.into()
37-
})
38-
.widget_holder()];
29+
let row3 = vec![
30+
TextButton::new(format!("GitHub Issue #{issue}"))
31+
.icon(Some("Website".into()))
32+
.flush(true)
33+
.on_update(move |_| {
34+
FrontendMessage::TriggerVisitLink {
35+
url: format!("https://github.com/GraphiteEditor/Graphite/issues/{issue}"),
36+
}
37+
.into()
38+
})
39+
.widget_holder(),
40+
];
3941

4042
rows.push(LayoutGroup::Row { widgets: row2 });
4143
rows.push(LayoutGroup::Row { widgets: row3 });

editor/src/messages/dialog/simple_dialogs/demo_artwork_dialog.rs

+7-5
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@ impl LayoutHolder for DemoArtworkDialog {
3232
.flat_map(|chunk| {
3333
fn make_dialog(name: &str, filename: &str) -> Message {
3434
DialogMessage::CloseDialogAndThen {
35-
followups: vec![FrontendMessage::TriggerFetchAndOpenDocument {
36-
name: name.to_string(),
37-
filename: filename.to_string(),
38-
}
39-
.into()],
35+
followups: vec![
36+
FrontendMessage::TriggerFetchAndOpenDocument {
37+
name: name.to_string(),
38+
filename: filename.to_string(),
39+
}
40+
.into(),
41+
],
4042
}
4143
.into()
4244
}

editor/src/messages/dialog/simple_dialogs/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ pub use about_graphite_dialog::AboutGraphiteDialog;
1010
pub use close_all_documents_dialog::CloseAllDocumentsDialog;
1111
pub use close_document_dialog::CloseDocumentDialog;
1212
pub use coming_soon_dialog::ComingSoonDialog;
13+
pub use demo_artwork_dialog::ARTWORK;
1314
pub use demo_artwork_dialog::DemoArtworkDialog;
1415
pub use error_dialog::ErrorDialog;
1516
pub use licenses_dialog::LicensesDialog;
16-
17-
pub use demo_artwork_dialog::ARTWORK;

editor/src/messages/frontend/frontend_message.rs

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use crate::messages::portfolio::document::node_graph::utility_types::{
66
use crate::messages::portfolio::document::utility_types::nodes::{JsRawBuffer, LayerPanelEntry, RawBuffer};
77
use crate::messages::prelude::*;
88
use crate::messages::tool::utility_types::HintData;
9-
109
use graph_craft::document::NodeId;
1110
use graphene_core::raster::color::Color;
1211
use graphene_core::text::Font;
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use crate::messages::portfolio::utility_types::Platform;
2-
32
use std::sync::OnceLock;
43

54
pub static GLOBAL_PLATFORM: OnceLock<Platform> = OnceLock::new();

editor/src/messages/input_mapper/input_mapper_message_handler.rs

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use super::utility_types::misc::Mapping;
33
use crate::messages::input_mapper::utility_types::input_keyboard::{self, Key};
44
use crate::messages::portfolio::utility_types::KeyboardPlatformLayout;
55
use crate::messages::prelude::*;
6-
76
use std::fmt::Write;
87

98
pub struct InputMapperMessageData<'a> {

editor/src/messages/input_mapper/input_mappings.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use crate::messages::portfolio::document::utility_types::misc::GroupFolderType;
1111
use crate::messages::prelude::*;
1212
use crate::messages::tool::tool_messages::brush_tool::BrushToolMessageOptionsUpdate;
1313
use crate::messages::tool::tool_messages::select_tool::SelectToolPointerKeys;
14-
1514
use glam::DVec2;
1615

1716
impl From<MappingVariant> for Mapping {
@@ -157,9 +156,9 @@ pub fn input_mappings() -> Mapping {
157156
entry!(PointerMove; refresh_keys=[Alt, Shift], action_dispatch=TextToolMessage::PointerMove { center: Alt, lock_ratio: Shift }),
158157
entry!(KeyDown(MouseLeft); action_dispatch=TextToolMessage::DragStart),
159158
entry!(KeyUp(MouseLeft); action_dispatch=TextToolMessage::DragStop),
160-
entry!(KeyDown(MouseRight); action_dispatch=TextToolMessage::CommitText),
161-
entry!(KeyDown(Escape); action_dispatch=TextToolMessage::CommitText),
162-
entry!(KeyDown(Enter); modifiers=[Accel], action_dispatch=TextToolMessage::CommitText),
159+
entry!(KeyDown(MouseRight); action_dispatch=TextToolMessage::Abort),
160+
entry!(KeyDown(Escape); action_dispatch=TextToolMessage::Abort),
161+
entry!(KeyDown(Enter); modifiers=[Accel], action_dispatch=TextToolMessage::Abort),
163162
//
164163
// GradientToolMessage
165164
entry!(KeyDown(MouseLeft); action_dispatch=GradientToolMessage::PointerDown),
@@ -253,7 +252,7 @@ pub fn input_mappings() -> Mapping {
253252
entry!(KeyDown(KeyJ); modifiers=[Accel], action_dispatch=ToolMessage::Path(PathToolMessage::ClosePath)),
254253
//
255254
// PenToolMessage
256-
entry!(PointerMove; refresh_keys=[Control, Alt, Shift, KeyC], action_dispatch=PenToolMessage::PointerMove { snap_angle: Shift, break_handle: Alt, lock_angle: Control, colinear: KeyC }),
255+
entry!(PointerMove; refresh_keys=[Control, Alt, Shift, KeyC], action_dispatch=PenToolMessage::PointerMove { snap_angle: Shift, break_handle: Alt, lock_angle: Control, colinear: KeyC, move_anchor_with_handles: Space }),
257256
entry!(KeyDown(MouseLeft); action_dispatch=PenToolMessage::DragStart { append_to_selected: Shift }),
258257
entry!(KeyUp(MouseLeft); action_dispatch=PenToolMessage::DragStop),
259258
entry!(KeyDown(MouseRight); action_dispatch=PenToolMessage::Confirm),

editor/src/messages/input_mapper/utility_types/input_keyboard.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
use crate::messages::portfolio::utility_types::KeyboardPlatformLayout;
22
use crate::messages::prelude::*;
3-
43
use bitflags::bitflags;
5-
64
use std::fmt::{self, Display, Formatter};
75
use std::ops::{BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign};
86

editor/src/messages/input_mapper/utility_types/input_mouse.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use crate::consts::DRAG_THRESHOLD;
22
use crate::messages::prelude::*;
3-
43
use bitflags::bitflags;
54
use glam::DVec2;
65
use std::collections::VecDeque;

editor/src/messages/input_mapper/utility_types/macros.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ macro_rules! modifiers {
2424
/// Each handler adds or removes actions in the form of message discriminants. Here, we tie an input condition (such as a hotkey) to an action's full message.
2525
/// When an action is currently available, and the user enters that input, the action's message is dispatched on the message bus.
2626
macro_rules! entry {
27-
($input:expr; $(modifiers=[$($modifier:ident),*],)? $(refresh_keys=[$($refresh:ident),* $(,)?],)? action_dispatch=$action_dispatch:expr$(,)?) => {
27+
($input:expr_2021; $(modifiers=[$($modifier:ident),*],)? $(refresh_keys=[$($refresh:ident),* $(,)?],)? action_dispatch=$action_dispatch:expr_2021$(,)?) => {
2828
&[&[
2929
// Cause the `action_dispatch` message to be sent when the specified input occurs.
3030
MappingEntry {
@@ -72,7 +72,7 @@ macro_rules! entry {
7272
/// (key_up, key_down, double_click, wheel_scroll, pointer_move)
7373
/// ```
7474
macro_rules! mapping {
75-
[$($entry:expr),* $(,)?] => {{
75+
[$($entry:expr_2021),* $(,)?] => {{
7676
let mut key_up = KeyMappingEntries::key_array();
7777
let mut key_down = KeyMappingEntries::key_array();
7878
let mut key_up_no_repeat = KeyMappingEntries::key_array();
@@ -107,7 +107,7 @@ macro_rules! mapping {
107107

108108
/// Constructs an `ActionKeys` macro with a certain `Action` variant, conveniently wrapped in `Some()`.
109109
macro_rules! action_keys {
110-
($action:expr) => {
110+
($action:expr_2021) => {
111111
Some(crate::messages::input_mapper::utility_types::misc::ActionKeys::Action($action.into()))
112112
};
113113
}

editor/src/messages/input_mapper/utility_types/misc.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
use super::input_keyboard::{all_required_modifiers_pressed, Key, KeysGroup, LayoutKeysGroup};
1+
use super::input_keyboard::{Key, KeysGroup, LayoutKeysGroup, all_required_modifiers_pressed};
22
use crate::messages::input_mapper::key_mapping::MappingVariant;
33
use crate::messages::input_mapper::utility_types::input_keyboard::{KeyStates, NUMBER_OF_KEYS};
44
use crate::messages::input_mapper::utility_types::input_mouse::NUMBER_OF_MOUSE_BUTTONS;
55
use crate::messages::prelude::*;
6-
76
use core::time::Duration;
87

98
#[derive(Debug, Clone)]

editor/src/messages/input_preprocessor/input_preprocessor_message.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use crate::messages::input_mapper::utility_types::input_keyboard::{Key, ModifierKeys};
22
use crate::messages::input_mapper::utility_types::input_mouse::{EditorMouseState, ViewportBounds};
33
use crate::messages::prelude::*;
4-
54
use core::time::Duration;
65

76
#[impl_message(Message, InputPreprocessor)]

editor/src/messages/input_preprocessor/input_preprocessor_message_handler.rs

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use crate::messages::input_mapper::utility_types::input_mouse::{MouseButton, Mou
33
use crate::messages::input_mapper::utility_types::misc::FrameTimeInfo;
44
use crate::messages::portfolio::utility_types::KeyboardPlatformLayout;
55
use crate::messages::prelude::*;
6-
76
use glam::DVec2;
87

98
pub struct InputPreprocessorMessageData {

editor/src/messages/layout/layout_message_handler.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
use crate::messages::input_mapper::utility_types::input_keyboard::KeysGroup;
22
use crate::messages::layout::utility_types::widget_prelude::*;
33
use crate::messages::prelude::*;
4-
54
use graphene_core::raster::color::Color;
65
use graphene_core::text::Font;
76
use graphene_std::vector::style::{FillChoice, GradientStops};
8-
97
use serde_json::Value;
108

119
#[derive(Debug, Clone, Default)]

editor/src/messages/layout/utility_types/layout_widget.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use crate::application::generate_uuid;
66
use crate::messages::input_mapper::utility_types::input_keyboard::KeysGroup;
77
use crate::messages::input_mapper::utility_types::misc::ActionKeys;
88
use crate::messages::prelude::*;
9-
109
use std::sync::Arc;
1110

1211
#[repr(transparent)]
@@ -348,11 +347,7 @@ impl LayoutGroup {
348347
val.clone_from(&tooltip);
349348
}
350349
}
351-
if is_col {
352-
Self::Column { widgets }
353-
} else {
354-
Self::Row { widgets }
355-
}
350+
if is_col { Self::Column { widgets } } else { Self::Row { widgets } }
356351
}
357352

358353
/// Diffing updates self (where self is old) based on new, updating the list of modifications as it does so.

editor/src/messages/layout/utility_types/widgets/button_widgets.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ use crate::messages::input_mapper::utility_types::misc::ActionKeys;
22
use crate::messages::layout::utility_types::widget_prelude::*;
33
use crate::messages::portfolio::document::node_graph::utility_types::FrontendGraphDataType;
44
use crate::messages::tool::tool_messages::tool_prelude::WidgetCallback;
5-
5+
use derivative::*;
66
use graphene_std::vector::style::FillChoice;
77
use graphite_proc_macros::WidgetBuilder;
88

9-
use derivative::*;
10-
119
#[derive(Clone, Default, Derivative, serde::Serialize, serde::Deserialize, WidgetBuilder, specta::Type)]
1210
#[derivative(Debug, PartialEq)]
1311
pub struct IconButton {

0 commit comments

Comments
 (0)