Skip to content

Commit c5167d4

Browse files
can save components
1 parent f1d8022 commit c5167d4

File tree

7 files changed

+93
-10
lines changed

7 files changed

+93
-10
lines changed

FlipnoteDotNet/App/Canvas/Components/FlipnoteCanvasComponent.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ protected FlipnoteCanvasComponent(string name, int width, int height, bool ignor
1616
Asset = asset;
1717
}
1818

19+
public Asset SourceAsset => Asset;
20+
1921
public void AttachToFrame(Frame frame)
2022
{
2123
if(frame==null)

FlipnoteDotNet/App/Data/Frame.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using FlipnoteDotNet.Canvas;
44
using FlipnoteDotNet.Canvas.Components;
55
using System.ComponentModel;
6-
using System.Diagnostics;
76
using System.Drawing.Drawing2D;
87
using System.Runtime.CompilerServices;
98

@@ -141,10 +140,15 @@ public Task<Bitmap> RenderThumbnail(CanvasModel canvasModel) => Task.Run<Bitmap>
141140

142141
public FrameDTO ToDTO()
143142
{
143+
var components = from c in Components
144+
where c is FlipnoteCanvasComponent
145+
let fc = c as FlipnoteCanvasComponent
146+
select new FlipComponentDTO { CanvasTransform = fc.Transform, AssetId = fc.SourceAsset.Id };
144147
return new FrameDTO
145148
{
146149
ColorIndices = FrameConfig.ColorIndices.ToArray(),
147-
PaperColorIndex = FrameConfig.PaperColorIndex
150+
PaperColorIndex = FrameConfig.PaperColorIndex,
151+
Components = components.ToArray()
148152
};
149153
}
150154
}

FlipnoteDotNet/App/Storage/AssetDTO.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace FlipnoteDotNet.App.Storage
88
public abstract class AssetDTO
99
{
1010
[XmlIgnore]
11-
public object Original { get; set; }
11+
public object Original { get; set; }
1212

1313
public int Id { get; set; }
1414
public string Name { get; set; }

FlipnoteDotNet/App/Storage/Assets/StaticBitmapDTO.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@ public StaticBitmapDTO(object original, int id, string name, byte[] thumbnailByt
2222
ImageBytes = imageBytes;
2323
}
2424

25-
public override Asset ToAsset() => new StaticBitmap(ImageBytes, ThumbnailBytes, Name);
25+
public override Asset ToAsset() => new StaticBitmap(ImageBytes, ThumbnailBytes, Name) { Id = Id };
2626
}
2727
}

FlipnoteDotNet/App/Storage/Codecs/V1.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using FlipnoteDotNet.Canvas;
1+
using FlipnoteDotNet.App.Data;
2+
using FlipnoteDotNet.Canvas;
23

34
namespace FlipnoteDotNet.App.Storage.Codecs
45
{
@@ -31,10 +32,11 @@ public static AppState DecodeProject(Project project, AppState baseState, Canvas
3132

3233
foreach (var a in projv1.Assets)
3334
appState.AssetsService.Assets.Add(a.ToAsset());
34-
foreach (var f in projv1.Frames)
35-
appState.FramesManager.AddFrame(f.ToFrame(canvasModel, paletteConfig));
3635

36+
Func<int, Asset> findAssetById = (id) => appState.AssetsService.Assets.Where(a => a.Id == id).FirstOrDefault();
3737

38+
foreach (var f in projv1.Frames)
39+
appState.FramesManager.AddFrame(f.ToFrame(canvasModel, paletteConfig, findAssetById));
3840

3941
return appState;
4042
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
using FlipnoteDotNet.App.Canvas.Components;
2+
using FlipnoteDotNet.App.Data;
3+
using FlipnoteDotNet.Canvas;
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Diagnostics;
7+
using System.Linq;
8+
using System.Security.Cryptography.Xml;
9+
using System.Text;
10+
using System.Threading.Tasks;
11+
using System.Xml.Serialization;
12+
13+
namespace FlipnoteDotNet.App.Storage
14+
{
15+
public class FlipComponentDTO
16+
{
17+
[XmlIgnore]
18+
public CanvasTransform CanvasTransform { get; set; }
19+
public int AssetId { get; set; }
20+
21+
public struct TransformDTO
22+
{
23+
[XmlAttribute]
24+
public int X { get; set; }
25+
[XmlAttribute]
26+
public int Y { get; set; }
27+
[XmlAttribute]
28+
public float ScaleX { get; set; }
29+
[XmlAttribute]
30+
public float ScaleY { get; set; }
31+
[XmlAttribute]
32+
public float AnchorX { get; set; }
33+
[XmlAttribute]
34+
public float AnchorY { get; set; }
35+
[XmlAttribute]
36+
public float Rotation { get; set; }
37+
public TransformDTO(CanvasTransform c)
38+
{
39+
X = c.X;
40+
Y = c.Y;
41+
ScaleX = c.ScaleX;
42+
ScaleY = c.ScaleY;
43+
AnchorX = c.AnchorX;
44+
AnchorY = c.AnchorY;
45+
Rotation = c.Rotation.Value;
46+
}
47+
48+
public CanvasTransform ToCanvasTransform()
49+
{
50+
return new CanvasTransform(X, Y, Rotation, ScaleX, ScaleY, AnchorX, AnchorY);
51+
}
52+
}
53+
54+
public TransformDTO Transform
55+
{
56+
get => new TransformDTO(CanvasTransform);
57+
set => CanvasTransform = value.ToCanvasTransform();
58+
}
59+
60+
public FlipnoteCanvasComponent ToCanvasComponent(Func<int, Asset> idToAsset)
61+
{
62+
var asset = idToAsset(AssetId);
63+
var component = asset.CreateCanvasComponent();
64+
Debug.WriteLine($"Aid = {AssetId}");
65+
Debug.WriteLine($"Transform = {CanvasTransform}");
66+
component.Transform = CanvasTransform;
67+
return component;
68+
}
69+
}
70+
}

FlipnoteDotNet/App/Storage/FrameDTO.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,19 @@ public class FrameDTO
77
{
88
public int[] ColorIndices { get; set; }
99
public int PaperColorIndex { get; set; }
10+
public FlipComponentDTO[] Components { get; set; }
1011

11-
12-
13-
public Frame ToFrame(CanvasModel canvasModel, PaletteConfig paletteConfig)
12+
public Frame ToFrame(CanvasModel canvasModel, PaletteConfig paletteConfig, Func<int, Asset> findAssetById)
1413
{
1514
var frame = new Frame(canvasModel, paletteConfig);
1615
frame.FrameConfig.ColorIndices = ColorIndices.ToArray();
1716
frame.FrameConfig.PaperColorIndex = PaperColorIndex;
17+
18+
foreach(var cdto in Components)
19+
{
20+
frame.AddComponent(cdto.ToCanvasComponent(findAssetById));
21+
}
22+
1823
return frame;
1924
}
2025

0 commit comments

Comments
 (0)