This repository was archived by the owner on Feb 25, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Expand file tree
/
Copy pathSerializableStroke.cs
More file actions
114 lines (94 loc) · 4.59 KB
/
Copy pathSerializableStroke.cs
File metadata and controls
114 lines (94 loc) · 4.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Collections.Generic;
using System.Numerics;
using System.Text.Json;
using System.Text.Json.Serialization;
using Windows.UI.Input.Inking;
namespace Microsoft.Toolkit.Uwp.UI.Controls
{
internal class SerializableStroke
{
[JsonIgnore]
public List<InkPoint> FinalPointList { get; set; }
[JsonIgnore]
public InkDrawingAttributes DrawingAttributesIgnored { get; set; }
// This class is created to avoid breaking Changes
public CustomInkDrawingAttribute DrawingAttributes { get; set; }
public List<SerializablePoint> SerializableFinalPointList { get; set; }
public short? SerializableDrawingAttributesKind { get; set; }
public double? SerializableDrawingAttributesPencilProperties { get; set; }
public Matrix3x2 PointTransform { get; set; }
internal void Write(Utf8JsonWriter writer, JsonSerializerOptions options)
{
SerializableFinalPointList = new List<SerializablePoint>(FinalPointList.Count);
foreach (var point in FinalPointList)
{
var serializablePoint = new SerializablePoint();
serializablePoint.Position = point.Position;
serializablePoint.Pressure = point.Pressure;
serializablePoint.TiltX = point.TiltX;
serializablePoint.TiltY = point.TiltY;
serializablePoint.Pressure = point.Pressure;
SerializableFinalPointList.Add(serializablePoint);
}
if (DrawingAttributesIgnored != null)
{
SerializableDrawingAttributesKind = (short)DrawingAttributesIgnored.Kind;
SerializableDrawingAttributesPencilProperties = DrawingAttributesIgnored.PencilProperties?.Opacity;
DrawingAttributes = new CustomInkDrawingAttribute
{
Color = DrawingAttributesIgnored.Color,
FitToCurve = DrawingAttributesIgnored.FitToCurve,
IgnorePressure = DrawingAttributesIgnored.IgnorePressure,
IgnoreTilt = DrawingAttributesIgnored.IgnoreTilt,
Size = DrawingAttributesIgnored.Size,
PenTip = DrawingAttributesIgnored.PenTip,
PenTipTransform = DrawingAttributesIgnored.PenTipTransform,
DrawAsHighlighter = DrawingAttributesIgnored.DrawAsHighlighter
};
}
JsonSerializer.Serialize(writer, this, options);
SerializableFinalPointList = null;
}
internal void OnDeserialized()
{
var finalPointList = new List<InkPoint>(SerializableFinalPointList.Count);
foreach (var point in SerializableFinalPointList)
{
finalPointList.Add(new InkPoint(point.Position, point.Pressure, point.TiltX, point.TiltY, point.Timestamp));
}
FinalPointList = finalPointList;
InkDrawingAttributes pencilAttributes;
if (SerializableDrawingAttributesKind.HasValue &&
SerializableDrawingAttributesKind == (short)InkDrawingAttributesKind.Pencil)
{
pencilAttributes = InkDrawingAttributes.CreateForPencil();
}
else
{
pencilAttributes = new InkDrawingAttributes
{
PenTip = DrawingAttributes.PenTip,
PenTipTransform = DrawingAttributes.PenTipTransform,
DrawAsHighlighter = DrawingAttributes.DrawAsHighlighter
};
}
pencilAttributes.Color = DrawingAttributes.Color;
pencilAttributes.FitToCurve = DrawingAttributes.FitToCurve;
pencilAttributes.IgnorePressure = DrawingAttributes.IgnorePressure;
pencilAttributes.IgnoreTilt = DrawingAttributes.IgnoreTilt;
pencilAttributes.Size = DrawingAttributes.Size;
if (SerializableDrawingAttributesPencilProperties.HasValue)
{
pencilAttributes.PencilProperties.Opacity = SerializableDrawingAttributesPencilProperties.Value;
}
DrawingAttributesIgnored = pencilAttributes;
// Empty unused values
SerializableDrawingAttributesPencilProperties = null;
SerializableFinalPointList = null;
SerializableDrawingAttributesKind = null;
}
}
}