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:
parent
7b7e5994b7
commit
ea3f834b64
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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<_>>();
|
||||
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue