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::vector::style::ViewMode;
|
||||||
use graphene_core::Color;
|
use graphene_core::Color;
|
||||||
|
|
||||||
|
use glam::DAffine2;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[impl_message(Message, PortfolioMessage, Document)]
|
#[impl_message(Message, PortfolioMessage, Document)]
|
||||||
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
|
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
|
||||||
pub enum DocumentMessage {
|
pub enum DocumentMessage {
|
||||||
|
|
@ -68,6 +68,13 @@ pub enum DocumentMessage {
|
||||||
imaginate_node: Vec<NodeId>,
|
imaginate_node: Vec<NodeId>,
|
||||||
then_generate: bool,
|
then_generate: bool,
|
||||||
},
|
},
|
||||||
|
ImportSvg {
|
||||||
|
id: NodeId,
|
||||||
|
svg: String,
|
||||||
|
transform: DAffine2,
|
||||||
|
parent: LayerNodeIdentifier,
|
||||||
|
insert_index: isize,
|
||||||
|
},
|
||||||
MoveSelectedLayersTo {
|
MoveSelectedLayersTo {
|
||||||
parent: LayerNodeIdentifier,
|
parent: LayerNodeIdentifier,
|
||||||
insert_index: isize,
|
insert_index: isize,
|
||||||
|
|
|
||||||
|
|
@ -531,6 +531,22 @@ impl MessageHandler<DocumentMessage, DocumentInputs<'_>> for DocumentMessageHand
|
||||||
responses.add(DocumentMessage::ImaginateGenerate);
|
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 } => {
|
MoveSelectedLayersTo { parent, insert_index } => {
|
||||||
let selected_layers = self.selected_nodes.selected_layers(self.metadata()).collect::<Vec<_>>();
|
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()) {
|
let tree = match usvg::Tree::from_str(&svg, &usvg::Options::default()) {
|
||||||
Ok(t) => t,
|
Ok(t) => t,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
responses.add(DocumentMessage::DocumentHistoryBackward);
|
||||||
responses.add(DialogMessage::DisplayDialogError {
|
responses.add(DialogMessage::DisplayDialogError {
|
||||||
title: "SVG parsing failed".to_string(),
|
title: "SVG parsing failed".to_string(),
|
||||||
description: e.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
|
/// 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 {
|
pub fn new_svg_layer(svg: String, transform: glam::DAffine2, id: NodeId, parent: LayerNodeIdentifier, responses: &mut VecDeque<Message>) -> LayerNodeIdentifier {
|
||||||
let insert_index = -1;
|
let insert_index = -1;
|
||||||
responses.add(GraphOperationMessage::NewSvg {
|
responses.add(DocumentMessage::ImportSvg {
|
||||||
id,
|
id,
|
||||||
svg,
|
svg,
|
||||||
transform,
|
transform,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue