Create a history step when importing SVG files (#1656)

* Create a history step when importing SVG files

* Removed additional usvg::Tree::from_str call based on feedback, used DocumentHistoryBackward in case it fails
This commit is contained in:
milan-sedivy 2024-03-09 00:44:49 +02:00 committed by GitHub
parent 7b7e5994b7
commit ea3f834b64
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 26 additions and 2 deletions

View File

@ -10,8 +10,8 @@ use graphene_core::raster::Image;
use graphene_core::vector::style::ViewMode;
use graphene_core::Color;
use glam::DAffine2;
use serde::{Deserialize, Serialize};
#[impl_message(Message, PortfolioMessage, Document)]
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
pub enum DocumentMessage {
@ -68,6 +68,13 @@ pub enum DocumentMessage {
imaginate_node: Vec<NodeId>,
then_generate: bool,
},
ImportSvg {
id: NodeId,
svg: String,
transform: DAffine2,
parent: LayerNodeIdentifier,
insert_index: isize,
},
MoveSelectedLayersTo {
parent: LayerNodeIdentifier,
insert_index: isize,

View File

@ -531,6 +531,22 @@ impl MessageHandler<DocumentMessage, DocumentInputs<'_>> for DocumentMessageHand
responses.add(DocumentMessage::ImaginateGenerate);
}
}
ImportSvg {
id,
svg,
transform,
parent,
insert_index,
} => {
self.backup(responses);
responses.add(GraphOperationMessage::NewSvg {
id,
svg,
transform,
parent,
insert_index,
});
}
MoveSelectedLayersTo { parent, insert_index } => {
let selected_layers = self.selected_nodes.selected_layers(self.metadata()).collect::<Vec<_>>();

View File

@ -773,6 +773,7 @@ impl MessageHandler<GraphOperationMessage, GraphOperationHandlerData<'_>> for Gr
let tree = match usvg::Tree::from_str(&svg, &usvg::Options::default()) {
Ok(t) => t,
Err(e) => {
responses.add(DocumentMessage::DocumentHistoryBackward);
responses.add(DialogMessage::DisplayDialogError {
title: "SVG parsing failed".to_string(),
description: e.to_string(),

View File

@ -37,7 +37,7 @@ pub fn new_image_layer(image_frame: ImageFrame<Color>, id: NodeId, parent: Layer
/// Create a new group layer from an svg
pub fn new_svg_layer(svg: String, transform: glam::DAffine2, id: NodeId, parent: LayerNodeIdentifier, responses: &mut VecDeque<Message>) -> LayerNodeIdentifier {
let insert_index = -1;
responses.add(GraphOperationMessage::NewSvg {
responses.add(DocumentMessage::ImportSvg {
id,
svg,
transform,