@@ -3,6 +3,7 @@ use crate::bounds::{BoundingBox, RenderBoundingBox};
3
3
use crate :: gradient:: GradientStops ;
4
4
use crate :: raster_types:: { CPU , GPU , Raster } ;
5
5
use crate :: table:: { Table , TableRow } ;
6
+ use crate :: text:: Typography ;
6
7
use crate :: uuid:: NodeId ;
7
8
use crate :: vector:: Vector ;
8
9
use crate :: { Artboard , Color , Ctx } ;
@@ -11,14 +12,34 @@ use glam::{DAffine2, DVec2};
11
12
use std:: hash:: Hash ;
12
13
13
14
/// The possible forms of graphical content that can be rendered by the Render node into either an image or SVG syntax.
14
- #[ derive( Clone , Debug , Hash , PartialEq , DynAny , serde :: Serialize , serde :: Deserialize ) ]
15
+ #[ derive( Clone , Debug , Hash , PartialEq , DynAny ) ]
15
16
pub enum Graphic {
16
17
Graphic ( Table < Graphic > ) ,
17
18
Vector ( Table < Vector > ) ,
18
19
RasterCPU ( Table < Raster < CPU > > ) ,
19
20
RasterGPU ( Table < Raster < GPU > > ) ,
20
21
Color ( Table < Color > ) ,
21
22
Gradient ( Table < GradientStops > ) ,
23
+ Typography ( Table < Typography > ) ,
24
+ }
25
+
26
+ impl serde:: Serialize for Graphic {
27
+ fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
28
+ where
29
+ S : serde:: Serializer ,
30
+ {
31
+ let default: Table < Graphic > = Table :: new ( ) ;
32
+ default. serialize ( serializer)
33
+ }
34
+ }
35
+
36
+ impl < ' de > serde:: Deserialize < ' de > for Graphic {
37
+ fn deserialize < D > ( _deserializer : D ) -> Result < Self , D :: Error >
38
+ where
39
+ D : serde:: Deserializer < ' de > ,
40
+ {
41
+ Ok ( Graphic :: Graphic ( Table :: new ( ) ) )
42
+ }
22
43
}
23
44
24
45
impl Default for Graphic {
@@ -232,6 +253,7 @@ impl Graphic {
232
253
Graphic :: RasterGPU ( raster) => raster. iter ( ) . all ( |row| row. alpha_blending . clip ) ,
233
254
Graphic :: Color ( color) => color. iter ( ) . all ( |row| row. alpha_blending . clip ) ,
234
255
Graphic :: Gradient ( gradient) => gradient. iter ( ) . all ( |row| row. alpha_blending . clip ) ,
256
+ Graphic :: Typography ( typography) => typography. iter ( ) . all ( |row| row. alpha_blending . clip ) ,
235
257
}
236
258
}
237
259
@@ -256,6 +278,7 @@ impl BoundingBox for Graphic {
256
278
Graphic :: Graphic ( graphic) => graphic. bounding_box ( transform, include_stroke) ,
257
279
Graphic :: Color ( color) => color. bounding_box ( transform, include_stroke) ,
258
280
Graphic :: Gradient ( gradient) => gradient. bounding_box ( transform, include_stroke) ,
281
+ Graphic :: Typography ( typography) => typography. bounding_box ( transform, include_stroke) ,
259
282
}
260
283
}
261
284
}
@@ -507,34 +530,15 @@ pub fn migrate_graphic<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Res
507
530
elements : Vec < ( Graphic , Option < NodeId > ) > ,
508
531
}
509
532
510
- #[ derive( Clone , Debug , serde:: Serialize , serde:: Deserialize ) ]
511
- pub struct OlderTable < T > {
512
- id : Vec < u64 > ,
513
- #[ serde( alias = "instances" , alias = "instance" ) ]
514
- element : Vec < T > ,
515
- }
516
-
517
- #[ derive( Clone , Debug , serde:: Serialize , serde:: Deserialize ) ]
518
- pub struct OldTable < T > {
519
- id : Vec < u64 > ,
520
- #[ serde( alias = "instances" , alias = "instance" ) ]
521
- element : Vec < T > ,
522
- transform : Vec < DAffine2 > ,
523
- alpha_blending : Vec < AlphaBlending > ,
524
- }
525
-
526
533
#[ derive( serde:: Serialize , serde:: Deserialize ) ]
527
534
#[ serde( untagged) ]
528
- enum GraphicFormat {
535
+ enum EitherFormat {
529
536
OldGraphicGroup ( OldGraphicGroup ) ,
530
- OlderTableOldGraphicGroup ( OlderTable < OldGraphicGroup > ) ,
531
- OldTableOldGraphicGroup ( OldTable < OldGraphicGroup > ) ,
532
- OldTableGraphicGroup ( OldTable < GraphicGroup > ) ,
533
537
Table ( serde_json:: Value ) ,
534
538
}
535
539
536
- Ok ( match GraphicFormat :: deserialize ( deserializer) ? {
537
- GraphicFormat :: OldGraphicGroup ( old) => {
540
+ Ok ( match EitherFormat :: deserialize ( deserializer) ? {
541
+ EitherFormat :: OldGraphicGroup ( old) => {
538
542
let mut graphic_table = Table :: new ( ) ;
539
543
for ( graphic, source_node_id) in old. elements {
540
544
graphic_table. push ( TableRow {
@@ -546,43 +550,7 @@ pub fn migrate_graphic<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Res
546
550
}
547
551
graphic_table
548
552
}
549
- GraphicFormat :: OlderTableOldGraphicGroup ( old) => old
550
- . element
551
- . into_iter ( )
552
- . flat_map ( |element| {
553
- element. elements . into_iter ( ) . map ( move |( graphic, source_node_id) | TableRow {
554
- element : graphic,
555
- transform : element. transform ,
556
- alpha_blending : element. alpha_blending ,
557
- source_node_id,
558
- } )
559
- } )
560
- . collect ( ) ,
561
- GraphicFormat :: OldTableOldGraphicGroup ( old) => old
562
- . element
563
- . into_iter ( )
564
- . flat_map ( |element| {
565
- element. elements . into_iter ( ) . map ( move |( graphic, source_node_id) | TableRow {
566
- element : graphic,
567
- transform : element. transform ,
568
- alpha_blending : element. alpha_blending ,
569
- source_node_id,
570
- } )
571
- } )
572
- . collect ( ) ,
573
- GraphicFormat :: OldTableGraphicGroup ( old) => old
574
- . element
575
- . into_iter ( )
576
- . flat_map ( |element| {
577
- element. elements . into_iter ( ) . map ( move |( graphic, source_node_id) | TableRow {
578
- element : graphic,
579
- transform : Default :: default ( ) ,
580
- alpha_blending : Default :: default ( ) ,
581
- source_node_id,
582
- } )
583
- } )
584
- . collect ( ) ,
585
- GraphicFormat :: Table ( value) => {
553
+ EitherFormat :: Table ( value) => {
586
554
// Try to deserialize as either table format
587
555
if let Ok ( old_table) = serde_json:: from_value :: < Table < GraphicGroup > > ( value. clone ( ) ) {
588
556
let mut graphic_table = Table :: new ( ) ;
0 commit comments