11use std:: collections:: HashMap ;
22use std:: collections:: VecDeque ;
33
4+ use super :: artboard_message_handler:: ArtboardMessage ;
5+ use super :: artboard_message_handler:: ArtboardMessageHandler ;
46pub use super :: layer_panel:: * ;
57use super :: movement_handler:: { MovementMessage , MovementMessageHandler } ;
68use super :: overlay_message_handler:: OverlayMessageHandler ;
79use super :: transform_layer_handler:: { TransformLayerMessage , TransformLayerMessageHandler } ;
810use super :: vectorize_layer_metadata;
911
1012use crate :: consts:: DEFAULT_DOCUMENT_NAME ;
13+ use crate :: consts:: GRAPHITE_DOCUMENT_VERSION ;
1114use crate :: consts:: { ASYMPTOTIC_EFFECT , FILE_EXPORT_SUFFIX , FILE_SAVE_SUFFIX , SCALE_EFFECT , SCROLLBAR_SPACING } ;
1215use crate :: document:: Clipboard ;
1316use crate :: input:: InputPreprocessor ;
@@ -83,10 +86,12 @@ pub struct DocumentMessageHandler {
8386 movement_handler : MovementMessageHandler ,
8487 #[ serde( skip) ]
8588 overlay_message_handler : OverlayMessageHandler ,
89+ artboard_message_handler : ArtboardMessageHandler ,
8690 #[ serde( skip) ]
8791 transform_layer_handler : TransformLayerMessageHandler ,
8892 pub snapping_enabled : bool ,
8993 pub view_mode : ViewMode ,
94+ pub version : String ,
9095}
9196
9297impl Default for DocumentMessageHandler {
@@ -101,9 +106,11 @@ impl Default for DocumentMessageHandler {
101106 layer_range_selection_reference : Vec :: new ( ) ,
102107 movement_handler : MovementMessageHandler :: default ( ) ,
103108 overlay_message_handler : OverlayMessageHandler :: default ( ) ,
109+ artboard_message_handler : ArtboardMessageHandler :: default ( ) ,
104110 transform_layer_handler : TransformLayerMessageHandler :: default ( ) ,
105111 snapping_enabled : true ,
106112 view_mode : ViewMode :: default ( ) ,
113+ version : GRAPHITE_DOCUMENT_VERSION . to_string ( ) ,
107114 }
108115 }
109116}
@@ -118,6 +125,8 @@ pub enum DocumentMessage {
118125 DispatchOperation ( Box < DocumentOperation > ) ,
119126 #[ child]
120127 Overlay ( OverlayMessage ) ,
128+ #[ child]
129+ Artboard ( ArtboardMessage ) ,
121130 UpdateLayerMetadata {
122131 layer_path : Vec < LayerId > ,
123132 layer_metadata : LayerMetadata ,
@@ -195,20 +204,34 @@ impl DocumentMessageHandler {
195204 }
196205
197206 pub fn deserialize_document ( serialized_content : & str ) -> Result < Self , DocumentError > {
198- log:: info!( "Deserializing: {:?}" , serialized_content) ;
199- serde_json:: from_str ( serialized_content) . map_err ( |e| DocumentError :: InvalidFile ( e. to_string ( ) ) )
207+ let deserialized_result: Result < Self , DocumentError > = serde_json:: from_str ( serialized_content) . map_err ( |e| DocumentError :: InvalidFile ( e. to_string ( ) ) ) ;
208+ match deserialized_result {
209+ Ok ( document) => {
210+ if document. version != GRAPHITE_DOCUMENT_VERSION {
211+ Err ( DocumentError :: InvalidFile ( "Graphite document version mismatch" . to_string ( ) ) )
212+ } else {
213+ Ok ( document)
214+ }
215+ }
216+ Err ( e) => Err ( e) ,
217+ }
200218 }
201219
202220 pub fn with_name ( name : String , ipp : & InputPreprocessor ) -> Self {
203221 let mut document = Self { name, ..Self :: default ( ) } ;
204- document. graphene_document . root . transform = document. movement_handler . calculate_offset_transform ( ipp. viewport_bounds . size ( ) / 2. ) ;
222+ let starting_root_transform = document. movement_handler . calculate_offset_transform ( ipp. viewport_bounds . size ( ) / 2. ) ;
223+ document. graphene_document . root . transform = starting_root_transform;
224+ document. artboard_message_handler . artboards_graphene_document . root . transform = starting_root_transform;
205225 document
206226 }
207227
208- pub fn with_name_and_content ( name : String , serialized_content : String ) -> Result < Self , EditorError > {
228+ pub fn with_name_and_content ( name : String , serialized_content : String , ipp : & InputPreprocessor ) -> Result < Self , EditorError > {
209229 match Self :: deserialize_document ( & serialized_content) {
210230 Ok ( mut document) => {
211231 document. name = name;
232+ let starting_root_transform = document. movement_handler . calculate_offset_transform ( ipp. viewport_bounds . size ( ) / 2. ) ;
233+ document. graphene_document . root . transform = starting_root_transform;
234+ document. artboard_message_handler . artboards_graphene_document . root . transform = starting_root_transform;
212235 Ok ( document)
213236 }
214237 Err ( DocumentError :: InvalidFile ( msg) ) => Err ( EditorError :: Document ( msg) ) ,
@@ -546,6 +569,13 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
546569 ) ;
547570 // responses.push_back(OverlayMessage::RenderOverlays.into());
548571 }
572+ Artboard ( message) => {
573+ self . artboard_message_handler . process_action (
574+ message,
575+ ( Self :: layer_metadata_mut_no_borrow_self ( & mut self . layer_metadata , & [ ] ) , & self . graphene_document , ipp) ,
576+ responses,
577+ ) ;
578+ }
549579 ExportDocument => {
550580 let bbox = self . graphene_document . visible_layers_bounding_box ( ) . unwrap_or ( [ DVec2 :: ZERO , ipp. viewport_bounds . size ( ) ] ) ;
551581 let size = bbox[ 1 ] - bbox[ 0 ] ;
@@ -827,6 +857,8 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
827857 }
828858 . into ( ) ,
829859 ) ;
860+ responses. push_back ( ArtboardMessage :: RenderArtboards . into ( ) ) ;
861+
830862 let document_transform = & self . movement_handler ;
831863
832864 let scale = 0.5 + ASYMPTOTIC_EFFECT + document_transform. scale * SCALE_EFFECT ;
0 commit comments