From c4182a5b02807a32488139cb151c78dfaeeb6819 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 03:18:14 +0300 Subject: [PATCH 01/72] wpf support --- .../InkPresenter.cs | 36 +- .../ImageConstructionSettings.cs | 28 +- src/SignaturePad.Shared/PathSmoothing.cs | 8 +- .../SignaturePadCanvasView.cs | 6 + src/SignaturePad.Shared/SignaturePadView.cs | 11 +- src/SignaturePad.WPF/InkPresenter.cs | 8 + src/SignaturePad.WPF/SignaturePad.WPF.csproj | 48 +++ src/SignaturePad.WPF/SignaturePad.cs | 364 ++++++++++++++++++ .../SignaturePadCanvasView.cs | 112 ++++++ src/SignaturePad.WPF/Themes/Generic.xaml | 102 +++++ src/SignaturePad.sln | 6 + 11 files changed, 723 insertions(+), 6 deletions(-) create mode 100644 src/SignaturePad.WPF/InkPresenter.cs create mode 100644 src/SignaturePad.WPF/SignaturePad.WPF.csproj create mode 100644 src/SignaturePad.WPF/SignaturePad.cs create mode 100644 src/SignaturePad.WPF/SignaturePadCanvasView.cs create mode 100644 src/SignaturePad.WPF/Themes/Generic.xaml diff --git a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs index 6e5e907..361b951 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs @@ -9,6 +9,13 @@ using NativeColor = Android.Graphics.Color; using NativeImage = Android.Graphics.Bitmap; using NativePath = Android.Graphics.Path; +#elif NET471 +using NativePath = System.Drawing.Drawing2D.GraphicsPath; +using NativeRect = System.Drawing.Rectangle; +using NativePoint = System.Drawing.Point; +using NativeSize = System.Drawing.Size; +using NativeColor = System.Drawing.Color; +using NativeImage = System.Drawing.Bitmap; #elif __IOS__ using NativeRect = CoreGraphics.CGRect; using NativeSize = CoreGraphics.CGSize; @@ -52,7 +59,7 @@ internal partial class InkPresenter // private properties -#if __IOS__ +#if __IOS__ private float Width => (float)Bounds.Width; private float Height => (float)Bounds.Height; @@ -65,8 +72,13 @@ private bool ShouldRedrawBufferImage var sizeChanged = false; if (bitmapBuffer != null) { +#if NET471 + var s = bitmapBuffer.Size; + sizeChanged = s.Width != this.StrokeWidth || s.Height != this.StrokeWidth; +#else var s = bitmapBuffer.GetSize (); sizeChanged = s.Width != Width || s.Height != Height; +#endif } return sizeChanged || @@ -84,7 +96,11 @@ private NativeRect DirtyRect var w = Math.Abs (dirtyRectRight - dirtyRectLeft); var h = Math.Abs (dirtyRectBottom - dirtyRectTop); var half = StrokeWidth / 2f; +#if NET471 + return new NativeRect ((int)(x - half), (int)(y - half), (int)(w + StrokeWidth), (int)(h + StrokeWidth)); +#else return new NativeRect (x - half, y - half, w + StrokeWidth, h + StrokeWidth); +#endif } } @@ -103,15 +119,18 @@ public void Clear () { paths.Clear (); currentPath = null; - +#if !NET471 this.Invalidate (); +#endif } public void AddStroke (NativePoint[] strokePoints, NativeColor color, float width) { if (AddStrokeInternal (strokePoints, color, width)) { +#if !NET471 this.Invalidate (); +#endif } } @@ -129,7 +148,9 @@ public void AddStrokes (IEnumerable strokes, NativeColor color, f if (changed) { +#if !NET471 this.Invalidate (); +#endif } } @@ -143,14 +164,23 @@ private bool AddStrokeInternal (IEnumerable points, NativeColor col } var newpath = new NativePath (); - newpath.MoveTo (strokePoints[0].X, strokePoints[0].Y); +#if NET471 + newpath.MoveTo (new NativePoint(strokePoints[0].X, strokePoints[0].Y)); foreach (var point in strokePoints.Skip (1)) { newpath.LineTo (point.X, point.Y); } paths.Add (new InkStroke (newpath, strokePoints, color, width)); +#else + newpath.MoveTo (strokePoints[0].X, strokePoints[0].Y); + foreach (var point in strokePoints.Skip (1)) + { + newpath.LineTo (point.X, point.Y); + } + paths.Add (new InkStroke (newpath, strokePoints, color, width)); +#endif return true; } diff --git a/src/SignaturePad.Shared/ImageConstructionSettings.cs b/src/SignaturePad.Shared/ImageConstructionSettings.cs index 03adbb0..10aedd3 100644 --- a/src/SignaturePad.Shared/ImageConstructionSettings.cs +++ b/src/SignaturePad.Shared/ImageConstructionSettings.cs @@ -20,6 +20,10 @@ using NativeSize = Windows.Foundation.Size; using NativeColor = Windows.UI.Color; using NativeNullableColor = System.Nullable; +#elif NET471 +using NativeSize = System.Drawing.Size; +using NativeColor = System.Drawing.Color; +using NativeNullableColor = System.Nullable; #endif namespace Xamarin.Controls @@ -92,6 +96,16 @@ public SizeOrScale (float x, float y, SizeOrScaleType type, bool keepAspectRatio public NativeSize GetScale (float width, float height) { +#if NET471 + if (Type == SizeOrScaleType.Scale) + { + return new NativeSize ((int)X, (int)Y); + } + else + { + return new NativeSize ((int)(X / width), (int)(Y / height)); + } +#else if (Type == SizeOrScaleType.Scale) { return new NativeSize (X, Y); @@ -100,10 +114,21 @@ public NativeSize GetScale (float width, float height) { return new NativeSize (X / width, Y / height); } +#endif } public NativeSize GetSize (float width, float height) { +#if NET471 + if (Type == SizeOrScaleType.Scale) + { + return new NativeSize ((int)(width * X), (int)(height * Y)); + } + else + { + return new NativeSize ((int)X, (int)Y); + } +#else if (Type == SizeOrScaleType.Scale) { return new NativeSize (width * X, height * Y); @@ -112,6 +137,7 @@ public NativeSize GetSize (float width, float height) { return new NativeSize (X, Y); } +#endif } public static implicit operator SizeOrScale (float scale) @@ -130,7 +156,7 @@ public struct ImageConstructionSettings #if __IOS__ || __ANDROID__ internal static readonly NativeColor Black = NativeColor.Black; internal static readonly NativeColor Transparent = new NativeColor (0, 0, 0, 0); -#elif WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP +#elif WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NET471 internal static readonly NativeColor Black = NativeColor.FromArgb (255, 0, 0, 0); internal static readonly NativeColor Transparent = NativeColor.FromArgb (0, 0, 0, 0); #endif diff --git a/src/SignaturePad.Shared/PathSmoothing.cs b/src/SignaturePad.Shared/PathSmoothing.cs index 7c02673..4ef67b4 100644 --- a/src/SignaturePad.Shared/PathSmoothing.cs +++ b/src/SignaturePad.Shared/PathSmoothing.cs @@ -17,6 +17,12 @@ using NativePoint = Windows.Foundation.Point; using NativePath = System.Collections.Generic.List; using InkStroke = Windows.UI.Input.Inking.InkStroke; +#elif NET471 +using NativePath= System.Drawing.Drawing2D.GraphicsPath; +using NativePoint = System.Drawing.Point; +using NativeSize = System.Drawing.Size; +using NativeColor = System.Drawing.Color; +using NativeImage = System.Drawing.Bitmap; #elif WINDOWS_PHONE_APP using NativePoint = Windows.Foundation.Point; using NativePath = Windows.UI.Xaml.Media.PathGeometry; @@ -47,7 +53,7 @@ public static InkStroke SmoothedPathWithGranularity (InkStroke currentPath, int } // create the new path with the old attributes -#if __ANDROID__ || __IOS__ || WINDOWS_PHONE_APP +#if __ANDROID__ || __IOS__ || WINDOWS_PHONE_APP || NET471 return new InkStroke (smoothedPath, smoothedPoints.ToList (), currentPath.Color, currentPath.Width); #elif WINDOWS_PHONE var da = currentPath.DrawingAttributes; diff --git a/src/SignaturePad.Shared/SignaturePadCanvasView.cs b/src/SignaturePad.Shared/SignaturePadCanvasView.cs index 51eae7a..cfeba4f 100644 --- a/src/SignaturePad.Shared/SignaturePadCanvasView.cs +++ b/src/SignaturePad.Shared/SignaturePadCanvasView.cs @@ -34,6 +34,12 @@ using NativePoint = Windows.Foundation.Point; using NativeColor = Windows.UI.Color; using NativeImage = Windows.UI.Xaml.Media.Imaging.WriteableBitmap; +#elif NET471 +using NativeRect = System.Drawing.Rectangle; +using NativePoint = System.Drawing.Point; +using NativeSize = System.Drawing.Size; +using NativeColor = System.Drawing.Color; +using NativeImage = System.Drawing.Bitmap; #endif namespace Xamarin.Controls diff --git a/src/SignaturePad.Shared/SignaturePadView.cs b/src/SignaturePad.Shared/SignaturePadView.cs index 57e78c9..ae65920 100644 --- a/src/SignaturePad.Shared/SignaturePadView.cs +++ b/src/SignaturePad.Shared/SignaturePadView.cs @@ -20,11 +20,17 @@ using NativeSize = Windows.Foundation.Size; using NativeColor = Windows.UI.Color; using NativeImage = Windows.UI.Xaml.Media.Imaging.WriteableBitmap; +#elif NET471 +using NativeRect = System.Drawing.Rectangle; +using NativePoint = System.Drawing.Point; +using NativeSize = System.Drawing.Size; +using NativeColor = System.Drawing.Color; +using NativeImage = System.Drawing.Bitmap; #endif namespace Xamarin.Controls { -#if WINDOWS_UWP +#if WINDOWS_UWP || NET471 partial class SignaturePad #else partial class SignaturePadView @@ -49,6 +55,9 @@ partial class SignaturePadView #elif WINDOWS_UWP private static readonly NativeColor SignaturePadDarkColor = Windows.UI.Colors.Black; private static readonly NativeColor SignaturePadLightColor = Windows.UI.Colors.White; +#elif NET471 + private static readonly NativeColor SignaturePadDarkColor = System.Drawing.Color.Black; + private static readonly NativeColor SignaturePadLightColor = System.Drawing.Color.White; #endif public NativePoint[][] Strokes => SignaturePadCanvas.Strokes; diff --git a/src/SignaturePad.WPF/InkPresenter.cs b/src/SignaturePad.WPF/InkPresenter.cs new file mode 100644 index 0000000..9934fb0 --- /dev/null +++ b/src/SignaturePad.WPF/InkPresenter.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Xamarin.Controls +{ + partial class InkPresenter : System.Windows.Ink.StrokeCollection + { + } +} diff --git a/src/SignaturePad.WPF/SignaturePad.WPF.csproj b/src/SignaturePad.WPF/SignaturePad.WPF.csproj new file mode 100644 index 0000000..fbebd99 --- /dev/null +++ b/src/SignaturePad.WPF/SignaturePad.WPF.csproj @@ -0,0 +1,48 @@ + + + + net471 + Xamarin.Controls + SignaturePad + False + False + bin\$(Configuration)\$(AssemblyName).xml + 1.0.0 + + + + 1.0.0 + Xamarin.Controls.SignaturePad + SignaturePad for Xamarin and Windows + $(AssemblyName) ($(TargetFramework)) + Microsoft + Microsoft + true + Makes capturing, saving, and displaying signatures extremely simple. + Makes capturing, saving, and displaying signatures extremely simple. + © Microsoft Corporation. All rights reserved. + en + https://go.microsoft.com/fwlink/?linkid=874510 + https://go.microsoft.com/fwlink/?linkid=874507 + https://go.microsoft.com/fwlink/?linkid=874507 + https://go.microsoft.com/fwlink/?linkid=874508 + https://go.microsoft.com/fwlink/?linkid=874509 + xamarin,signature,handwriting,windows,ios,android,uwp + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SignaturePad.WPF/SignaturePad.cs b/src/SignaturePad.WPF/SignaturePad.cs new file mode 100644 index 0000000..ade4ef9 --- /dev/null +++ b/src/SignaturePad.WPF/SignaturePad.cs @@ -0,0 +1,364 @@ +using System; +using System.ComponentModel; + +namespace Xamarin.Controls +{ + using System.Windows; + using System.Windows.Controls; + using System.Windows.Media; + + [TemplatePart (Name = PartBackgroundImageView, Type = typeof (Image))] + [TemplatePart (Name = PartSignaturePadCanvas, Type = typeof (SignaturePadCanvasView))] + [TemplatePart (Name = PartCaption, Type = typeof (TextBlock))] + [TemplatePart (Name = PartSignatureLine, Type = typeof (Border))] + [TemplatePart (Name = PartSignaturePrompt, Type = typeof (TextBlock))] + [TemplatePart (Name = PartClearLabel, Type = typeof (TextBlock))] + public partial class SignaturePad : Control + { + private const string PartBackgroundImageView = "BackgroundImageView"; + private const string PartSignaturePadCanvas = "SignaturePadCanvas"; + private const string PartCaption = "Caption"; + private const string PartSignatureLine = "SignatureLine"; + private const string PartSignaturePrompt = "SignaturePrompt"; + private const string PartClearLabel = "ClearLabel"; + + public static readonly DependencyProperty StrokeColorProperty; + public static readonly DependencyProperty StrokeWidthProperty; + public static readonly DependencyProperty SignatureLineBrushProperty; + public static readonly DependencyProperty SignatureLineThicknessProperty; + public static readonly DependencyProperty SignatureLineSpacingProperty; + public static readonly DependencyProperty CaptionTextProperty; + public static readonly DependencyProperty CaptionFontSizeProperty; + public static readonly DependencyProperty CaptionForegroundProperty; + public static readonly DependencyProperty SignaturePromptTextProperty; + public static readonly DependencyProperty SignaturePromptFontSizeProperty; + public static readonly DependencyProperty SignaturePromptForegroundProperty; + public static readonly DependencyProperty ClearLabelTextProperty; + public static readonly DependencyProperty ClearLabelFontSizeProperty; + public static readonly DependencyProperty ClearLabelForegroundProperty; + public static readonly DependencyProperty BackgroundImageProperty; + public static readonly DependencyProperty BackgroundImageStretchProperty; + public static readonly DependencyProperty BackgroundImageOpacityProperty; + + static SignaturePad () + { + StrokeColorProperty = DependencyProperty.Register ( + nameof (StrokeColor), + typeof (Color), + typeof (SignaturePad), + new PropertyMetadata (ImageConstructionSettings.DefaultStrokeColor)); + + StrokeWidthProperty = DependencyProperty.Register ( + nameof (StrokeWidth), + typeof (double), + typeof (SignaturePad), + new PropertyMetadata ((double)ImageConstructionSettings.DefaultStrokeWidth)); + + SignatureLineBrushProperty = DependencyProperty.Register ( + nameof (SignatureLineBrush), + typeof (Brush), + typeof (SignaturePad), + new PropertyMetadata (new SolidColorBrush (SignaturePadDarkColor))); + + SignatureLineThicknessProperty = DependencyProperty.Register ( + nameof (SignatureLineThickness), + typeof (double), + typeof (SignaturePad), + new PropertyMetadata ((double)DefaultLineThickness)); + + SignatureLineSpacingProperty = DependencyProperty.Register ( + nameof (SignatureLineSpacing), + typeof (double), + typeof (SignaturePad), + new PropertyMetadata ((double)DefaultNarrowSpacing, OnPaddingChanged)); + + CaptionTextProperty = DependencyProperty.Register ( + nameof (CaptionText), + typeof (string), + typeof (SignaturePad), + new PropertyMetadata (DefaultCaptionText)); + + CaptionFontSizeProperty = DependencyProperty.Register ( + nameof (CaptionFontSize), + typeof (double), + typeof (SignaturePad), + new PropertyMetadata ((double)DefaultFontSize)); + + CaptionForegroundProperty = DependencyProperty.Register ( + nameof (CaptionForeground), + typeof (Brush), + typeof (SignaturePad), + new PropertyMetadata (new SolidColorBrush (SignaturePadDarkColor))); + + SignaturePromptTextProperty = DependencyProperty.Register ( + nameof (SignaturePromptText), + typeof (string), + typeof (SignaturePad), + new PropertyMetadata (DefaultPromptText)); + + SignaturePromptFontSizeProperty = DependencyProperty.Register ( + nameof (SignaturePromptFontSize), + typeof (double), + typeof (SignaturePad), + new PropertyMetadata ((double)DefaultFontSize)); + + SignaturePromptForegroundProperty = DependencyProperty.Register ( + nameof (SignaturePromptForeground), + typeof (Brush), + typeof (SignaturePad), + new PropertyMetadata (new SolidColorBrush (SignaturePadDarkColor))); + + ClearLabelTextProperty = DependencyProperty.Register ( + nameof (ClearLabelText), + typeof (string), + typeof (SignaturePad), + new PropertyMetadata (DefaultClearLabelText)); + + ClearLabelFontSizeProperty = DependencyProperty.Register ( + nameof (ClearLabelFontSize), + typeof (double), + typeof (SignaturePad), + new PropertyMetadata ((double)DefaultFontSize)); + + ClearLabelForegroundProperty = DependencyProperty.Register ( + nameof (ClearLabelForeground), + typeof (Brush), + typeof (SignaturePad), + new PropertyMetadata (new SolidColorBrush (SignaturePadDarkColor))); + + BackgroundImageProperty = DependencyProperty.Register ( + nameof (BackgroundImage), + typeof (ImageSource), + typeof (SignaturePad), + new PropertyMetadata (null)); + + BackgroundImageStretchProperty = DependencyProperty.Register ( + nameof (BackgroundImageStretch), + typeof (Stretch), + typeof (SignaturePad), new PropertyMetadata (Stretch.None)); + + BackgroundImageOpacityProperty = DependencyProperty.Register ( + nameof (BackgroundImageOpacity), + typeof (double), + typeof (SignaturePad), + new PropertyMetadata (1.0)); + } + + public SignaturePad () + { + DefaultStyleKey = typeof (SignaturePad); + + RegisterPropertyChangedCallback (PaddingProperty, OnPaddingChanged); + + Padding = new Thickness (DefaultWideSpacing, DefaultWideSpacing, DefaultWideSpacing, DefaultNarrowSpacing); + } + + protected override void OnApplyTemplate () + { + SignaturePadCanvas.StrokeCompleted += delegate + { + OnSignatureStrokeCompleted (); + }; + SignaturePadCanvas.Cleared += delegate + { + OnSignatureCleared (); + }; + ClearLabel.Tapped += delegate + { + OnClearTapped (); + }; + + OnPaddingChanged (this, PaddingProperty); + UpdateUi (); + } + + /// + /// The real signature canvas view + /// + public SignaturePadCanvasView SignaturePadCanvas => GetTemplateChild (PartSignaturePadCanvas) as SignaturePadCanvasView; + + /// + /// The prompt displayed at the beginning of the signature line. + /// + public TextBlock SignaturePrompt => GetTemplateChild (PartSignaturePrompt) as TextBlock; + + /// + /// The caption displayed under the signature line. + /// + public TextBlock Caption => GetTemplateChild (PartCaption) as TextBlock; + + /// + /// An image view that may be used as a watermark or as a texture for the signature pad. + /// + public Image BackgroundImageView => GetTemplateChild (PartBackgroundImageView) as Image; + + /// + /// Gets the label that clears the pad when clicked. + /// + public TextBlock ClearLabel => GetTemplateChild (PartClearLabel) as TextBlock; + + /// + /// Gets the horizontal line that goes in the lower part of the pad. + /// + public Border SignatureLine => GetTemplateChild (PartSignatureLine) as Border; + + public Color StrokeColor + { + get { return (Color)GetValue (StrokeColorProperty); } + set { SetValue (StrokeColorProperty, value); } + } + + public double StrokeWidth + { + get { return (double)GetValue (StrokeWidthProperty); } + set { SetValue (StrokeWidthProperty, value); } + } + + public Brush SignatureLineBrush + { + get { return (Brush)GetValue (SignatureLineBrushProperty); } + set { SetValue (SignatureLineBrushProperty, value); } + } + + public Thickness SignatureLineThickness + { + get { return (Thickness)GetValue (SignatureLineThicknessProperty); } + set { SetValue (SignatureLineThicknessProperty, value); } + } + + public double SignatureLineSpacing + { + get { return (double)GetValue (SignatureLineSpacingProperty); } + set { SetValue (SignatureLineSpacingProperty, value); } + } + + public string CaptionText + { + get { return (string)GetValue (CaptionTextProperty); } + set { SetValue (CaptionTextProperty, value); } + } + + public double CaptionFontSize + { + get { return (double)GetValue (CaptionFontSizeProperty); } + set { SetValue (CaptionFontSizeProperty, value); } + } + + public Brush CaptionForeground + { + get { return (Brush)GetValue (CaptionForegroundProperty); } + set { SetValue (CaptionForegroundProperty, value); } + } + + public string SignaturePromptText + { + get { return (string)GetValue (SignaturePromptTextProperty); } + set { SetValue (SignaturePromptTextProperty, value); } + } + + public double SignaturePromptFontSize + { + get { return (double)GetValue (SignaturePromptFontSizeProperty); } + set { SetValue (SignaturePromptFontSizeProperty, value); } + } + + public Brush SignaturePromptForeground + { + get { return (Brush)GetValue (SignaturePromptForegroundProperty); } + set { SetValue (SignaturePromptForegroundProperty, value); } + } + + public string ClearLabelText + { + get { return (string)GetValue (ClearLabelTextProperty); } + set { SetValue (ClearLabelTextProperty, value); } + } + + public double ClearLabelFontSize + { + get { return (double)GetValue (ClearLabelFontSizeProperty); } + set { SetValue (ClearLabelFontSizeProperty, value); } + } + + public Brush ClearLabelForeground + { + get { return (Brush)GetValue (ClearLabelForegroundProperty); } + set { SetValue (ClearLabelForegroundProperty, value); } + } + + public ImageSource BackgroundImage + { + get { return (ImageSource)GetValue (BackgroundImageProperty); } + set { SetValue (BackgroundImageProperty, value); } + } + + public Stretch BackgroundImageStretch + { + get { return (Stretch)GetValue (BackgroundImageStretchProperty); } + set { SetValue (BackgroundImageStretchProperty, value); } + } + + public double BackgroundImageOpacity + { + get { return (double)GetValue (BackgroundImageOpacityProperty); } + set { SetValue (BackgroundImageOpacityProperty, value); } + } + + [EditorBrowsable (EditorBrowsableState.Never)] + [Obsolete ("Use Background instead.")] + public Color BackgroundColor + { + get + { + var scb = Background as SolidColorBrush; + return scb == null ? Colors.Transparent : scb.Color; + } + set { Background = new SolidColorBrush (value); } + } + + [EditorBrowsable (EditorBrowsableState.Never)] + [Obsolete ("Use SignatureLineBrush instead.")] + public Color SignatureLineColor + { + get + { + var scb = SignatureLineBrush as SolidColorBrush; + return scb == null ? Colors.Transparent : scb.Color; + } + set { SignatureLineBrush = new SolidColorBrush (value); } + } + + private void UpdateUi () + { + ClearLabel.Visibility = IsBlank ? Visibility.Collapsed : Visibility.Visible; + } + + private void OnPaddingChanged (DependencyObject sender, DependencyProperty dp) + { + var padding = Padding; + var spacing = SignatureLineSpacing; + + if (SignatureLine != null) + { + SignatureLine.Margin = new Thickness (padding.Left, 0, padding.Right, 0); + } + if (Caption != null) + { + Caption.Margin = new Thickness (0, spacing, 0, padding.Bottom); + } + if (ClearLabel != null) + { + ClearLabel.Margin = new Thickness (0, padding.Top, padding.Right, 0); + } + if (SignaturePrompt != null) + { + SignaturePrompt.Margin = new Thickness (padding.Left, 0, 0, spacing); + } + } + + private static void OnPaddingChanged (DependencyObject d, DependencyPropertyChangedEventArgs e) + { + ((SignaturePad)d).OnPaddingChanged (d, e.Property); + } + } +} diff --git a/src/SignaturePad.WPF/SignaturePadCanvasView.cs b/src/SignaturePad.WPF/SignaturePadCanvasView.cs new file mode 100644 index 0000000..5c309b3 --- /dev/null +++ b/src/SignaturePad.WPF/SignaturePadCanvasView.cs @@ -0,0 +1,112 @@ +using System; +using System.IO; +using System.Linq; +using System.Numerics; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Threading.Tasks; + +namespace Xamarin.Controls +{ + using System.Drawing; + using System.Windows; + using System.Windows.Controls; + using System.Windows.Media; + using System.Windows.Media.Imaging; + + [TemplatePart (Name = PartInkCanvas, Type = typeof (InkCanvas))] + public partial class SignaturePadCanvasView : Control + { + public static readonly DependencyProperty StrokeColorProperty; + public static readonly DependencyProperty StrokeWidthProperty; + + private const string PartInkCanvas = "InkCanvas"; + + private InkPresenter inkPresenter; + + static SignaturePadCanvasView () + { + StrokeColorProperty = DependencyProperty.Register ( + nameof (StrokeColor), + typeof (System.Windows.Media.Color), + typeof (SignaturePadCanvasView), + new PropertyMetadata (ImageConstructionSettings.DefaultStrokeColor, OnStrokePropertiesChanged)); + + StrokeWidthProperty = DependencyProperty.Register ( + nameof (StrokeWidth), + typeof (double), + typeof (SignaturePadCanvasView), + new PropertyMetadata ((double)ImageConstructionSettings.DefaultStrokeWidth, OnStrokePropertiesChanged)); + } + + public SignaturePadCanvasView () + { + DefaultStyleKey = typeof (SignaturePadCanvasView); + + IsEnabledChanged += delegate + { + var ip = inkPresenter; + }; + } + + /// + protected override void OnTemplateChanged (ControlTemplate oldTemplate, ControlTemplate newTemplate) + { + base.OnTemplateChanged (oldTemplate, newTemplate); + inkPresenter = InkCanvas?.Strokes as InkPresenter; + inkPresenter.StrokesChanged += (sender, e) => OnStrokeCompleted (); + OnStrokePropertiesChanged (this, new DependencyPropertyChangedEventArgs (null, "", "")); + } + + private InkCanvas InkCanvas => GetTemplateChild (PartInkCanvas) as InkCanvas; + + public System.Windows.Media.Color StrokeColor + { + get { return (System.Windows.Media.Color)GetValue (StrokeColorProperty); } + set { SetValue (StrokeColorProperty, value); } + } + + public double StrokeWidth + { + get { return (double)GetValue (StrokeWidthProperty); } + set { SetValue (StrokeWidthProperty, value); } + } + + public void Clear () + { + if (inkPresenter != null) + { + inkPresenter.Clear (); + + OnCleared (); + } + } + + private async Task GetImageStreamInternal (SignatureImageFormat format, System.Drawing.Size scale, Rect signatureBounds, System.Drawing.Size imageSize, float strokeWidth, System.Drawing.Color strokeColor, System.Drawing.Color backgroundColor) + { + + return null; + + } + + private Bitmap GetImageInternal (System.Drawing.SizeF scale, System.Drawing.RectangleF signatureBounds, + System.Drawing.SizeF imageSize, float strokeWidth, System.Windows.Media.Color strokeColor, System.Drawing.Color backgroundColor) + { + return new Bitmap (""); + } + + private static void OnStrokePropertiesChanged (DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var signaturePad = d as SignaturePadCanvasView; + + var inkPresenter = signaturePad.inkPresenter; + if (inkPresenter != null) + { + foreach (var stroke in inkPresenter) + { + stroke.DrawingAttributes.Color = signaturePad.StrokeColor; + stroke.DrawingAttributes.Width = signaturePad.StrokeWidth; + } + } + } + } +} diff --git a/src/SignaturePad.WPF/Themes/Generic.xaml b/src/SignaturePad.WPF/Themes/Generic.xaml new file mode 100644 index 0000000..08a6589 --- /dev/null +++ b/src/SignaturePad.WPF/Themes/Generic.xaml @@ -0,0 +1,102 @@ + + + + + + + diff --git a/src/SignaturePad.sln b/src/SignaturePad.sln index 800df94..1d2241b 100644 --- a/src/SignaturePad.sln +++ b/src/SignaturePad.sln @@ -17,6 +17,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.UWP", "Signatu EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.UWP", "SignaturePad.Forms.UWP\SignaturePad.Forms.UWP.csproj", "{6FC62387-6717-4577-A48B-D15848741F08}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignaturePad.WPF", "SignaturePad.WPF\SignaturePad.WPF.csproj", "{95F78ABF-197E-48D0-880C-6AA3A7A9FAA8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -51,6 +53,10 @@ Global {6FC62387-6717-4577-A48B-D15848741F08}.Debug|Any CPU.Build.0 = Debug|Any CPU {6FC62387-6717-4577-A48B-D15848741F08}.Release|Any CPU.ActiveCfg = Release|Any CPU {6FC62387-6717-4577-A48B-D15848741F08}.Release|Any CPU.Build.0 = Release|Any CPU + {95F78ABF-197E-48D0-880C-6AA3A7A9FAA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {95F78ABF-197E-48D0-880C-6AA3A7A9FAA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {95F78ABF-197E-48D0-880C-6AA3A7A9FAA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {95F78ABF-197E-48D0-880C-6AA3A7A9FAA8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 331906f94045a548647dad437516e192c8a4207d Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 04:08:29 +0300 Subject: [PATCH 02/72] wpf project --- .../InkPresenter.cs | 15 ++++--- .../InkStroke.cs | 4 ++ .../ImageConstructionSettings.cs | 4 +- src/SignaturePad.Shared/PathSmoothing.cs | 19 +++++++++ .../SignaturePadCanvasView.cs | 42 +++++++++++++++++-- src/SignaturePad.Shared/SignaturePadView.cs | 6 +-- src/SignaturePad.WPF/SignaturePad.WPF.csproj | 1 - src/SignaturePad.WPF/SignaturePad.cs | 9 ++-- .../SignaturePadCanvasView.cs | 4 +- 9 files changed, 84 insertions(+), 20 deletions(-) diff --git a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs index 361b951..874499f 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs @@ -11,10 +11,10 @@ using NativePath = Android.Graphics.Path; #elif NET471 using NativePath = System.Drawing.Drawing2D.GraphicsPath; -using NativeRect = System.Drawing.Rectangle; +using NativeRect = System.Drawing.RectangleF; using NativePoint = System.Drawing.Point; using NativeSize = System.Drawing.Size; -using NativeColor = System.Drawing.Color; +using NativeColor = System.Windows.Media.Color; using NativeImage = System.Drawing.Bitmap; #elif __IOS__ using NativeRect = CoreGraphics.CGRect; @@ -38,7 +38,7 @@ internal partial class InkPresenter { private const float MinimumPointDistance = 2.0f; - public static float ScreenDensity; + public static float ScreenDensity = 0; private readonly List paths = new List (); private InkStroke currentPath; @@ -49,7 +49,7 @@ internal partial class InkPresenter private float dirtyRectRight; private float dirtyRectBottom; - private NativeImage bitmapBuffer; + private NativeImage bitmapBuffer = null; // public properties @@ -165,10 +165,13 @@ private bool AddStrokeInternal (IEnumerable points, NativeColor col var newpath = new NativePath (); #if NET471 - newpath.MoveTo (new NativePoint(strokePoints[0].X, strokePoints[0].Y)); + + var prev = new NativePoint (strokePoints[0].X, strokePoints[0].Y); foreach (var point in strokePoints.Skip (1)) { - newpath.LineTo (point.X, point.Y); + var destPoint = new NativePoint (point.X, point.Y); + newpath.AddLine(prev, destPoint); + prev = destPoint; } paths.Add (new InkStroke (newpath, strokePoints, color, width)); diff --git a/src/SignaturePad.InkPresenter.Shared/InkStroke.cs b/src/SignaturePad.InkPresenter.Shared/InkStroke.cs index 6f95e93..33c8c0a 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkStroke.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkStroke.cs @@ -4,6 +4,10 @@ using NativePoint = System.Drawing.PointF; using NativeColor = Android.Graphics.Color; using NativePath = Android.Graphics.Path; +#elif NET471 +using NativePoint = System.Drawing.Point; +using NativeColor = System.Windows.Media.Color; +using NativePath = System.Drawing.Drawing2D.GraphicsPath; #elif __IOS__ using NativePoint = CoreGraphics.CGPoint; using NativeColor = UIKit.UIColor; diff --git a/src/SignaturePad.Shared/ImageConstructionSettings.cs b/src/SignaturePad.Shared/ImageConstructionSettings.cs index 10aedd3..50c65b1 100644 --- a/src/SignaturePad.Shared/ImageConstructionSettings.cs +++ b/src/SignaturePad.Shared/ImageConstructionSettings.cs @@ -22,8 +22,8 @@ using NativeNullableColor = System.Nullable; #elif NET471 using NativeSize = System.Drawing.Size; -using NativeColor = System.Drawing.Color; -using NativeNullableColor = System.Nullable; +using NativeColor = System.Windows.Media.Color; +using NativeNullableColor = System.Nullable; #endif namespace Xamarin.Controls diff --git a/src/SignaturePad.Shared/PathSmoothing.cs b/src/SignaturePad.Shared/PathSmoothing.cs index 4ef67b4..a339811 100644 --- a/src/SignaturePad.Shared/PathSmoothing.cs +++ b/src/SignaturePad.Shared/PathSmoothing.cs @@ -96,7 +96,9 @@ public static void SmoothedPathWithGranularity (List currentPoints, currentPoints.Add (currentPoints[currentPoints.Count - 1]); // add the first point +#if !NET471 smoothedPath.MoveTo (currentPoints[0].X, currentPoints[0].Y); +#endif smoothedPoints.Add (currentPoints[0]); for (var index = 1; index < currentPoints.Count - 2; index++) @@ -114,6 +116,7 @@ public static void SmoothedPathWithGranularity (List currentPoints, var ttt = tt * t; // intermediate point +#if !NET471 var mid = new NativePoint { X = 0.5f * (2f * p1.X + (p2.X - p0.X) * t + @@ -125,17 +128,33 @@ public static void SmoothedPathWithGranularity (List currentPoints, (3 * p1.Y - p0.Y - 3 * p2.Y + p3.Y) * ttt) }; smoothedPath.LineTo (mid.X, mid.Y); +#else + var mid = new NativePoint + { + X = (int)(0.5f * (2f * p1.X + (p2.X - p0.X) * t + + (2f * p0.X - 5f * p1.X + 4f * p2.X - p3.X) * tt + + (3f * p1.X - p0.X - 3f * p2.X + p3.X) * ttt)), + + Y = (int)(0.5f * (2 * p1.Y + (p2.Y - p0.Y) * t + + (2 * p0.Y - 5 * p1.Y + 4 * p2.Y - p3.Y) * tt + + (3 * p1.Y - p0.Y - 3 * p2.Y + p3.Y) * ttt)) + }; +#endif smoothedPoints.Add (mid); } // add p2 +#if !NET471 smoothedPath.LineTo (p2.X, p2.Y); +#endif smoothedPoints.Add (p2); } // add the last point var last = currentPoints[currentPoints.Count - 1]; +#if !NET471 smoothedPath.LineTo (last.X, last.Y); +#endif smoothedPoints.Add (last); } diff --git a/src/SignaturePad.Shared/SignaturePadCanvasView.cs b/src/SignaturePad.Shared/SignaturePadCanvasView.cs index cfeba4f..f280a47 100644 --- a/src/SignaturePad.Shared/SignaturePadCanvasView.cs +++ b/src/SignaturePad.Shared/SignaturePadCanvasView.cs @@ -35,10 +35,10 @@ using NativeColor = Windows.UI.Color; using NativeImage = Windows.UI.Xaml.Media.Imaging.WriteableBitmap; #elif NET471 -using NativeRect = System.Drawing.Rectangle; +using NativeRect = System.Drawing.RectangleF; using NativePoint = System.Drawing.Point; using NativeSize = System.Drawing.Size; -using NativeColor = System.Drawing.Color; +using NativeColor = System.Windows.Media.Color; using NativeImage = System.Drawing.Bitmap; #endif @@ -50,7 +50,7 @@ partial class SignaturePadCanvasView public event EventHandler Cleared; - public bool IsBlank => inkPresenter == null ? true : inkPresenter.GetStrokes ().Count == 0; + public bool IsBlank => inkPresenter == null || inkPresenter.GetStrokes ().Count == 0; public NativePoint[] Points { @@ -90,7 +90,11 @@ public NativeRect GetSignatureBounds (float padding = 5f) return NativeRect.Empty; } +#if NET471 + var size = this.RenderSize; +#else var size = this.GetSize (); +#endif double xMin = size.Width, xMax = 0, yMin = size.Height, yMax = 0; foreach (var point in inkPresenter.GetStrokes ().SelectMany (stroke => stroke.GetPoints ())) { @@ -404,11 +408,42 @@ private bool GetImageConstructionArguments (ImageConstructionSettings settings, } var sizeOrScale = settings.DesiredSizeOrScale.Value; +#if NET471 + var viewSize = this.RenderSize; +#else var viewSize = this.GetSize (); +#endif imageSize = sizeOrScale.GetSize ((float)viewSize.Width, (float)viewSize.Height); scale = sizeOrScale.GetScale ((float)imageSize.Width, (float)imageSize.Height); +#if NET471 + if (settings.ShouldCrop == true) + { + signatureBounds = GetSignatureBounds (settings.Padding.Value); + + if (sizeOrScale.Type == SizeOrScaleType.Size) + { + // if a specific size was set, scale to that + var scaleX = imageSize.Width / (float)signatureBounds.Width; + var scaleY = imageSize.Height / (float)signatureBounds.Height; + if (sizeOrScale.KeepAspectRatio) + { + scaleX = scaleY = Math.Min ((float)scaleX, (float)scaleY); + } + scale = new NativeSize ((int)scaleX, (int)scaleY); + } + else if (sizeOrScale.Type == SizeOrScaleType.Scale) + { + imageSize.Width = (int)(signatureBounds.Width * scale.Width); + imageSize.Height = (int)(signatureBounds.Height * scale.Height); + } + } + else + { + signatureBounds = new NativeRect (0, 0, (float)viewSize.Width, (float)viewSize.Height); + } +#else if (settings.ShouldCrop == true) { signatureBounds = GetSignatureBounds (settings.Padding.Value); @@ -434,6 +469,7 @@ private bool GetImageConstructionArguments (ImageConstructionSettings settings, { signatureBounds = new NativeRect (0, 0, viewSize.Width, viewSize.Height); } +#endif strokeWidth = settings.StrokeWidth.Value; strokeColor = (NativeColor)settings.StrokeColor; diff --git a/src/SignaturePad.Shared/SignaturePadView.cs b/src/SignaturePad.Shared/SignaturePadView.cs index ae65920..e59ea50 100644 --- a/src/SignaturePad.Shared/SignaturePadView.cs +++ b/src/SignaturePad.Shared/SignaturePadView.cs @@ -24,7 +24,7 @@ using NativeRect = System.Drawing.Rectangle; using NativePoint = System.Drawing.Point; using NativeSize = System.Drawing.Size; -using NativeColor = System.Drawing.Color; +using NativeColor = System.Windows.Media.Color; using NativeImage = System.Drawing.Bitmap; #endif @@ -56,8 +56,8 @@ partial class SignaturePadView private static readonly NativeColor SignaturePadDarkColor = Windows.UI.Colors.Black; private static readonly NativeColor SignaturePadLightColor = Windows.UI.Colors.White; #elif NET471 - private static readonly NativeColor SignaturePadDarkColor = System.Drawing.Color.Black; - private static readonly NativeColor SignaturePadLightColor = System.Drawing.Color.White; + private static readonly NativeColor SignaturePadDarkColor = new NativeColor () { A = System.Drawing.Color.Black.A, B = System.Drawing.Color.Black.B, G = System.Drawing.Color.Black.G, R = System.Drawing.Color.Black.R }; + private static readonly NativeColor SignaturePadLightColor = new NativeColor () { A = System.Drawing.Color.White.A, B = System.Drawing.Color.White.B, G = System.Drawing.Color.White.G, R = System.Drawing.Color.White.R }; #endif public NativePoint[][] Strokes => SignaturePadCanvas.Strokes; diff --git a/src/SignaturePad.WPF/SignaturePad.WPF.csproj b/src/SignaturePad.WPF/SignaturePad.WPF.csproj index fbebd99..e0afeff 100644 --- a/src/SignaturePad.WPF/SignaturePad.WPF.csproj +++ b/src/SignaturePad.WPF/SignaturePad.WPF.csproj @@ -5,7 +5,6 @@ Xamarin.Controls SignaturePad False - False bin\$(Configuration)\$(AssemblyName).xml 1.0.0 diff --git a/src/SignaturePad.WPF/SignaturePad.cs b/src/SignaturePad.WPF/SignaturePad.cs index ade4ef9..daa8765 100644 --- a/src/SignaturePad.WPF/SignaturePad.cs +++ b/src/SignaturePad.WPF/SignaturePad.cs @@ -148,13 +148,16 @@ public SignaturePad () { DefaultStyleKey = typeof (SignaturePad); - RegisterPropertyChangedCallback (PaddingProperty, OnPaddingChanged); + //RegisterPropertyChangedCallback (PaddingProperty, OnPaddingChanged); Padding = new Thickness (DefaultWideSpacing, DefaultWideSpacing, DefaultWideSpacing, DefaultNarrowSpacing); } - protected override void OnApplyTemplate () + /// + protected override void OnTemplateChanged (ControlTemplate oldTemplate, ControlTemplate newTemplate) { + base.OnTemplateChanged (oldTemplate, newTemplate); + SignaturePadCanvas.StrokeCompleted += delegate { OnSignatureStrokeCompleted (); @@ -163,7 +166,7 @@ protected override void OnApplyTemplate () { OnSignatureCleared (); }; - ClearLabel.Tapped += delegate + ClearLabel.MouseDown += delegate { OnClearTapped (); }; diff --git a/src/SignaturePad.WPF/SignaturePadCanvasView.cs b/src/SignaturePad.WPF/SignaturePadCanvasView.cs index 5c309b3..0cab421 100644 --- a/src/SignaturePad.WPF/SignaturePadCanvasView.cs +++ b/src/SignaturePad.WPF/SignaturePadCanvasView.cs @@ -81,7 +81,7 @@ public void Clear () } } - private async Task GetImageStreamInternal (SignatureImageFormat format, System.Drawing.Size scale, Rect signatureBounds, System.Drawing.Size imageSize, float strokeWidth, System.Drawing.Color strokeColor, System.Drawing.Color backgroundColor) + private Task GetImageStreamInternal (SignatureImageFormat format, System.Drawing.Size scale, RectangleF signatureBounds, System.Drawing.Size imageSize, float strokeWidth, System.Windows.Media.Color strokeColor, System.Windows.Media.Color backgroundColor) { return null; @@ -89,7 +89,7 @@ private async Task GetImageStreamInternal (SignatureImageFormat format, } private Bitmap GetImageInternal (System.Drawing.SizeF scale, System.Drawing.RectangleF signatureBounds, - System.Drawing.SizeF imageSize, float strokeWidth, System.Windows.Media.Color strokeColor, System.Drawing.Color backgroundColor) + System.Drawing.SizeF imageSize, float strokeWidth, System.Windows.Media.Color strokeColor, System.Windows.Media.Color backgroundColor) { return new Bitmap (""); } From 205f61fe9b9c16b8a685c30e35a3450b038a1a7a Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 04:35:11 +0300 Subject: [PATCH 03/72] Support foe xamarin forms --- .../SignaturePad.Forms.Droid.csproj | 2 +- .../ColorExtensions.cs | 12 +++-- .../SignaturePadCanvasRenderer.cs | 6 ++- .../SignaturePad.Forms.WPF.csproj | 45 +++++++++++++++++++ .../SignaturePad.Forms.iOS.csproj | 2 +- .../SignaturePad.Forms.csproj | 2 +- src/SignaturePad.sln | 8 +++- 7 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj diff --git a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj index 12fe85d..b97be6d 100644 --- a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj +++ b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs b/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs index 591dcd4..f6f3a1e 100644 --- a/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs +++ b/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs @@ -1,4 +1,4 @@ -using Color = Xamarin.Forms.Color; +using Color = Xamarin.Forms.Color; #if WINDOWS_PHONE using System.Windows.Controls; using System.Windows.Media; @@ -15,13 +15,17 @@ using Android.Widget; using Xamarin.Forms.Platform.Android; using NativeColor = Android.Graphics.Color; +#elif NET471 +using NativeColor = System.Windows.Media.Color; +using TextBlock = System.Windows.Controls.TextBlock; +using SolidColorBrush = System.Windows.Media.SolidColorBrush; #endif namespace SignaturePad.Forms { public static class ColorExtensions { -#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP +#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NET471 public static NativeColor ToWindows (this Color color) { return NativeColor.FromArgb ( @@ -34,7 +38,7 @@ public static NativeColor ToWindows (this Color color) public static NativeColor ToNative (this Color color) { -#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP +#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NET471 return color.ToWindows (); #elif __IOS__ return color.ToUIColor (); @@ -43,7 +47,7 @@ public static NativeColor ToNative (this Color color) #endif } -#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP +#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NET471 public static void SetTextColor (this TextBlock textBlock, Color color) { textBlock.Foreground = new SolidColorBrush (color.ToNative ()); diff --git a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs index 7476e14..f60cfec 100644 --- a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs +++ b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ComponentModel; using System.Linq; using Xamarin.Forms; @@ -25,6 +25,10 @@ using Xamarin.Forms.Platform.Android; using NativeSignaturePadCanvasView = Xamarin.Controls.SignaturePadCanvasView; using NativePoint = System.Drawing.PointF; +#elif NET471 +using Xamarin.Forms.Platform.WPF; +using NativeSignaturePadCanvasView = Xamarin.Controls.SignaturePadCanvasView; +using NativePoint = System.Drawing.PointF; #endif [assembly: ExportRenderer (typeof (SignaturePadCanvasView), typeof (SignaturePadCanvasRenderer))] diff --git a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj new file mode 100644 index 0000000..c362253 --- /dev/null +++ b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj @@ -0,0 +1,45 @@ + + + + net471 + SignaturePad.Forms + SignaturePad.Forms + False + bin\$(Configuration)\$(AssemblyName).xml + 1.0.0 + + + + 1.0.0 + Xamarin.Controls.SignaturePad.Forms + SignaturePad for Xamarin.Forms + $(AssemblyName) ($(TargetFramework)) + Microsoft + Microsoft + true + Makes capturing, saving, and displaying signatures extremely simple. + Makes capturing, saving, and displaying signatures extremely simple. + © Microsoft Corporation. All rights reserved. + en + https://go.microsoft.com/fwlink/?linkid=874510 + https://go.microsoft.com/fwlink/?linkid=874507 + https://go.microsoft.com/fwlink/?linkid=874507 + https://go.microsoft.com/fwlink/?linkid=874508 + https://go.microsoft.com/fwlink/?linkid=874509 + xamarin,signature,handwriting,windows,ios,android,uwp + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj index 75735f0..2432efc 100644 --- a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj +++ b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms/SignaturePad.Forms.csproj b/src/SignaturePad.Forms/SignaturePad.Forms.csproj index 3b8bd84..f025158 100644 --- a/src/SignaturePad.Forms/SignaturePad.Forms.csproj +++ b/src/SignaturePad.Forms/SignaturePad.Forms.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/SignaturePad.sln b/src/SignaturePad.sln index 1d2241b..cbc0973 100644 --- a/src/SignaturePad.sln +++ b/src/SignaturePad.sln @@ -17,7 +17,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.UWP", "Signatu EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.UWP", "SignaturePad.Forms.UWP\SignaturePad.Forms.UWP.csproj", "{6FC62387-6717-4577-A48B-D15848741F08}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignaturePad.WPF", "SignaturePad.WPF\SignaturePad.WPF.csproj", "{95F78ABF-197E-48D0-880C-6AA3A7A9FAA8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.WPF", "SignaturePad.WPF\SignaturePad.WPF.csproj", "{95F78ABF-197E-48D0-880C-6AA3A7A9FAA8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignaturePad.Forms.WPF", "SignaturePad.Forms.WPF\SignaturePad.Forms.WPF.csproj", "{873AB6F5-799A-417C-8FF3-9AE79C485B76}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -57,6 +59,10 @@ Global {95F78ABF-197E-48D0-880C-6AA3A7A9FAA8}.Debug|Any CPU.Build.0 = Debug|Any CPU {95F78ABF-197E-48D0-880C-6AA3A7A9FAA8}.Release|Any CPU.ActiveCfg = Release|Any CPU {95F78ABF-197E-48D0-880C-6AA3A7A9FAA8}.Release|Any CPU.Build.0 = Release|Any CPU + {873AB6F5-799A-417C-8FF3-9AE79C485B76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {873AB6F5-799A-417C-8FF3-9AE79C485B76}.Debug|Any CPU.Build.0 = Debug|Any CPU + {873AB6F5-799A-417C-8FF3-9AE79C485B76}.Release|Any CPU.ActiveCfg = Release|Any CPU + {873AB6F5-799A-417C-8FF3-9AE79C485B76}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 7a7c2d90dc56e90a46727e3bee7dd50db476ed8b Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 04:55:53 +0300 Subject: [PATCH 04/72] add missed packages --- src/SignaturePad.Android/SignaturePad.Android.csproj | 2 +- .../SignaturePad.Forms.Droid.csproj | 2 +- .../SignaturePadCanvasRenderer.cs | 10 +++++++++- .../SignaturePad.Forms.WPF.csproj | 3 ++- .../SignaturePad.Forms.iOS.csproj | 2 +- src/SignaturePad.Forms/SignaturePad.Forms.csproj | 4 ++-- src/SignaturePad.WPF/SignaturePad.WPF.csproj | 5 ++++- src/SignaturePad.iOS/SignaturePad.iOS.csproj | 2 +- 8 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/SignaturePad.Android/SignaturePad.Android.csproj b/src/SignaturePad.Android/SignaturePad.Android.csproj index 52b8d8a..d958519 100644 --- a/src/SignaturePad.Android/SignaturePad.Android.csproj +++ b/src/SignaturePad.Android/SignaturePad.Android.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj index b97be6d..c504e8a 100644 --- a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj +++ b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs index f60cfec..9d5e872 100644 --- a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs +++ b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs @@ -28,7 +28,7 @@ #elif NET471 using Xamarin.Forms.Platform.WPF; using NativeSignaturePadCanvasView = Xamarin.Controls.SignaturePadCanvasView; -using NativePoint = System.Drawing.PointF; +using NativePoint = System.Drawing.Point; #endif [assembly: ExportRenderer (typeof (SignaturePadCanvasView), typeof (SignaturePadCanvasRenderer))] @@ -166,7 +166,11 @@ private void OnPointsSpecified (object sender, SignaturePadCanvasView.PointsEven var ctrl = Control; if (ctrl != null) { +#if NET471 + ctrl.LoadPoints (e.Points.Select (p => new NativePoint ((int)p.X, (int)p.Y)).ToArray ()); +#else ctrl.LoadPoints (e.Points.Select (p => new NativePoint ((float)p.X, (float)p.Y)).ToArray ()); +#endif } } @@ -184,7 +188,11 @@ private void OnStrokesSpecified (object sender, SignaturePadCanvasView.StrokesEv var ctrl = Control; if (ctrl != null) { +#if NET471 + ctrl.LoadStrokes (e.Strokes.Select (s => s.Select (p => new NativePoint ((int)p.X, (int)p.Y)).ToArray ()).ToArray ()); +#else ctrl.LoadStrokes (e.Strokes.Select (s => s.Select (p => new NativePoint ((float)p.X, (float)p.Y)).ToArray ()).ToArray ()); +#endif } } diff --git a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj index c362253..62d5bc7 100644 --- a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj +++ b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj @@ -30,8 +30,9 @@ - + + diff --git a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj index 2432efc..d3f0ff6 100644 --- a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj +++ b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/SignaturePad.Forms/SignaturePad.Forms.csproj b/src/SignaturePad.Forms/SignaturePad.Forms.csproj index f025158..0edd409 100644 --- a/src/SignaturePad.Forms/SignaturePad.Forms.csproj +++ b/src/SignaturePad.Forms/SignaturePad.Forms.csproj @@ -1,7 +1,7 @@  - netstandard1.0 + netstandard2.0 SignaturePad.Forms SignaturePad.Forms False @@ -30,7 +30,7 @@ - + diff --git a/src/SignaturePad.WPF/SignaturePad.WPF.csproj b/src/SignaturePad.WPF/SignaturePad.WPF.csproj index e0afeff..d56ed40 100644 --- a/src/SignaturePad.WPF/SignaturePad.WPF.csproj +++ b/src/SignaturePad.WPF/SignaturePad.WPF.csproj @@ -4,6 +4,9 @@ net471 Xamarin.Controls SignaturePad + + False + False bin\$(Configuration)\$(AssemblyName).xml 1.0.0 @@ -30,7 +33,7 @@ - + diff --git a/src/SignaturePad.iOS/SignaturePad.iOS.csproj b/src/SignaturePad.iOS/SignaturePad.iOS.csproj index 897473f..4edde68 100644 --- a/src/SignaturePad.iOS/SignaturePad.iOS.csproj +++ b/src/SignaturePad.iOS/SignaturePad.iOS.csproj @@ -31,7 +31,7 @@ - + From c0b0317b7500003f59d7875f0f7ed6201e2f657d Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 16:08:11 +0300 Subject: [PATCH 05/72] build cake fix and samples --- ISSUE_TEMPLATE.md | 2 +- build.cake | 3 +++ ...Xamarin.Controls.SignaturePad.Forms.nuspec | 22 +++++++++++++------ nuget/Xamarin.Controls.SignaturePad.nuspec | 4 ++++ .../Samples.Android/Samples.Android.csproj | 2 +- .../Samples.UWP/Samples.UWP.csproj | 6 ++--- .../Samples.iOS/Samples.iOS.csproj | 2 +- samples/Sample.Forms/Samples/Samples.csproj | 4 ++-- samples/Sample.UWP/Sample.UWP.csproj | 4 ++-- .../SignaturePad.Forms.UWP.csproj | 6 ++--- src/SignaturePad.UWP/SignaturePad.UWP.csproj | 6 ++--- 11 files changed, 38 insertions(+), 23 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 4938791..1bbd5d3 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -23,7 +23,7 @@ - Android: - iOS: - UWP: - - Xamarin.Forms: + - Xamarin.Forms: - Target Devices: - diff --git a/build.cake b/build.cake index c1ce253..f61e9a7 100644 --- a/build.cake +++ b/build.cake @@ -35,18 +35,21 @@ Task("libs") }); EnsureDirectoryExists("./output/android/"); + EnsureDirectoryExists("./output/net471/"); EnsureDirectoryExists("./output/ios/"); EnsureDirectoryExists("./output/uwp/"); EnsureDirectoryExists("./output/uwp/Themes"); EnsureDirectoryExists("./output/netstandard/"); CopyFiles($"./src/SignaturePad.Android/bin/{configuration}/SignaturePad.*", "./output/android/"); + CopyFiles($"./src/SignaturePad.WPF/bin/{configuration}/SignaturePad.*", "./output/net471/"); CopyFiles($"./src/SignaturePad.iOS/bin/{configuration}/SignaturePad.*", "./output/ios/"); CopyFiles($"./src/SignaturePad.UWP/bin/{configuration}/SignaturePad.*", "./output/uwp/"); CopyFiles($"./src/SignaturePad.UWP/bin/{configuration}/Themes/*", "./output/uwp/Themes"); CopyFiles($"./src/SignaturePad.Forms.Droid/bin/{configuration}/SignaturePad.Forms.*", "./output/android/"); CopyFiles($"./src/SignaturePad.Forms.iOS/bin/{configuration}/SignaturePad.Forms.*", "./output/ios/"); + CopyFiles($"./src/SignaturePad.Forms.WPF/bin/{configuration}/SignaturePad.Forms.*", "./output/net471/"); CopyFiles($"./src/SignaturePad.Forms.UWP/bin/{configuration}/SignaturePad.Forms.*", "./output/uwp/"); CopyFiles($"./src/SignaturePad.Forms.UWP/bin/{configuration}/Themes/*", "./output/uwp/Themes"); CopyFiles($"./src/SignaturePad.Forms/bin/{configuration}/SignaturePad.Forms.*", "./output/netstandard/"); diff --git a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec index d7176d5..60c8028 100644 --- a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec +++ b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec @@ -20,18 +20,23 @@ - + - + + + + + + - + - - + + @@ -39,6 +44,9 @@ + + + @@ -47,8 +55,8 @@ - - + + \ No newline at end of file diff --git a/nuget/Xamarin.Controls.SignaturePad.nuspec b/nuget/Xamarin.Controls.SignaturePad.nuspec index c86265a..517c641 100644 --- a/nuget/Xamarin.Controls.SignaturePad.nuspec +++ b/nuget/Xamarin.Controls.SignaturePad.nuspec @@ -19,6 +19,7 @@ + @@ -31,6 +32,9 @@ + + + diff --git a/samples/Sample.Forms/Samples.Android/Samples.Android.csproj b/samples/Sample.Forms/Samples.Android/Samples.Android.csproj index 086b919..1fafb4d 100644 --- a/samples/Sample.Forms/Samples.Android/Samples.Android.csproj +++ b/samples/Sample.Forms/Samples.Android/Samples.Android.csproj @@ -47,7 +47,7 @@ - + diff --git a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj index b62fe0f..76362eb 100644 --- a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj +++ b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj @@ -11,8 +11,8 @@ Samples.UWP en-US UAP - 10.0.14393.0 - 10.0.10586.0 + 10.0.17134.0 + 10.0.17134.0 14 true 512 @@ -91,7 +91,7 @@ - + diff --git a/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj b/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj index a44a4b4..ed92d22 100644 --- a/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj +++ b/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj @@ -68,7 +68,7 @@ - + diff --git a/samples/Sample.Forms/Samples/Samples.csproj b/samples/Sample.Forms/Samples/Samples.csproj index 676b9fe..cd7bd8b 100644 --- a/samples/Sample.Forms/Samples/Samples.csproj +++ b/samples/Sample.Forms/Samples/Samples.csproj @@ -1,7 +1,7 @@  - netstandard1.4 + netstandard2.0 Samples Samples @@ -15,7 +15,7 @@ - + \ No newline at end of file diff --git a/samples/Sample.UWP/Sample.UWP.csproj b/samples/Sample.UWP/Sample.UWP.csproj index ec0b4a1..bef38c3 100644 --- a/samples/Sample.UWP/Sample.UWP.csproj +++ b/samples/Sample.UWP/Sample.UWP.csproj @@ -11,8 +11,8 @@ Sample.UWP en-US UAP - 10.0.14393.0 - 10.0.10240.0 + 10.0.17134.0 + 10.0.17134.0 14 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} diff --git a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj index 6e52976..e27c3c1 100644 --- a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj +++ b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj @@ -1,7 +1,7 @@  - uap10.0.10240 + uap10.0.17134 SignaturePad.Forms SignaturePad.Forms False @@ -30,9 +30,9 @@ - + - + diff --git a/src/SignaturePad.UWP/SignaturePad.UWP.csproj b/src/SignaturePad.UWP/SignaturePad.UWP.csproj index e6396e7..0be0bed 100644 --- a/src/SignaturePad.UWP/SignaturePad.UWP.csproj +++ b/src/SignaturePad.UWP/SignaturePad.UWP.csproj @@ -1,7 +1,7 @@  - uap10.0.10240 + uap10.0.17134 Xamarin.Controls SignaturePad False @@ -30,9 +30,9 @@ - + - + From ed58feb45796c0f87349f1521718c564f438d534 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 17:15:20 +0300 Subject: [PATCH 06/72] samples wpf --- samples/Sample.Forms/Sample.Forms.sln | 78 ++++++++++ samples/Sample.Forms/Samples.WPF/App.config | 14 ++ samples/Sample.Forms/Samples.WPF/App.xaml | 9 ++ samples/Sample.Forms/Samples.WPF/App.xaml.cs | 17 +++ .../Sample.Forms/Samples.WPF/MainWindow.xaml | 8 + .../Samples.WPF/MainWindow.xaml.cs | 39 +++++ .../Samples.WPF/OpenTK.dll.config | 25 ++++ .../Samples.WPF/Properties/AssemblyInfo.cs | 55 +++++++ .../Properties/Resources.Designer.cs | 71 +++++++++ .../Samples.WPF/Properties/Resources.resx | 117 +++++++++++++++ .../Properties/Settings.Designer.cs | 30 ++++ .../Samples.WPF/Properties/Settings.settings | 7 + .../Samples.WPF/Samples.WPF.csproj | 137 ++++++++++++++++++ .../Sample.Forms/Samples.WPF/packages.config | 8 + 14 files changed, 615 insertions(+) create mode 100644 samples/Sample.Forms/Samples.WPF/App.config create mode 100644 samples/Sample.Forms/Samples.WPF/App.xaml create mode 100644 samples/Sample.Forms/Samples.WPF/App.xaml.cs create mode 100644 samples/Sample.Forms/Samples.WPF/MainWindow.xaml create mode 100644 samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs create mode 100644 samples/Sample.Forms/Samples.WPF/OpenTK.dll.config create mode 100644 samples/Sample.Forms/Samples.WPF/Properties/AssemblyInfo.cs create mode 100644 samples/Sample.Forms/Samples.WPF/Properties/Resources.Designer.cs create mode 100644 samples/Sample.Forms/Samples.WPF/Properties/Resources.resx create mode 100644 samples/Sample.Forms/Samples.WPF/Properties/Settings.Designer.cs create mode 100644 samples/Sample.Forms/Samples.WPF/Properties/Settings.settings create mode 100644 samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj create mode 100644 samples/Sample.Forms/Samples.WPF/packages.config diff --git a/samples/Sample.Forms/Sample.Forms.sln b/samples/Sample.Forms/Sample.Forms.sln index d3a14a7..b8fb1a2 100644 --- a/samples/Sample.Forms/Sample.Forms.sln +++ b/samples/Sample.Forms/Sample.Forms.sln @@ -25,6 +25,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.UWP", "..\..\s EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.UWP", "..\..\src\SignaturePad.Forms.UWP\SignaturePad.Forms.UWP.csproj", "{6FC62387-6717-4577-A48B-D15848741F08}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.WPF", "..\..\src\SignaturePad.WPF\SignaturePad.WPF.csproj", "{89547259-5482-43FC-B100-EEA0BB2C91A3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.WPF", "..\..\src\SignaturePad.Forms.WPF\SignaturePad.Forms.WPF.csproj", "{713B7BF4-24CB-4CE7-87D2-44E347CFED19}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.WPF", "Samples.WPF\Samples.WPF.csproj", "{497C984A-6F4A-4522-A043-E3AB050670A8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -329,6 +335,78 @@ Global {6FC62387-6717-4577-A48B-D15848741F08}.Release|x64.Build.0 = Release|Any CPU {6FC62387-6717-4577-A48B-D15848741F08}.Release|x86.ActiveCfg = Release|Any CPU {6FC62387-6717-4577-A48B-D15848741F08}.Release|x86.Build.0 = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|ARM.ActiveCfg = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|ARM.Build.0 = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|iPhone.Build.0 = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|x64.ActiveCfg = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|x64.Build.0 = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|x86.ActiveCfg = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Debug|x86.Build.0 = Debug|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|Any CPU.Build.0 = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|ARM.ActiveCfg = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|ARM.Build.0 = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|iPhone.ActiveCfg = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|iPhone.Build.0 = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|x64.ActiveCfg = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|x64.Build.0 = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|x86.ActiveCfg = Release|Any CPU + {89547259-5482-43FC-B100-EEA0BB2C91A3}.Release|x86.Build.0 = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|Any CPU.Build.0 = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|ARM.ActiveCfg = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|ARM.Build.0 = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|iPhone.Build.0 = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|x64.ActiveCfg = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|x64.Build.0 = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|x86.ActiveCfg = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Debug|x86.Build.0 = Debug|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|Any CPU.ActiveCfg = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|Any CPU.Build.0 = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|ARM.ActiveCfg = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|ARM.Build.0 = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|iPhone.ActiveCfg = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|iPhone.Build.0 = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|x64.ActiveCfg = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|x64.Build.0 = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|x86.ActiveCfg = Release|Any CPU + {713B7BF4-24CB-4CE7-87D2-44E347CFED19}.Release|x86.Build.0 = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|ARM.ActiveCfg = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|ARM.Build.0 = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|iPhone.Build.0 = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|x64.ActiveCfg = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|x64.Build.0 = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|x86.ActiveCfg = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Debug|x86.Build.0 = Debug|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|Any CPU.Build.0 = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|ARM.ActiveCfg = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|ARM.Build.0 = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|iPhone.ActiveCfg = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|iPhone.Build.0 = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|x64.ActiveCfg = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|x64.Build.0 = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|x86.ActiveCfg = Release|Any CPU + {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/samples/Sample.Forms/Samples.WPF/App.config b/samples/Sample.Forms/Samples.WPF/App.config new file mode 100644 index 0000000..999e19a --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/App.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/Sample.Forms/Samples.WPF/App.xaml b/samples/Sample.Forms/Samples.WPF/App.xaml new file mode 100644 index 0000000..ec34f60 --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/samples/Sample.Forms/Samples.WPF/App.xaml.cs b/samples/Sample.Forms/Samples.WPF/App.xaml.cs new file mode 100644 index 0000000..e47fdc2 --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace Samples.WPF +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/samples/Sample.Forms/Samples.WPF/MainWindow.xaml b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml new file mode 100644 index 0000000..077a9c6 --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs new file mode 100644 index 0000000..ee7eb0d --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs @@ -0,0 +1,39 @@ +// +// Vladislav Antonyuk. All rights reserved. +// +// Vladislav Antonyuk + +namespace Samples.WPF +{ + using System; + using System.IO; + using System.Threading.Tasks; + using Xamarin.Forms; + using Xamarin.Forms.Platform.WPF; + + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : FormsApplicationPage + { + public MainWindow() + { + InitializeComponent(); + Forms.Init(); + LoadApplication(new Samples.App(OnSaveSignature)); + } + + private async Task OnSaveSignature (Stream bitmap, string filename) + { + var storageFolder = Environment.SpecialFolder.CommonPictures.ToString(); + var file = System.IO.File.Create (Path.Combine(storageFolder, filename)); + + using (var dest = file) + { + await bitmap.CopyToAsync (dest); + } + + return true; + } + } +} diff --git a/samples/Sample.Forms/Samples.WPF/OpenTK.dll.config b/samples/Sample.Forms/Samples.WPF/OpenTK.dll.config new file mode 100644 index 0000000..7098d39 --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/OpenTK.dll.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/Sample.Forms/Samples.WPF/Properties/AssemblyInfo.cs b/samples/Sample.Forms/Samples.WPF/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d54437b --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle ("Samples.WPF")] +[assembly: AssemblyDescription ("")] +[assembly: AssemblyConfiguration ("")] +[assembly: AssemblyCompany ("")] +[assembly: AssemblyProduct ("Samples.WPF")] +[assembly: AssemblyCopyright ("Copyright © 2018")] +[assembly: AssemblyTrademark ("")] +[assembly: AssemblyCulture ("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible (false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo ( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion ("1.0.0.0")] +[assembly: AssemblyFileVersion ("1.0.0.0")] diff --git a/samples/Sample.Forms/Samples.WPF/Properties/Resources.Designer.cs b/samples/Sample.Forms/Samples.WPF/Properties/Resources.Designer.cs new file mode 100644 index 0000000..77c1860 --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Samples.WPF.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute ("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute ()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute ()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute ("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources () + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute (global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager ("Samples.WPF.Properties.Resources", typeof (Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute (global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/samples/Sample.Forms/Samples.WPF/Properties/Resources.resx b/samples/Sample.Forms/Samples.WPF/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/samples/Sample.Forms/Samples.WPF/Properties/Settings.Designer.cs b/samples/Sample.Forms/Samples.WPF/Properties/Settings.Designer.cs new file mode 100644 index 0000000..c5501bb --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Samples.WPF.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute ()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute ("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized (new Settings ()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/samples/Sample.Forms/Samples.WPF/Properties/Settings.settings b/samples/Sample.Forms/Samples.WPF/Properties/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj new file mode 100644 index 0000000..2872204 --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj @@ -0,0 +1,137 @@ + + + + + + Debug + AnyCPU + {497C984A-6F4A-4522-A043-E3AB050670A8} + WinExe + Samples.WPF + Samples.WPF + v4.7.1 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\OpenTK.2.0.0\lib\net20\OpenTK.dll + + + ..\packages\OpenTK.GLControl.1.1.2349.61993\lib\NET40\OpenTK.GLControl.dll + + + + + + + + + + + 4.0 + + + + + + ..\packages\WpfLightToolkit.1.0.1\lib\net45\WpfLightToolkit.dll + + + ..\packages\Xamarin.Forms.3.1.0.469394-pre1\lib\netstandard2.0\Xamarin.Forms.Core.dll + + + ..\packages\Xamarin.Forms.3.1.0.469394-pre1\lib\netstandard2.0\Xamarin.Forms.Platform.dll + + + ..\packages\Xamarin.Forms.Platform.WPF.3.1.0.469394-pre1\lib\net45\Xamarin.Forms.Platform.WPF.dll + + + ..\packages\Xamarin.Forms.3.1.0.469394-pre1\lib\netstandard2.0\Xamarin.Forms.Xaml.dll + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + MainWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + {cc18e151-5792-4da5-ade6-7cfba16a593e} + Samples + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/samples/Sample.Forms/Samples.WPF/packages.config b/samples/Sample.Forms/Samples.WPF/packages.config new file mode 100644 index 0000000..4b09118 --- /dev/null +++ b/samples/Sample.Forms/Samples.WPF/packages.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file From dea7b8411d070c75220e80a1d75aa532a563e014 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 18:03:37 +0300 Subject: [PATCH 07/72] Fix rendererwith which blockes wpf renderer --- src/SignaturePad.Forms.Shared/SignaturePadCanvasView.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/SignaturePad.Forms.Shared/SignaturePadCanvasView.cs b/src/SignaturePad.Forms.Shared/SignaturePadCanvasView.cs index e48f01a..ab42063 100644 --- a/src/SignaturePad.Forms.Shared/SignaturePadCanvasView.cs +++ b/src/SignaturePad.Forms.Shared/SignaturePadCanvasView.cs @@ -7,7 +7,6 @@ namespace SignaturePad.Forms { - [RenderWith (typeof (SignaturePadCanvasRenderer))] public class SignaturePadCanvasView : View { public static readonly BindableProperty StrokeColorProperty = BindableProperty.Create ( From 0e2402c03a65bf4f371b27e9cc7b7638986b65ca Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 19:57:32 +0300 Subject: [PATCH 08/72] CR fix --- ISSUE_TEMPLATE.md | 2 +- build.cake | 6 +- ...Xamarin.Controls.SignaturePad.Forms.nuspec | 16 ++--- nuget/Xamarin.Controls.SignaturePad.nuspec | 4 +- .../Samples.Android/Samples.Android.csproj | 2 +- .../Samples.UWP/Samples.UWP.csproj | 4 +- .../Samples.WPF/MainWindow.xaml.cs | 2 + .../Samples.WPF/Samples.WPF.csproj | 24 +++++--- .../Sample.Forms/Samples.WPF/packages.config | 4 +- .../Samples.iOS/Samples.iOS.csproj | 2 +- samples/Sample.Forms/Samples/Samples.csproj | 2 +- .../SignaturePad.Forms.Droid.csproj | 2 +- .../ColorExtensions.cs | 8 +-- .../SignaturePadCanvasRenderer.cs | 17 +++--- .../SignaturePad.Forms.UWP.csproj | 2 +- .../SignaturePad.Forms.WPF.csproj | 4 +- .../SignaturePad.Forms.iOS.csproj | 2 +- .../SignaturePad.Forms.csproj | 2 +- .../InkPresenter.cs | 38 ++++-------- .../InkStroke.cs | 6 +- src/SignaturePad.Shared/Extensions.cs | 59 ++++++++++++++++++- .../ImageConstructionSettings.cs | 29 ++------- src/SignaturePad.Shared/PathSmoothing.cs | 36 ++++------- .../SignaturePadCanvasView.cs | 17 ++---- src/SignaturePad.Shared/SignaturePadView.cs | 12 ++-- src/SignaturePad.WPF/InkPresenter.cs | 9 ++- .../SignaturePadCanvasView.cs | 19 +++--- 27 files changed, 172 insertions(+), 158 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 1bbd5d3..17d0ec4 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -23,7 +23,7 @@ - Android: - iOS: - UWP: - - Xamarin.Forms: + - Xamarin.Forms: - Target Devices: - diff --git a/build.cake b/build.cake index f61e9a7..0950d5c 100644 --- a/build.cake +++ b/build.cake @@ -35,21 +35,21 @@ Task("libs") }); EnsureDirectoryExists("./output/android/"); - EnsureDirectoryExists("./output/net471/"); + EnsureDirectoryExists("./output/netframework/"); EnsureDirectoryExists("./output/ios/"); EnsureDirectoryExists("./output/uwp/"); EnsureDirectoryExists("./output/uwp/Themes"); EnsureDirectoryExists("./output/netstandard/"); CopyFiles($"./src/SignaturePad.Android/bin/{configuration}/SignaturePad.*", "./output/android/"); - CopyFiles($"./src/SignaturePad.WPF/bin/{configuration}/SignaturePad.*", "./output/net471/"); + CopyFiles($"./src/SignaturePad.WPF/bin/{configuration}/SignaturePad.*", "./output/netframework/"); CopyFiles($"./src/SignaturePad.iOS/bin/{configuration}/SignaturePad.*", "./output/ios/"); CopyFiles($"./src/SignaturePad.UWP/bin/{configuration}/SignaturePad.*", "./output/uwp/"); CopyFiles($"./src/SignaturePad.UWP/bin/{configuration}/Themes/*", "./output/uwp/Themes"); CopyFiles($"./src/SignaturePad.Forms.Droid/bin/{configuration}/SignaturePad.Forms.*", "./output/android/"); CopyFiles($"./src/SignaturePad.Forms.iOS/bin/{configuration}/SignaturePad.Forms.*", "./output/ios/"); - CopyFiles($"./src/SignaturePad.Forms.WPF/bin/{configuration}/SignaturePad.Forms.*", "./output/net471/"); + CopyFiles($"./src/SignaturePad.Forms.WPF/bin/{configuration}/SignaturePad.Forms.*", "./output/netframework/"); CopyFiles($"./src/SignaturePad.Forms.UWP/bin/{configuration}/SignaturePad.Forms.*", "./output/uwp/"); CopyFiles($"./src/SignaturePad.Forms.UWP/bin/{configuration}/Themes/*", "./output/uwp/Themes"); CopyFiles($"./src/SignaturePad.Forms/bin/{configuration}/SignaturePad.Forms.*", "./output/netstandard/"); diff --git a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec index 60c8028..19d6d5f 100644 --- a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec +++ b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec @@ -20,23 +20,23 @@ - + - + - - + + - + - + @@ -45,8 +45,8 @@ - - + + diff --git a/nuget/Xamarin.Controls.SignaturePad.nuspec b/nuget/Xamarin.Controls.SignaturePad.nuspec index 517c641..0ded506 100644 --- a/nuget/Xamarin.Controls.SignaturePad.nuspec +++ b/nuget/Xamarin.Controls.SignaturePad.nuspec @@ -32,8 +32,8 @@ - - + + diff --git a/samples/Sample.Forms/Samples.Android/Samples.Android.csproj b/samples/Sample.Forms/Samples.Android/Samples.Android.csproj index 1fafb4d..9dacb97 100644 --- a/samples/Sample.Forms/Samples.Android/Samples.Android.csproj +++ b/samples/Sample.Forms/Samples.Android/Samples.Android.csproj @@ -47,7 +47,7 @@ - + diff --git a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj index 76362eb..a179a6c 100644 --- a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj +++ b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj @@ -91,8 +91,8 @@ - - + + diff --git a/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs index ee7eb0d..7464108 100644 --- a/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs +++ b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs @@ -8,6 +8,7 @@ namespace Samples.WPF using System; using System.IO; using System.Threading.Tasks; + using SignaturePad.Forms; using Xamarin.Forms; using Xamarin.Forms.Platform.WPF; @@ -20,6 +21,7 @@ public MainWindow() { InitializeComponent(); Forms.Init(); + SignaturePadCanvasRenderer.Init (); LoadApplication(new Samples.App(OnSaveSignature)); } diff --git a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj index 2872204..fa4531e 100644 --- a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj +++ b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj @@ -1,6 +1,6 @@  - + Debug @@ -61,16 +61,16 @@ ..\packages\WpfLightToolkit.1.0.1\lib\net45\WpfLightToolkit.dll - ..\packages\Xamarin.Forms.3.1.0.469394-pre1\lib\netstandard2.0\Xamarin.Forms.Core.dll + ..\packages\Xamarin.Forms.3.0.0.482510\lib\netstandard2.0\Xamarin.Forms.Core.dll - ..\packages\Xamarin.Forms.3.1.0.469394-pre1\lib\netstandard2.0\Xamarin.Forms.Platform.dll + ..\packages\Xamarin.Forms.3.0.0.482510\lib\netstandard2.0\Xamarin.Forms.Platform.dll - ..\packages\Xamarin.Forms.Platform.WPF.3.1.0.469394-pre1\lib\net45\Xamarin.Forms.Platform.WPF.dll + ..\packages\Xamarin.Forms.Platform.WPF.3.0.0.482510\lib\net45\Xamarin.Forms.Platform.WPF.dll - ..\packages\Xamarin.Forms.3.1.0.469394-pre1\lib\netstandard2.0\Xamarin.Forms.Xaml.dll + ..\packages\Xamarin.Forms.3.0.0.482510\lib\netstandard2.0\Xamarin.Forms.Xaml.dll @@ -120,6 +120,14 @@ + + {713B7BF4-24CB-4CE7-87D2-44E347CFED19} + SignaturePad.Forms.WPF + + + {89547259-5482-43fc-b100-eea0bb2c91a3} + SignaturePad.WPF + {cc18e151-5792-4da5-ade6-7cfba16a593e} Samples @@ -130,8 +138,8 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - + + - + \ No newline at end of file diff --git a/samples/Sample.Forms/Samples.WPF/packages.config b/samples/Sample.Forms/Samples.WPF/packages.config index 4b09118..53de378 100644 --- a/samples/Sample.Forms/Samples.WPF/packages.config +++ b/samples/Sample.Forms/Samples.WPF/packages.config @@ -3,6 +3,6 @@ - - + + \ No newline at end of file diff --git a/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj b/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj index ed92d22..764d962 100644 --- a/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj +++ b/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj @@ -68,7 +68,7 @@ - + diff --git a/samples/Sample.Forms/Samples/Samples.csproj b/samples/Sample.Forms/Samples/Samples.csproj index cd7bd8b..6e032ac 100644 --- a/samples/Sample.Forms/Samples/Samples.csproj +++ b/samples/Sample.Forms/Samples/Samples.csproj @@ -15,7 +15,7 @@ - + \ No newline at end of file diff --git a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj index c504e8a..dc970aa 100644 --- a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj +++ b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs b/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs index f6f3a1e..f339149 100644 --- a/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs +++ b/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs @@ -15,7 +15,7 @@ using Android.Widget; using Xamarin.Forms.Platform.Android; using NativeColor = Android.Graphics.Color; -#elif NET471 +#elif NETFRAMEWORK using NativeColor = System.Windows.Media.Color; using TextBlock = System.Windows.Controls.TextBlock; using SolidColorBrush = System.Windows.Media.SolidColorBrush; @@ -25,7 +25,7 @@ namespace SignaturePad.Forms { public static class ColorExtensions { -#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NET471 +#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NETFRAMEWORK public static NativeColor ToWindows (this Color color) { return NativeColor.FromArgb ( @@ -38,7 +38,7 @@ public static NativeColor ToWindows (this Color color) public static NativeColor ToNative (this Color color) { -#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NET471 +#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NETFRAMEWORK return color.ToWindows (); #elif __IOS__ return color.ToUIColor (); @@ -47,7 +47,7 @@ public static NativeColor ToNative (this Color color) #endif } -#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NET471 +#if WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NETFRAMEWORK public static void SetTextColor (this TextBlock textBlock, Color color) { textBlock.Foreground = new SolidColorBrush (color.ToNative ()); diff --git a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs index 9d5e872..208fa2f 100644 --- a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs +++ b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs @@ -25,10 +25,10 @@ using Xamarin.Forms.Platform.Android; using NativeSignaturePadCanvasView = Xamarin.Controls.SignaturePadCanvasView; using NativePoint = System.Drawing.PointF; -#elif NET471 +#elif NETFRAMEWORK using Xamarin.Forms.Platform.WPF; using NativeSignaturePadCanvasView = Xamarin.Controls.SignaturePadCanvasView; -using NativePoint = System.Drawing.Point; +using NativePoint = System.Windows.Input.StylusPoint; #endif [assembly: ExportRenderer (typeof (SignaturePadCanvasView), typeof (SignaturePadCanvasRenderer))] @@ -44,6 +44,11 @@ public SignaturePadCanvasRenderer () { } + public static void Init () + { + var time = DateTime.Now; + } + #if __ANDROID__ public SignaturePadCanvasRenderer (Android.Content.Context context) : base (context) @@ -166,11 +171,7 @@ private void OnPointsSpecified (object sender, SignaturePadCanvasView.PointsEven var ctrl = Control; if (ctrl != null) { -#if NET471 - ctrl.LoadPoints (e.Points.Select (p => new NativePoint ((int)p.X, (int)p.Y)).ToArray ()); -#else ctrl.LoadPoints (e.Points.Select (p => new NativePoint ((float)p.X, (float)p.Y)).ToArray ()); -#endif } } @@ -188,11 +189,7 @@ private void OnStrokesSpecified (object sender, SignaturePadCanvasView.StrokesEv var ctrl = Control; if (ctrl != null) { -#if NET471 - ctrl.LoadStrokes (e.Strokes.Select (s => s.Select (p => new NativePoint ((int)p.X, (int)p.Y)).ToArray ()).ToArray ()); -#else ctrl.LoadStrokes (e.Strokes.Select (s => s.Select (p => new NativePoint ((float)p.X, (float)p.Y)).ToArray ()).ToArray ()); -#endif } } diff --git a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj index e27c3c1..d3f6b7d 100644 --- a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj +++ b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj index 62d5bc7..dbc8316 100644 --- a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj +++ b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj @@ -31,8 +31,8 @@ - - + + diff --git a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj index d3f0ff6..e9d13b9 100644 --- a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj +++ b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms/SignaturePad.Forms.csproj b/src/SignaturePad.Forms/SignaturePad.Forms.csproj index 0edd409..c005076 100644 --- a/src/SignaturePad.Forms/SignaturePad.Forms.csproj +++ b/src/SignaturePad.Forms/SignaturePad.Forms.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs index 874499f..053b370 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs @@ -9,10 +9,11 @@ using NativeColor = Android.Graphics.Color; using NativeImage = Android.Graphics.Bitmap; using NativePath = Android.Graphics.Path; -#elif NET471 -using NativePath = System.Drawing.Drawing2D.GraphicsPath; +#elif NETFRAMEWORK +using System.Windows.Input; +using NativePath = System.Windows.Ink.Stroke; using NativeRect = System.Drawing.RectangleF; -using NativePoint = System.Drawing.Point; +using NativePoint = System.Windows.Input.StylusPoint; using NativeSize = System.Drawing.Size; using NativeColor = System.Windows.Media.Color; using NativeImage = System.Drawing.Bitmap; @@ -72,7 +73,7 @@ private bool ShouldRedrawBufferImage var sizeChanged = false; if (bitmapBuffer != null) { -#if NET471 +#if NETFRAMEWORK var s = bitmapBuffer.Size; sizeChanged = s.Width != this.StrokeWidth || s.Height != this.StrokeWidth; #else @@ -96,11 +97,7 @@ private NativeRect DirtyRect var w = Math.Abs (dirtyRectRight - dirtyRectLeft); var h = Math.Abs (dirtyRectBottom - dirtyRectTop); var half = StrokeWidth / 2f; -#if NET471 - return new NativeRect ((int)(x - half), (int)(y - half), (int)(w + StrokeWidth), (int)(h + StrokeWidth)); -#else return new NativeRect (x - half, y - half, w + StrokeWidth, h + StrokeWidth); -#endif } } @@ -119,18 +116,14 @@ public void Clear () { paths.Clear (); currentPath = null; -#if !NET471 this.Invalidate (); -#endif } public void AddStroke (NativePoint[] strokePoints, NativeColor color, float width) { if (AddStrokeInternal (strokePoints, color, width)) { -#if !NET471 this.Invalidate (); -#endif } } @@ -148,9 +141,7 @@ public void AddStrokes (IEnumerable strokes, NativeColor color, f if (changed) { -#if !NET471 this.Invalidate (); -#endif } } @@ -163,19 +154,12 @@ private bool AddStrokeInternal (IEnumerable points, NativeColor col return false; } - var newpath = new NativePath (); -#if NET471 - - var prev = new NativePoint (strokePoints[0].X, strokePoints[0].Y); - foreach (var point in strokePoints.Skip (1)) - { - var destPoint = new NativePoint (point.X, point.Y); - newpath.AddLine(prev, destPoint); - prev = destPoint; - } - - paths.Add (new InkStroke (newpath, strokePoints, color, width)); +#if NETFRAMEWORK + var newpath = new NativePath(new StylusPointCollection (strokePoints)); #else + var newpath = new NativePath(); +#endif + newpath.MoveTo (strokePoints[0].X, strokePoints[0].Y); foreach (var point in strokePoints.Skip (1)) { @@ -183,7 +167,7 @@ private bool AddStrokeInternal (IEnumerable points, NativeColor col } paths.Add (new InkStroke (newpath, strokePoints, color, width)); -#endif + return true; } diff --git a/src/SignaturePad.InkPresenter.Shared/InkStroke.cs b/src/SignaturePad.InkPresenter.Shared/InkStroke.cs index 33c8c0a..b15f774 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkStroke.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkStroke.cs @@ -4,10 +4,10 @@ using NativePoint = System.Drawing.PointF; using NativeColor = Android.Graphics.Color; using NativePath = Android.Graphics.Path; -#elif NET471 -using NativePoint = System.Drawing.Point; +#elif NETFRAMEWORK +using NativePoint = System.Windows.Input.StylusPoint; using NativeColor = System.Windows.Media.Color; -using NativePath = System.Drawing.Drawing2D.GraphicsPath; +using NativePath = System.Windows.Ink.Stroke; #elif __IOS__ using NativePoint = CoreGraphics.CGPoint; using NativeColor = UIKit.UIColor; diff --git a/src/SignaturePad.Shared/Extensions.cs b/src/SignaturePad.Shared/Extensions.cs index faf4822..850471a 100644 --- a/src/SignaturePad.Shared/Extensions.cs +++ b/src/SignaturePad.Shared/Extensions.cs @@ -8,12 +8,13 @@ #elif __IOS__ using CoreGraphics; using UIKit; -#elif WINDOWS_PHONE +#elif WINDOWS_PHONE || NETFRAMEWORK using System.Windows; using System.Windows.Controls; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; +using System.Drawing.Drawing2D; #elif WINDOWS_UWP || WINDOWS_APP using Windows.Foundation; using System.Numerics; @@ -72,6 +73,62 @@ public static CGSize GetSize (this UIView view) return view.Bounds.Size; } +#elif NETFRAMEWORK + + public static void MoveTo (this Stroke stroke, double x, double y) + { + stroke.StylusPoints.Add (new StylusPoint (x, y)); + } + + public static void LineTo (this Stroke stroke, double x, double y) + { + stroke.StylusPoints.Add (new StylusPoint (x, y)); + } + + public static void AddStrokes (this InkPresenter inkPresenter, IList strokes, Color color, float width) + { + var strokeCollection = new StrokeCollection (); + foreach (var stroke in strokes.Where (s => s.Length > 0)) + { + var pointCollection = new StylusPointCollection (); + foreach (var point in stroke) + { + pointCollection.Add (new StylusPoint (point.X, point.Y)); + } + + var newStroke = new Stroke (pointCollection); + strokeCollection.Add (newStroke); + + newStroke.DrawingAttributes = new DrawingAttributes + { + Color = color, + Width = width, + Height = width + }; + } + + inkPresenter = strokeCollection as InkPresenter; + } + + public static void Invalidate (this StrokeCollection control) + { + control.Invalidate(); + } + + public static IList GetStrokes (this InkPresenter inkPresenter) + { + return inkPresenter; + } + + public static IEnumerable GetPoints (this Stroke stroke) + { + return stroke.StylusPoints.Select (p => new Point (p.X, p.Y)); + } + + public static Size GetSize (this Control element) + { + return new Size (element.Width, element.Height); + } #elif WINDOWS_PHONE public static void MoveTo (this Stroke stroke, double x, double y) diff --git a/src/SignaturePad.Shared/ImageConstructionSettings.cs b/src/SignaturePad.Shared/ImageConstructionSettings.cs index 50c65b1..95de829 100644 --- a/src/SignaturePad.Shared/ImageConstructionSettings.cs +++ b/src/SignaturePad.Shared/ImageConstructionSettings.cs @@ -20,8 +20,8 @@ using NativeSize = Windows.Foundation.Size; using NativeColor = Windows.UI.Color; using NativeNullableColor = System.Nullable; -#elif NET471 -using NativeSize = System.Drawing.Size; +#elif NETFRAMEWORK +using NativeSize = System.Drawing.SizeF; using NativeColor = System.Windows.Media.Color; using NativeNullableColor = System.Nullable; #endif @@ -96,16 +96,7 @@ public SizeOrScale (float x, float y, SizeOrScaleType type, bool keepAspectRatio public NativeSize GetScale (float width, float height) { -#if NET471 - if (Type == SizeOrScaleType.Scale) - { - return new NativeSize ((int)X, (int)Y); - } - else - { - return new NativeSize ((int)(X / width), (int)(Y / height)); - } -#else + if (Type == SizeOrScaleType.Scale) { return new NativeSize (X, Y); @@ -114,21 +105,10 @@ public NativeSize GetScale (float width, float height) { return new NativeSize (X / width, Y / height); } -#endif } public NativeSize GetSize (float width, float height) { -#if NET471 - if (Type == SizeOrScaleType.Scale) - { - return new NativeSize ((int)(width * X), (int)(height * Y)); - } - else - { - return new NativeSize ((int)X, (int)Y); - } -#else if (Type == SizeOrScaleType.Scale) { return new NativeSize (width * X, height * Y); @@ -137,7 +117,6 @@ public NativeSize GetSize (float width, float height) { return new NativeSize (X, Y); } -#endif } public static implicit operator SizeOrScale (float scale) @@ -156,7 +135,7 @@ public struct ImageConstructionSettings #if __IOS__ || __ANDROID__ internal static readonly NativeColor Black = NativeColor.Black; internal static readonly NativeColor Transparent = new NativeColor (0, 0, 0, 0); -#elif WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NET471 +#elif WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NETFRAMEWORK internal static readonly NativeColor Black = NativeColor.FromArgb (255, 0, 0, 0); internal static readonly NativeColor Transparent = NativeColor.FromArgb (0, 0, 0, 0); #endif diff --git a/src/SignaturePad.Shared/PathSmoothing.cs b/src/SignaturePad.Shared/PathSmoothing.cs index a339811..18601fc 100644 --- a/src/SignaturePad.Shared/PathSmoothing.cs +++ b/src/SignaturePad.Shared/PathSmoothing.cs @@ -17,9 +17,9 @@ using NativePoint = Windows.Foundation.Point; using NativePath = System.Collections.Generic.List; using InkStroke = Windows.UI.Input.Inking.InkStroke; -#elif NET471 -using NativePath= System.Drawing.Drawing2D.GraphicsPath; -using NativePoint = System.Drawing.Point; +#elif NETFRAMEWORK +using NativePath= System.Windows.Ink.Stroke; +using NativePoint = System.Windows.Input.StylusPoint; using NativeSize = System.Drawing.Size; using NativeColor = System.Drawing.Color; using NativeImage = System.Drawing.Bitmap; @@ -30,6 +30,8 @@ namespace Xamarin.Controls { + using System.Windows.Input; + internal static class PathSmoothing { /// @@ -53,7 +55,7 @@ public static InkStroke SmoothedPathWithGranularity (InkStroke currentPath, int } // create the new path with the old attributes -#if __ANDROID__ || __IOS__ || WINDOWS_PHONE_APP || NET471 +#if __ANDROID__ || __IOS__ || WINDOWS_PHONE_APP || NETFRAMEWORK return new InkStroke (smoothedPath, smoothedPoints.ToList (), currentPath.Color, currentPath.Width); #elif WINDOWS_PHONE var da = currentPath.DrawingAttributes; @@ -88,17 +90,19 @@ public static void SmoothedPathWithGranularity (List currentPoints, } // create a new bezier path to hold the smoothed path. - smoothedPath = new NativePath (); smoothedPoints = new List (); +#if NETFRAMEWORK + smoothedPath = new NativePath (new StylusPointCollection(smoothedPoints)); +#else + smoothedPath = new NativePath (); +#endif // duplicate the first and last points as control points. currentPoints.Insert (0, currentPoints[0]); currentPoints.Add (currentPoints[currentPoints.Count - 1]); // add the first point -#if !NET471 smoothedPath.MoveTo (currentPoints[0].X, currentPoints[0].Y); -#endif smoothedPoints.Add (currentPoints[0]); for (var index = 1; index < currentPoints.Count - 2; index++) @@ -116,7 +120,6 @@ public static void SmoothedPathWithGranularity (List currentPoints, var ttt = tt * t; // intermediate point -#if !NET471 var mid = new NativePoint { X = 0.5f * (2f * p1.X + (p2.X - p0.X) * t + @@ -127,34 +130,19 @@ public static void SmoothedPathWithGranularity (List currentPoints, (2 * p0.Y - 5 * p1.Y + 4 * p2.Y - p3.Y) * tt + (3 * p1.Y - p0.Y - 3 * p2.Y + p3.Y) * ttt) }; - smoothedPath.LineTo (mid.X, mid.Y); -#else - var mid = new NativePoint - { - X = (int)(0.5f * (2f * p1.X + (p2.X - p0.X) * t + - (2f * p0.X - 5f * p1.X + 4f * p2.X - p3.X) * tt + - (3f * p1.X - p0.X - 3f * p2.X + p3.X) * ttt)), - Y = (int)(0.5f * (2 * p1.Y + (p2.Y - p0.Y) * t + - (2 * p0.Y - 5 * p1.Y + 4 * p2.Y - p3.Y) * tt + - (3 * p1.Y - p0.Y - 3 * p2.Y + p3.Y) * ttt)) - }; -#endif + smoothedPath.LineTo (mid.X, mid.Y); smoothedPoints.Add (mid); } // add p2 -#if !NET471 smoothedPath.LineTo (p2.X, p2.Y); -#endif smoothedPoints.Add (p2); } // add the last point var last = currentPoints[currentPoints.Count - 1]; -#if !NET471 smoothedPath.LineTo (last.X, last.Y); -#endif smoothedPoints.Add (last); } diff --git a/src/SignaturePad.Shared/SignaturePadCanvasView.cs b/src/SignaturePad.Shared/SignaturePadCanvasView.cs index f280a47..1355aca 100644 --- a/src/SignaturePad.Shared/SignaturePadCanvasView.cs +++ b/src/SignaturePad.Shared/SignaturePadCanvasView.cs @@ -34,10 +34,10 @@ using NativePoint = Windows.Foundation.Point; using NativeColor = Windows.UI.Color; using NativeImage = Windows.UI.Xaml.Media.Imaging.WriteableBitmap; -#elif NET471 +#elif NETFRAMEWORK using NativeRect = System.Drawing.RectangleF; -using NativePoint = System.Drawing.Point; -using NativeSize = System.Drawing.Size; +using NativePoint = System.Windows.Input.StylusPoint; +using NativeSize = System.Drawing.SizeF; using NativeColor = System.Windows.Media.Color; using NativeImage = System.Drawing.Bitmap; #endif @@ -90,11 +90,7 @@ public NativeRect GetSignatureBounds (float padding = 5f) return NativeRect.Empty; } -#if NET471 - var size = this.RenderSize; -#else var size = this.GetSize (); -#endif double xMin = size.Width, xMax = 0, yMin = size.Height, yMax = 0; foreach (var point in inkPresenter.GetStrokes ().SelectMany (stroke => stroke.GetPoints ())) { @@ -408,16 +404,13 @@ private bool GetImageConstructionArguments (ImageConstructionSettings settings, } var sizeOrScale = settings.DesiredSizeOrScale.Value; -#if NET471 - var viewSize = this.RenderSize; -#else + var viewSize = this.GetSize (); -#endif imageSize = sizeOrScale.GetSize ((float)viewSize.Width, (float)viewSize.Height); scale = sizeOrScale.GetScale ((float)imageSize.Width, (float)imageSize.Height); -#if NET471 +#if NETFRAMEWORK if (settings.ShouldCrop == true) { signatureBounds = GetSignatureBounds (settings.Padding.Value); diff --git a/src/SignaturePad.Shared/SignaturePadView.cs b/src/SignaturePad.Shared/SignaturePadView.cs index e59ea50..4f30801 100644 --- a/src/SignaturePad.Shared/SignaturePadView.cs +++ b/src/SignaturePad.Shared/SignaturePadView.cs @@ -20,9 +20,9 @@ using NativeSize = Windows.Foundation.Size; using NativeColor = Windows.UI.Color; using NativeImage = Windows.UI.Xaml.Media.Imaging.WriteableBitmap; -#elif NET471 +#elif NETFRAMEWORK using NativeRect = System.Drawing.Rectangle; -using NativePoint = System.Drawing.Point; +using NativePoint = System.Windows.Input.StylusPoint; using NativeSize = System.Drawing.Size; using NativeColor = System.Windows.Media.Color; using NativeImage = System.Drawing.Bitmap; @@ -30,7 +30,7 @@ namespace Xamarin.Controls { -#if WINDOWS_UWP || NET471 +#if WINDOWS_UWP || NETFRAMEWORK partial class SignaturePad #else partial class SignaturePadView @@ -55,9 +55,9 @@ partial class SignaturePadView #elif WINDOWS_UWP private static readonly NativeColor SignaturePadDarkColor = Windows.UI.Colors.Black; private static readonly NativeColor SignaturePadLightColor = Windows.UI.Colors.White; -#elif NET471 - private static readonly NativeColor SignaturePadDarkColor = new NativeColor () { A = System.Drawing.Color.Black.A, B = System.Drawing.Color.Black.B, G = System.Drawing.Color.Black.G, R = System.Drawing.Color.Black.R }; - private static readonly NativeColor SignaturePadLightColor = new NativeColor () { A = System.Drawing.Color.White.A, B = System.Drawing.Color.White.B, G = System.Drawing.Color.White.G, R = System.Drawing.Color.White.R }; +#elif NETFRAMEWORK + private static readonly NativeColor SignaturePadDarkColor = System.Windows.Media.Colors.Black; + private static readonly NativeColor SignaturePadLightColor = System.Windows.Media.Colors.White; #endif public NativePoint[][] Strokes => SignaturePadCanvas.Strokes; diff --git a/src/SignaturePad.WPF/InkPresenter.cs b/src/SignaturePad.WPF/InkPresenter.cs index 9934fb0..230daa2 100644 --- a/src/SignaturePad.WPF/InkPresenter.cs +++ b/src/SignaturePad.WPF/InkPresenter.cs @@ -1,8 +1,15 @@ using System.Collections.Generic; +using System.Drawing; namespace Xamarin.Controls { + using System.ComponentModel; + using System.Windows; + using System.Windows.Controls; + using System.Windows.Ink; + partial class InkPresenter : System.Windows.Ink.StrokeCollection { + + } } -} diff --git a/src/SignaturePad.WPF/SignaturePadCanvasView.cs b/src/SignaturePad.WPF/SignaturePadCanvasView.cs index 0cab421..9fe50d2 100644 --- a/src/SignaturePad.WPF/SignaturePadCanvasView.cs +++ b/src/SignaturePad.WPF/SignaturePadCanvasView.cs @@ -41,22 +41,21 @@ static SignaturePadCanvasView () public SignaturePadCanvasView () { DefaultStyleKey = typeof (SignaturePadCanvasView); - - IsEnabledChanged += delegate - { - var ip = inkPresenter; - }; + inkPresenter = new InkPresenter (); + inkPresenter.StrokesChanged += (sender, e) => OnStrokeCompleted (); + OnStrokePropertiesChanged (this, new DependencyPropertyChangedEventArgs (StrokeColorProperty, "", "")); } /// - protected override void OnTemplateChanged (ControlTemplate oldTemplate, ControlTemplate newTemplate) + public override void OnApplyTemplate () { - base.OnTemplateChanged (oldTemplate, newTemplate); + base.OnApplyTemplate(); inkPresenter = InkCanvas?.Strokes as InkPresenter; inkPresenter.StrokesChanged += (sender, e) => OnStrokeCompleted (); - OnStrokePropertiesChanged (this, new DependencyPropertyChangedEventArgs (null, "", "")); + OnStrokePropertiesChanged (this, new DependencyPropertyChangedEventArgs (StrokeColorProperty, "", "")); } + private InkCanvas InkCanvas => GetTemplateChild (PartInkCanvas) as InkCanvas; public System.Windows.Media.Color StrokeColor @@ -81,7 +80,7 @@ public void Clear () } } - private Task GetImageStreamInternal (SignatureImageFormat format, System.Drawing.Size scale, RectangleF signatureBounds, System.Drawing.Size imageSize, float strokeWidth, System.Windows.Media.Color strokeColor, System.Windows.Media.Color backgroundColor) + private Task GetImageStreamInternal (SignatureImageFormat format, System.Drawing.SizeF scale, RectangleF signatureBounds, System.Drawing.SizeF imageSize, float strokeWidth, System.Windows.Media.Color strokeColor, System.Windows.Media.Color backgroundColor) { return null; @@ -98,7 +97,7 @@ private static void OnStrokePropertiesChanged (DependencyObject d, DependencyPro { var signaturePad = d as SignaturePadCanvasView; - var inkPresenter = signaturePad.inkPresenter; + var inkPresenter = signaturePad?.inkPresenter; if (inkPresenter != null) { foreach (var stroke in inkPresenter) From fb5b99e480be08454f63ca55e870b2838012342b Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 20:01:11 +0300 Subject: [PATCH 09/72] use net 461 --- nuget/Xamarin.Controls.SignaturePad.Forms.nuspec | 2 +- nuget/Xamarin.Controls.SignaturePad.nuspec | 2 +- samples/Sample.Forms/Samples.WPF/packages.config | 10 +++++----- .../SignaturePad.Forms.WPF.csproj | 2 +- src/SignaturePad.WPF/SignaturePad.WPF.csproj | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec index 19d6d5f..0f37b0b 100644 --- a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec +++ b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec @@ -26,7 +26,7 @@ - + diff --git a/nuget/Xamarin.Controls.SignaturePad.nuspec b/nuget/Xamarin.Controls.SignaturePad.nuspec index 0ded506..4211405 100644 --- a/nuget/Xamarin.Controls.SignaturePad.nuspec +++ b/nuget/Xamarin.Controls.SignaturePad.nuspec @@ -19,7 +19,7 @@ - + diff --git a/samples/Sample.Forms/Samples.WPF/packages.config b/samples/Sample.Forms/Samples.WPF/packages.config index 53de378..3a4b2fe 100644 --- a/samples/Sample.Forms/Samples.WPF/packages.config +++ b/samples/Sample.Forms/Samples.WPF/packages.config @@ -1,8 +1,8 @@  - - - - - + + + + + \ No newline at end of file diff --git a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj index dbc8316..31c44a6 100644 --- a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj +++ b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj @@ -1,7 +1,7 @@  - net471 + net461 SignaturePad.Forms SignaturePad.Forms False diff --git a/src/SignaturePad.WPF/SignaturePad.WPF.csproj b/src/SignaturePad.WPF/SignaturePad.WPF.csproj index d56ed40..e1799f0 100644 --- a/src/SignaturePad.WPF/SignaturePad.WPF.csproj +++ b/src/SignaturePad.WPF/SignaturePad.WPF.csproj @@ -1,7 +1,7 @@  - net471 + net461 Xamarin.Controls SignaturePad From 58160cbb7438ae0a7129caa4d5529b79fd82fe5a Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 21:15:29 +0300 Subject: [PATCH 10/72] Some more improves --- .../SignaturePadCanvasRenderer.cs | 4 ++++ src/SignaturePad.Shared/Extensions.cs | 2 +- .../SignaturePadCanvasView.cs | 24 ++++++++++++++++++- src/SignaturePad.Shared/SignaturePadView.cs | 4 ++++ .../SignaturePadCanvasView.cs | 15 ++++++++---- src/SignaturePad.WPF/Themes/Generic.xaml | 2 +- 6 files changed, 44 insertions(+), 7 deletions(-) diff --git a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs index 208fa2f..dd59ee2 100644 --- a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs +++ b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs @@ -180,7 +180,11 @@ private void OnStrokesRequested (object sender, SignaturePadCanvasView.StrokesEv var ctrl = Control; if (ctrl != null) { +#if NETFRAMEWORK + e.Strokes = ctrl.Strokes.Select (s => s.StylusPoints.Select (p => new Point (p.X, p.Y))); +#else e.Strokes = ctrl.Strokes.Select (s => s.Select (p => new Point (p.X, p.Y))); +#endif } } diff --git a/src/SignaturePad.Shared/Extensions.cs b/src/SignaturePad.Shared/Extensions.cs index 850471a..11434a3 100644 --- a/src/SignaturePad.Shared/Extensions.cs +++ b/src/SignaturePad.Shared/Extensions.cs @@ -125,7 +125,7 @@ public static IEnumerable GetPoints (this Stroke stroke) return stroke.StylusPoints.Select (p => new Point (p.X, p.Y)); } - public static Size GetSize (this Control element) + public static Size GetSize (this FrameworkElement element) { return new Size (element.Width, element.Height); } diff --git a/src/SignaturePad.Shared/SignaturePadCanvasView.cs b/src/SignaturePad.Shared/SignaturePadCanvasView.cs index 1355aca..5d2e01e 100644 --- a/src/SignaturePad.Shared/SignaturePadCanvasView.cs +++ b/src/SignaturePad.Shared/SignaturePadCanvasView.cs @@ -40,6 +40,8 @@ using NativeSize = System.Drawing.SizeF; using NativeColor = System.Windows.Media.Color; using NativeImage = System.Drawing.Bitmap; +using System.Windows.Ink; +using System.Windows.Input; #endif namespace Xamarin.Controls @@ -69,8 +71,27 @@ public NativePoint[] Points } } - public NativePoint[][] Strokes +#if NETFRAMEWORK + public StrokeCollection Strokes { + get + { + if (IsBlank) + { + return new StrokeCollection (new List ()); + } + + // make a deep copy + var points = inkPresenter.GetStrokes ().Select (s => s.GetPoints ()); + var strokes = points.Select (point => new Stroke (new StylusPointCollection (point))).ToList (); + var col = new StrokeCollection (strokes); + return col; + } + } + +#else + public NativePoint[][] Strokes + { get { if (IsBlank) @@ -82,6 +103,7 @@ public NativePoint[][] Strokes return inkPresenter.GetStrokes ().Select (s => s.GetPoints ().ToArray ()).ToArray (); } } +#endif public NativeRect GetSignatureBounds (float padding = 5f) { diff --git a/src/SignaturePad.Shared/SignaturePadView.cs b/src/SignaturePad.Shared/SignaturePadView.cs index 4f30801..e2a2c26 100644 --- a/src/SignaturePad.Shared/SignaturePadView.cs +++ b/src/SignaturePad.Shared/SignaturePadView.cs @@ -60,7 +60,11 @@ partial class SignaturePadView private static readonly NativeColor SignaturePadLightColor = System.Windows.Media.Colors.White; #endif +#if NETFRAMEWORK + public System.Windows.Ink.StrokeCollection Strokes => SignaturePadCanvas.Strokes as InkPresenter; +#else public NativePoint[][] Strokes => SignaturePadCanvas.Strokes; +#endif public NativePoint[] Points => SignaturePadCanvas.Points; diff --git a/src/SignaturePad.WPF/SignaturePadCanvasView.cs b/src/SignaturePad.WPF/SignaturePadCanvasView.cs index 9fe50d2..5dacaef 100644 --- a/src/SignaturePad.WPF/SignaturePadCanvasView.cs +++ b/src/SignaturePad.WPF/SignaturePadCanvasView.cs @@ -10,8 +10,10 @@ namespace Xamarin.Controls using System.Drawing; using System.Windows; using System.Windows.Controls; + using System.Windows.Ink; using System.Windows.Media; using System.Windows.Media.Imaging; + using System.Windows.Threading; [TemplatePart (Name = PartInkCanvas, Type = typeof (InkCanvas))] public partial class SignaturePadCanvasView : Control @@ -25,6 +27,8 @@ public partial class SignaturePadCanvasView : Control static SignaturePadCanvasView () { + DefaultStyleKeyProperty.OverrideMetadata (typeof (SignaturePadCanvasView), new FrameworkPropertyMetadata (typeof (SignaturePadCanvasView))); + StrokeColorProperty = DependencyProperty.Register ( nameof (StrokeColor), typeof (System.Windows.Media.Color), @@ -41,16 +45,19 @@ static SignaturePadCanvasView () public SignaturePadCanvasView () { DefaultStyleKey = typeof (SignaturePadCanvasView); - inkPresenter = new InkPresenter (); - inkPresenter.StrokesChanged += (sender, e) => OnStrokeCompleted (); - OnStrokePropertiesChanged (this, new DependencyPropertyChangedEventArgs (StrokeColorProperty, "", "")); + OnApplyTemplate(); } /// public override void OnApplyTemplate () { base.OnApplyTemplate(); - inkPresenter = InkCanvas?.Strokes as InkPresenter; + var canvas = new InkCanvas(); + canvas.Width = 200; + canvas.Height = 200; + canvas.Background=new SolidColorBrush(Colors.Red); + canvas.Strokes = new InkPresenter(); + inkPresenter = canvas.Strokes as InkPresenter; inkPresenter.StrokesChanged += (sender, e) => OnStrokeCompleted (); OnStrokePropertiesChanged (this, new DependencyPropertyChangedEventArgs (StrokeColorProperty, "", "")); } diff --git a/src/SignaturePad.WPF/Themes/Generic.xaml b/src/SignaturePad.WPF/Themes/Generic.xaml index 08a6589..8e78262 100644 --- a/src/SignaturePad.WPF/Themes/Generic.xaml +++ b/src/SignaturePad.WPF/Themes/Generic.xaml @@ -29,7 +29,7 @@ Grid.RowSpan="2" /> Date: Fri, 1 Jun 2018 21:59:44 +0300 Subject: [PATCH 11/72] Remove InkPresenter, use StrokeCollection --- .../InkPresenter.cs | 1 + src/SignaturePad.Shared/Extensions.cs | 17 +++++++---- src/SignaturePad.Shared/SignaturePadView.cs | 2 +- src/SignaturePad.WPF/InkPresenter.cs | 15 ---------- src/SignaturePad.WPF/SignaturePad.WPF.csproj | 1 - .../SignaturePadCanvasView.cs | 29 +++---------------- src/SignaturePad.WPF/Themes/Generic.xaml | 10 ++++--- 7 files changed, 24 insertions(+), 51 deletions(-) delete mode 100644 src/SignaturePad.WPF/InkPresenter.cs diff --git a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs index 053b370..2e157a3 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs @@ -17,6 +17,7 @@ using NativeSize = System.Drawing.Size; using NativeColor = System.Windows.Media.Color; using NativeImage = System.Drawing.Bitmap; +using InkPresenter = System.Windows.Ink.StrokeCollection; #elif __IOS__ using NativeRect = CoreGraphics.CGRect; using NativeSize = CoreGraphics.CGSize; diff --git a/src/SignaturePad.Shared/Extensions.cs b/src/SignaturePad.Shared/Extensions.cs index 11434a3..26db3d5 100644 --- a/src/SignaturePad.Shared/Extensions.cs +++ b/src/SignaturePad.Shared/Extensions.cs @@ -8,7 +8,14 @@ #elif __IOS__ using CoreGraphics; using UIKit; -#elif WINDOWS_PHONE || NETFRAMEWORK +#elif NETFRAMEWORK +using System.Windows; +using System.Windows.Controls; +using System.Windows.Ink; +using System.Windows.Input; +using System.Windows.Media; +using InkPresenter = System.Windows.Ink.StrokeCollection; +#elif WINDOWS_PHONE using System.Windows; using System.Windows.Controls; using System.Windows.Ink; @@ -85,7 +92,7 @@ public static void LineTo (this Stroke stroke, double x, double y) stroke.StylusPoints.Add (new StylusPoint (x, y)); } - public static void AddStrokes (this InkPresenter inkPresenter, IList strokes, Color color, float width) + public static void AddStrokes (this StrokeCollection inkPresenter, IList strokes, Color color, float width) { var strokeCollection = new StrokeCollection (); foreach (var stroke in strokes.Where (s => s.Length > 0)) @@ -107,15 +114,15 @@ public static void AddStrokes (this InkPresenter inkPresenter, IList st }; } - inkPresenter = strokeCollection as InkPresenter; + inkPresenter = strokeCollection; } - public static void Invalidate (this StrokeCollection control) + public static void Invalidate (this InkPresenter control) { control.Invalidate(); } - public static IList GetStrokes (this InkPresenter inkPresenter) + public static IList GetStrokes (this StrokeCollection inkPresenter) { return inkPresenter; } diff --git a/src/SignaturePad.Shared/SignaturePadView.cs b/src/SignaturePad.Shared/SignaturePadView.cs index e2a2c26..16b31b0 100644 --- a/src/SignaturePad.Shared/SignaturePadView.cs +++ b/src/SignaturePad.Shared/SignaturePadView.cs @@ -61,7 +61,7 @@ partial class SignaturePadView #endif #if NETFRAMEWORK - public System.Windows.Ink.StrokeCollection Strokes => SignaturePadCanvas.Strokes as InkPresenter; + public System.Windows.Ink.StrokeCollection Strokes => SignaturePadCanvas.Strokes; #else public NativePoint[][] Strokes => SignaturePadCanvas.Strokes; #endif diff --git a/src/SignaturePad.WPF/InkPresenter.cs b/src/SignaturePad.WPF/InkPresenter.cs deleted file mode 100644 index 230daa2..0000000 --- a/src/SignaturePad.WPF/InkPresenter.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections.Generic; -using System.Drawing; - -namespace Xamarin.Controls -{ - using System.ComponentModel; - using System.Windows; - using System.Windows.Controls; - using System.Windows.Ink; - - partial class InkPresenter : System.Windows.Ink.StrokeCollection - { - - } - } diff --git a/src/SignaturePad.WPF/SignaturePad.WPF.csproj b/src/SignaturePad.WPF/SignaturePad.WPF.csproj index e1799f0..b01d31f 100644 --- a/src/SignaturePad.WPF/SignaturePad.WPF.csproj +++ b/src/SignaturePad.WPF/SignaturePad.WPF.csproj @@ -39,7 +39,6 @@ - diff --git a/src/SignaturePad.WPF/SignaturePadCanvasView.cs b/src/SignaturePad.WPF/SignaturePadCanvasView.cs index 5dacaef..df05d24 100644 --- a/src/SignaturePad.WPF/SignaturePadCanvasView.cs +++ b/src/SignaturePad.WPF/SignaturePadCanvasView.cs @@ -15,20 +15,15 @@ namespace Xamarin.Controls using System.Windows.Media.Imaging; using System.Windows.Threading; - [TemplatePart (Name = PartInkCanvas, Type = typeof (InkCanvas))] - public partial class SignaturePadCanvasView : Control + public partial class SignaturePadCanvasView : InkCanvas { public static readonly DependencyProperty StrokeColorProperty; public static readonly DependencyProperty StrokeWidthProperty; - private const string PartInkCanvas = "InkCanvas"; - private InkPresenter inkPresenter; static SignaturePadCanvasView () { - DefaultStyleKeyProperty.OverrideMetadata (typeof (SignaturePadCanvasView), new FrameworkPropertyMetadata (typeof (SignaturePadCanvasView))); - StrokeColorProperty = DependencyProperty.Register ( nameof (StrokeColor), typeof (System.Windows.Media.Color), @@ -45,26 +40,10 @@ static SignaturePadCanvasView () public SignaturePadCanvasView () { DefaultStyleKey = typeof (SignaturePadCanvasView); - OnApplyTemplate(); - } - - /// - public override void OnApplyTemplate () - { - base.OnApplyTemplate(); - var canvas = new InkCanvas(); - canvas.Width = 200; - canvas.Height = 200; - canvas.Background=new SolidColorBrush(Colors.Red); - canvas.Strokes = new InkPresenter(); - inkPresenter = canvas.Strokes as InkPresenter; - inkPresenter.StrokesChanged += (sender, e) => OnStrokeCompleted (); + Strokes.StrokesChanged += (sender, e) => OnStrokeCompleted (); OnStrokePropertiesChanged (this, new DependencyPropertyChangedEventArgs (StrokeColorProperty, "", "")); } - - - private InkCanvas InkCanvas => GetTemplateChild (PartInkCanvas) as InkCanvas; - + public System.Windows.Media.Color StrokeColor { get { return (System.Windows.Media.Color)GetValue (StrokeColorProperty); } @@ -104,7 +83,7 @@ private static void OnStrokePropertiesChanged (DependencyObject d, DependencyPro { var signaturePad = d as SignaturePadCanvasView; - var inkPresenter = signaturePad?.inkPresenter; + var inkPresenter = signaturePad?.Strokes; if (inkPresenter != null) { foreach (var stroke in inkPresenter) diff --git a/src/SignaturePad.WPF/Themes/Generic.xaml b/src/SignaturePad.WPF/Themes/Generic.xaml index 8e78262..cd85fad 100644 --- a/src/SignaturePad.WPF/Themes/Generic.xaml +++ b/src/SignaturePad.WPF/Themes/Generic.xaml @@ -83,9 +83,11 @@ From f1282ce4c3ca01bc3c79ebd15e49a68e6a7f1481 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 22:21:18 +0300 Subject: [PATCH 12/72] Init signaturepad --- .../Samples.WPF/MainWindow.xaml.cs | 4 +-- src/SignaturePad.WPF/SignaturePad.WPF.csproj | 4 ++- src/SignaturePad.WPF/SignaturePad.cs | 15 +++++++-- src/SignaturePad.WPF/Themes/Generic.xaml | 33 ++++++++----------- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs index 7464108..47523c4 100644 --- a/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs +++ b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs @@ -21,14 +21,14 @@ public MainWindow() { InitializeComponent(); Forms.Init(); + Xamarin.Controls.SignaturePad.Init (); SignaturePadCanvasRenderer.Init (); LoadApplication(new Samples.App(OnSaveSignature)); } private async Task OnSaveSignature (Stream bitmap, string filename) { - var storageFolder = Environment.SpecialFolder.CommonPictures.ToString(); - var file = System.IO.File.Create (Path.Combine(storageFolder, filename)); + var file = System.IO.File.Create (filename); using (var dest = file) { diff --git a/src/SignaturePad.WPF/SignaturePad.WPF.csproj b/src/SignaturePad.WPF/SignaturePad.WPF.csproj index b01d31f..c2e5054 100644 --- a/src/SignaturePad.WPF/SignaturePad.WPF.csproj +++ b/src/SignaturePad.WPF/SignaturePad.WPF.csproj @@ -41,7 +41,9 @@ - + + Never + diff --git a/src/SignaturePad.WPF/SignaturePad.cs b/src/SignaturePad.WPF/SignaturePad.cs index daa8765..75d879a 100644 --- a/src/SignaturePad.WPF/SignaturePad.cs +++ b/src/SignaturePad.WPF/SignaturePad.cs @@ -40,8 +40,18 @@ public partial class SignaturePad : Control public static readonly DependencyProperty BackgroundImageStretchProperty; public static readonly DependencyProperty BackgroundImageOpacityProperty; + public static void Init () + { + var time = DateTime.Now; + } + static SignaturePad () { + DefaultStyleKeyProperty.OverrideMetadata ( + typeof (SignaturePad), + new FrameworkPropertyMetadata (typeof (SignaturePad))); + + StrokeColorProperty = DependencyProperty.Register ( nameof (StrokeColor), typeof (Color), @@ -151,12 +161,13 @@ public SignaturePad () //RegisterPropertyChangedCallback (PaddingProperty, OnPaddingChanged); Padding = new Thickness (DefaultWideSpacing, DefaultWideSpacing, DefaultWideSpacing, DefaultNarrowSpacing); + OnApplyTemplate(); } /// - protected override void OnTemplateChanged (ControlTemplate oldTemplate, ControlTemplate newTemplate) + public override void OnApplyTemplate() { - base.OnTemplateChanged (oldTemplate, newTemplate); + base.OnApplyTemplate(); SignaturePadCanvas.StrokeCompleted += delegate { diff --git a/src/SignaturePad.WPF/Themes/Generic.xaml b/src/SignaturePad.WPF/Themes/Generic.xaml index cd85fad..e2b70bd 100644 --- a/src/SignaturePad.WPF/Themes/Generic.xaml +++ b/src/SignaturePad.WPF/Themes/Generic.xaml @@ -28,13 +28,19 @@ VerticalAlignment="Stretch" Grid.RowSpan="2" /> - + + + + - - From 6e9323d19f2313b32f81023449aa77f57fa10c38 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 22:26:43 +0300 Subject: [PATCH 13/72] Return renderer. remove redundant inits --- .../Samples.WPF/MainWindow.xaml.cs | 37 ++++++++----------- .../SignaturePadCanvasRenderer.cs | 5 --- .../SignaturePadCanvasView.cs | 1 + src/SignaturePad.WPF/SignaturePad.cs | 7 +--- 4 files changed, 18 insertions(+), 32 deletions(-) diff --git a/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs index 47523c4..84d4a9f 100644 --- a/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs +++ b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs @@ -13,29 +13,24 @@ namespace Samples.WPF using Xamarin.Forms.Platform.WPF; /// - /// Interaction logic for MainWindow.xaml - /// - public partial class MainWindow : FormsApplicationPage - { - public MainWindow() - { - InitializeComponent(); - Forms.Init(); - Xamarin.Controls.SignaturePad.Init (); - SignaturePadCanvasRenderer.Init (); - LoadApplication(new Samples.App(OnSaveSignature)); - } + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : FormsApplicationPage + { + public MainWindow () + { + InitializeComponent (); + Forms.Init (); + LoadApplication (new Samples.App (OnSaveSignature)); + } - private async Task OnSaveSignature (Stream bitmap, string filename) - { - var file = System.IO.File.Create (filename); + private async Task OnSaveSignature (Stream bitmap, string filename) + { + var file = File.Create (filename); - using (var dest = file) - { - await bitmap.CopyToAsync (dest); - } + await bitmap.CopyToAsync (file); - return true; - } + return true; + } } } diff --git a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs index dd59ee2..23f6d4a 100644 --- a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs +++ b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs @@ -44,11 +44,6 @@ public SignaturePadCanvasRenderer () { } - public static void Init () - { - var time = DateTime.Now; - } - #if __ANDROID__ public SignaturePadCanvasRenderer (Android.Content.Context context) : base (context) diff --git a/src/SignaturePad.Forms.Shared/SignaturePadCanvasView.cs b/src/SignaturePad.Forms.Shared/SignaturePadCanvasView.cs index ab42063..bb5bbbb 100644 --- a/src/SignaturePad.Forms.Shared/SignaturePadCanvasView.cs +++ b/src/SignaturePad.Forms.Shared/SignaturePadCanvasView.cs @@ -7,6 +7,7 @@ namespace SignaturePad.Forms { + [RenderWith (typeof (SignaturePadCanvasRenderer))] public class SignaturePadCanvasView : View { public static readonly BindableProperty StrokeColorProperty = BindableProperty.Create ( diff --git a/src/SignaturePad.WPF/SignaturePad.cs b/src/SignaturePad.WPF/SignaturePad.cs index 75d879a..efdbbcb 100644 --- a/src/SignaturePad.WPF/SignaturePad.cs +++ b/src/SignaturePad.WPF/SignaturePad.cs @@ -39,12 +39,7 @@ public partial class SignaturePad : Control public static readonly DependencyProperty BackgroundImageProperty; public static readonly DependencyProperty BackgroundImageStretchProperty; public static readonly DependencyProperty BackgroundImageOpacityProperty; - - public static void Init () - { - var time = DateTime.Now; - } - + static SignaturePad () { DefaultStyleKeyProperty.OverrideMetadata ( From 3f219bb9978eb73c338cc5e517c4b588ead5a809 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 22:53:33 +0300 Subject: [PATCH 14/72] Use native where possible --- samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj | 2 +- samples/Sample.Forms/Samples.WPF/App.config | 6 +++++- samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj | 12 ++++++------ samples/Sample.Forms/Samples.WPF/packages.config | 6 +++--- .../SignaturePadCanvasRenderer.cs | 2 ++ .../SignaturePad.Forms.UWP.csproj | 2 +- src/SignaturePad.Shared/Extensions.cs | 6 +++--- src/SignaturePad.Shared/SignaturePadCanvasView.cs | 1 + src/SignaturePad.UWP/SignaturePad.UWP.csproj | 2 +- src/SignaturePad.WPF/SignaturePadCanvasView.cs | 9 ++++----- 10 files changed, 27 insertions(+), 21 deletions(-) diff --git a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj index a179a6c..e5d6332 100644 --- a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj +++ b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj @@ -90,7 +90,7 @@ true - + diff --git a/samples/Sample.Forms/Samples.WPF/App.config b/samples/Sample.Forms/Samples.WPF/App.config index 999e19a..200da54 100644 --- a/samples/Sample.Forms/Samples.WPF/App.config +++ b/samples/Sample.Forms/Samples.WPF/App.config @@ -7,7 +7,11 @@ - + + + + + diff --git a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj index fa4531e..147c531 100644 --- a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj +++ b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj @@ -37,11 +37,11 @@ 4 - - ..\packages\OpenTK.2.0.0\lib\net20\OpenTK.dll + + ..\packages\OpenTK.3.0.0\lib\net20\OpenTK.dll - - ..\packages\OpenTK.GLControl.1.1.2349.61993\lib\NET40\OpenTK.GLControl.dll + + ..\packages\OpenTK.GLControl.3.0.0\lib\net20\OpenTK.GLControl.dll @@ -57,8 +57,8 @@ - - ..\packages\WpfLightToolkit.1.0.1\lib\net45\WpfLightToolkit.dll + + ..\packages\WpfLightToolkit.1.0.3\lib\net45\WpfLightToolkit.dll ..\packages\Xamarin.Forms.3.0.0.482510\lib\netstandard2.0\Xamarin.Forms.Core.dll diff --git a/samples/Sample.Forms/Samples.WPF/packages.config b/samples/Sample.Forms/Samples.WPF/packages.config index 3a4b2fe..be44111 100644 --- a/samples/Sample.Forms/Samples.WPF/packages.config +++ b/samples/Sample.Forms/Samples.WPF/packages.config @@ -1,8 +1,8 @@  - - - + + + \ No newline at end of file diff --git a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs index 23f6d4a..da80360 100644 --- a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs +++ b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs @@ -80,6 +80,7 @@ protected override void OnElementChanged (ElementChangedEventArgs - + diff --git a/src/SignaturePad.Shared/Extensions.cs b/src/SignaturePad.Shared/Extensions.cs index 26db3d5..a485b47 100644 --- a/src/SignaturePad.Shared/Extensions.cs +++ b/src/SignaturePad.Shared/Extensions.cs @@ -92,7 +92,7 @@ public static void LineTo (this Stroke stroke, double x, double y) stroke.StylusPoints.Add (new StylusPoint (x, y)); } - public static void AddStrokes (this StrokeCollection inkPresenter, IList strokes, Color color, float width) + public static void AddStrokes (this StrokeCollection inkPresenter, IList strokes, Color color, float width) { var strokeCollection = new StrokeCollection (); foreach (var stroke in strokes.Where (s => s.Length > 0)) @@ -127,9 +127,9 @@ public static IList GetStrokes (this StrokeCollection inkPresenter) return inkPresenter; } - public static IEnumerable GetPoints (this Stroke stroke) + public static IEnumerable GetPoints (this Stroke stroke) { - return stroke.StylusPoints.Select (p => new Point (p.X, p.Y)); + return stroke.StylusPoints.Select (p => new StylusPoint (p.X, p.Y)); } public static Size GetSize (this FrameworkElement element) diff --git a/src/SignaturePad.Shared/SignaturePadCanvasView.cs b/src/SignaturePad.Shared/SignaturePadCanvasView.cs index 5d2e01e..79c27c1 100644 --- a/src/SignaturePad.Shared/SignaturePadCanvasView.cs +++ b/src/SignaturePad.Shared/SignaturePadCanvasView.cs @@ -576,6 +576,7 @@ private void OnCleared () private void OnStrokeCompleted () { + inkPresenter = Strokes; OnStrokeCompleted (this, EventArgs.Empty); } diff --git a/src/SignaturePad.UWP/SignaturePad.UWP.csproj b/src/SignaturePad.UWP/SignaturePad.UWP.csproj index 0be0bed..103cf39 100644 --- a/src/SignaturePad.UWP/SignaturePad.UWP.csproj +++ b/src/SignaturePad.UWP/SignaturePad.UWP.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/SignaturePad.WPF/SignaturePadCanvasView.cs b/src/SignaturePad.WPF/SignaturePadCanvasView.cs index df05d24..d022517 100644 --- a/src/SignaturePad.WPF/SignaturePadCanvasView.cs +++ b/src/SignaturePad.WPF/SignaturePadCanvasView.cs @@ -20,8 +20,7 @@ public partial class SignaturePadCanvasView : InkCanvas public static readonly DependencyProperty StrokeColorProperty; public static readonly DependencyProperty StrokeWidthProperty; - private InkPresenter inkPresenter; - + StrokeCollection inkPresenter; static SignaturePadCanvasView () { StrokeColorProperty = DependencyProperty.Register ( @@ -43,7 +42,7 @@ public SignaturePadCanvasView () Strokes.StrokesChanged += (sender, e) => OnStrokeCompleted (); OnStrokePropertiesChanged (this, new DependencyPropertyChangedEventArgs (StrokeColorProperty, "", "")); } - + public System.Windows.Media.Color StrokeColor { get { return (System.Windows.Media.Color)GetValue (StrokeColorProperty); } @@ -58,9 +57,9 @@ public double StrokeWidth public void Clear () { - if (inkPresenter != null) + if (Strokes != null) { - inkPresenter.Clear (); + Strokes.Clear (); OnCleared (); } From d3b4fa8ec4f855c1cc39730dc1575a97e073e437 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 23:21:00 +0300 Subject: [PATCH 15/72] remove redundant code --- .../SignaturePadCanvasView.cs | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/SignaturePad.Shared/SignaturePadCanvasView.cs b/src/SignaturePad.Shared/SignaturePadCanvasView.cs index 79c27c1..58cd688 100644 --- a/src/SignaturePad.Shared/SignaturePadCanvasView.cs +++ b/src/SignaturePad.Shared/SignaturePadCanvasView.cs @@ -432,7 +432,6 @@ private bool GetImageConstructionArguments (ImageConstructionSettings settings, imageSize = sizeOrScale.GetSize ((float)viewSize.Width, (float)viewSize.Height); scale = sizeOrScale.GetScale ((float)imageSize.Width, (float)imageSize.Height); -#if NETFRAMEWORK if (settings.ShouldCrop == true) { signatureBounds = GetSignatureBounds (settings.Padding.Value); @@ -446,6 +445,7 @@ private bool GetImageConstructionArguments (ImageConstructionSettings settings, { scaleX = scaleY = Math.Min ((float)scaleX, (float)scaleY); } +#if NETFRAMEWORK scale = new NativeSize ((int)scaleX, (int)scaleY); } else if (sizeOrScale.Type == SizeOrScaleType.Scale) @@ -459,20 +459,7 @@ private bool GetImageConstructionArguments (ImageConstructionSettings settings, signatureBounds = new NativeRect (0, 0, (float)viewSize.Width, (float)viewSize.Height); } #else - if (settings.ShouldCrop == true) - { - signatureBounds = GetSignatureBounds (settings.Padding.Value); - - if (sizeOrScale.Type == SizeOrScaleType.Size) - { - // if a specific size was set, scale to that - var scaleX = imageSize.Width / (float)signatureBounds.Width; - var scaleY = imageSize.Height / (float)signatureBounds.Height; - if (sizeOrScale.KeepAspectRatio) - { - scaleX = scaleY = Math.Min ((float)scaleX, (float)scaleY); - } - scale = new NativeSize ((float)scaleX, (float)scaleY); + scale = new NativeSize ((float)scaleX, (float)scaleY); } else if (sizeOrScale.Type == SizeOrScaleType.Scale) { From 6a20b272dafd685f5b389304518d50c0c9fc2a2d Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Fri, 1 Jun 2018 23:35:18 +0300 Subject: [PATCH 16/72] Fix stackoverflowexception --- .../SignaturePadCanvasRenderer.cs | 2 -- src/SignaturePad.Shared/SignaturePadCanvasView.cs | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs index da80360..23f6d4a 100644 --- a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs +++ b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs @@ -80,7 +80,6 @@ protected override void OnElementChanged (ElementChangedEventArgs Date: Sat, 2 Jun 2018 00:53:30 +0300 Subject: [PATCH 17/72] Fix problem when strokes and points were not binded --- src/SignaturePad.InkPresenter.Shared/InkPresenter.cs | 2 -- src/SignaturePad.Shared/Extensions.cs | 10 +++++----- src/SignaturePad.Shared/SignaturePadCanvasView.cs | 3 --- src/SignaturePad.WPF/SignaturePadCanvasView.cs | 8 ++++---- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs index 2e157a3..4a83325 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs @@ -14,10 +14,8 @@ using NativePath = System.Windows.Ink.Stroke; using NativeRect = System.Drawing.RectangleF; using NativePoint = System.Windows.Input.StylusPoint; -using NativeSize = System.Drawing.Size; using NativeColor = System.Windows.Media.Color; using NativeImage = System.Drawing.Bitmap; -using InkPresenter = System.Windows.Ink.StrokeCollection; #elif __IOS__ using NativeRect = CoreGraphics.CGRect; using NativeSize = CoreGraphics.CGSize; diff --git a/src/SignaturePad.Shared/Extensions.cs b/src/SignaturePad.Shared/Extensions.cs index a485b47..eae0a86 100644 --- a/src/SignaturePad.Shared/Extensions.cs +++ b/src/SignaturePad.Shared/Extensions.cs @@ -92,7 +92,7 @@ public static void LineTo (this Stroke stroke, double x, double y) stroke.StylusPoints.Add (new StylusPoint (x, y)); } - public static void AddStrokes (this StrokeCollection inkPresenter, IList strokes, Color color, float width) + public static void AddStrokes (this InkCanvas inkPresenter, IList strokes, Color color, float width) { var strokeCollection = new StrokeCollection (); foreach (var stroke in strokes.Where (s => s.Length > 0)) @@ -114,17 +114,17 @@ public static void AddStrokes (this StrokeCollection inkPresenter, IList GetStrokes (this StrokeCollection inkPresenter) + public static IList GetStrokes (this InkCanvas canvas) { - return inkPresenter; + return canvas.Strokes; } public static IEnumerable GetPoints (this Stroke stroke) diff --git a/src/SignaturePad.Shared/SignaturePadCanvasView.cs b/src/SignaturePad.Shared/SignaturePadCanvasView.cs index c2229f6..18529ed 100644 --- a/src/SignaturePad.Shared/SignaturePadCanvasView.cs +++ b/src/SignaturePad.Shared/SignaturePadCanvasView.cs @@ -563,9 +563,6 @@ private void OnCleared () private void OnStrokeCompleted () { -#if NETFRAMEWORK - inkPresenter = Strokes; -#endif OnStrokeCompleted (this, EventArgs.Empty); } diff --git a/src/SignaturePad.WPF/SignaturePadCanvasView.cs b/src/SignaturePad.WPF/SignaturePadCanvasView.cs index d022517..defec0c 100644 --- a/src/SignaturePad.WPF/SignaturePadCanvasView.cs +++ b/src/SignaturePad.WPF/SignaturePadCanvasView.cs @@ -20,7 +20,7 @@ public partial class SignaturePadCanvasView : InkCanvas public static readonly DependencyProperty StrokeColorProperty; public static readonly DependencyProperty StrokeWidthProperty; - StrokeCollection inkPresenter; + InkCanvas inkPresenter => this; static SignaturePadCanvasView () { StrokeColorProperty = DependencyProperty.Register ( @@ -39,7 +39,7 @@ static SignaturePadCanvasView () public SignaturePadCanvasView () { DefaultStyleKey = typeof (SignaturePadCanvasView); - Strokes.StrokesChanged += (sender, e) => OnStrokeCompleted (); + inkPresenter.Strokes.StrokesChanged += (sender, e) => OnStrokeCompleted (); OnStrokePropertiesChanged (this, new DependencyPropertyChangedEventArgs (StrokeColorProperty, "", "")); } @@ -68,8 +68,8 @@ public void Clear () private Task GetImageStreamInternal (SignatureImageFormat format, System.Drawing.SizeF scale, RectangleF signatureBounds, System.Drawing.SizeF imageSize, float strokeWidth, System.Windows.Media.Color strokeColor, System.Windows.Media.Color backgroundColor) { - return null; - + return null; + } private Bitmap GetImageInternal (System.Drawing.SizeF scale, System.Drawing.RectangleF signatureBounds, From 61b584a4a92b69bc834846d70d17634478e08122 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Tue, 10 Jul 2018 18:27:43 +0300 Subject: [PATCH 18/72] MacOS library --- .../SignaturePad.Forms.MacOS.csproj | 47 +++ .../ColorExtensions.cs | 15 + .../SignaturePadCanvasRenderer.cs | 4 + .../InkPresenter.cs | 9 +- .../InkStroke.cs | 4 + src/SignaturePad.MacOS/InkPresenter.cs | 176 ++++++++ .../SignaturePad.MacOS.csproj | 44 ++ .../SignaturePadCanvasView.cs | 114 ++++++ src/SignaturePad.MacOS/SignaturePadView.cs | 381 ++++++++++++++++++ src/SignaturePad.Shared/Extensions.cs | 30 ++ .../ImageConstructionSettings.cs | 7 + src/SignaturePad.Shared/PathSmoothing.cs | 5 +- .../SignaturePadCanvasView.cs | 6 + src/SignaturePad.Shared/SignaturePadView.cs | 11 +- src/SignaturePad.sln | 12 + 15 files changed, 859 insertions(+), 6 deletions(-) create mode 100644 src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj create mode 100644 src/SignaturePad.MacOS/InkPresenter.cs create mode 100644 src/SignaturePad.MacOS/SignaturePad.MacOS.csproj create mode 100644 src/SignaturePad.MacOS/SignaturePadCanvasView.cs create mode 100644 src/SignaturePad.MacOS/SignaturePadView.cs diff --git a/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj b/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj new file mode 100644 index 0000000..8204d68 --- /dev/null +++ b/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj @@ -0,0 +1,47 @@ + + + + xamarin.mac2.0 + SignaturePad.Forms + SignaturePad.Forms + False + $(MSBuildWarningsAsMessages);VSX1000 + bin\$(Configuration)\$(AssemblyName).xml + 1.0.0 + + + + 1.0.0 + Xamarin.Controls.SignaturePad.Forms + SignaturePad for Xamarin.Forms + $(AssemblyName) ($(TargetFramework)) + Microsoft + Microsoft + true + Makes capturing, saving, and displaying signatures extremely simple. + Makes capturing, saving, and displaying signatures extremely simple. + © Microsoft Corporation. All rights reserved. + en + https://go.microsoft.com/fwlink/?linkid=874510 + https://go.microsoft.com/fwlink/?linkid=874507 + https://go.microsoft.com/fwlink/?linkid=874507 + https://go.microsoft.com/fwlink/?linkid=874508 + https://go.microsoft.com/fwlink/?linkid=874509 + xamarin,signature,handwriting,windows,ios,android,uwp + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs b/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs index f339149..fb92916 100644 --- a/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs +++ b/src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs @@ -11,6 +11,10 @@ using UIKit; using Xamarin.Forms.Platform.iOS; using NativeColor = UIKit.UIColor; +#elif __MACOS__ +using AppKit; +using Xamarin.Forms.Platform.MacOS; +using NativeColor = AppKit.NSColor; #elif __ANDROID__ using Android.Widget; using Xamarin.Forms.Platform.Android; @@ -42,6 +46,8 @@ public static NativeColor ToNative (this Color color) return color.ToWindows (); #elif __IOS__ return color.ToUIColor (); +#elif __MACOS__ + return color.ToNSColor (); #elif __ANDROID__ return color.ToAndroid (); #endif @@ -61,6 +67,15 @@ public static void SetTextColor (this UIButton button, Color color) { button.SetTitleColor (color.ToNative (), UIControlState.Normal); } +#elif __MACOS__ + public static void SetTextColor (this NSTextField label, Color color) + { + label.TextColor = color.ToNative (); + } + public static void SetTextColor (this NSButton button, Color color) + { + button.BezelColor= color.ToNative (); + } #elif __ANDROID__ public static void SetTextColor (this TextView label, Color color) { diff --git a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs index 23f6d4a..7ad3b62 100644 --- a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs +++ b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs @@ -21,6 +21,10 @@ using Xamarin.Forms.Platform.iOS; using NativeSignaturePadCanvasView = Xamarin.Controls.SignaturePadCanvasView; using NativePoint = CoreGraphics.CGPoint; +#elif __MACOS__ +using Xamarin.Forms.Platform.MacOS; +using NativeSignaturePadCanvasView = Xamarin.Controls.SignaturePadCanvasView; +using NativePoint = CoreGraphics.CGPoint; #elif __ANDROID__ using Xamarin.Forms.Platform.Android; using NativeSignaturePadCanvasView = Xamarin.Controls.SignaturePadCanvasView; diff --git a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs index 4a83325..a2e9192 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs @@ -23,6 +23,13 @@ using NativeColor = UIKit.UIColor; using NativeImage = UIKit.UIImage; using NativePath = UIKit.UIBezierPath; +#elif __MACOS__ +using NativeRect = CoreGraphics.CGRect; +using NativeSize = CoreGraphics.CGSize; +using NativePoint = CoreGraphics.CGPoint; +using NativeColor = AppKit.NSColor; +using NativeImage = AppKit.NSImage; +using NativePath = AppKit.NSBezierPath; #elif WINDOWS_PHONE_APP using NativeRect = Windows.Foundation.Rect; using NativeSize = Windows.Foundation.Size; @@ -59,7 +66,7 @@ internal partial class InkPresenter // private properties -#if __IOS__ +#if __IOS__ || __MACOS__ private float Width => (float)Bounds.Width; private float Height => (float)Bounds.Height; diff --git a/src/SignaturePad.InkPresenter.Shared/InkStroke.cs b/src/SignaturePad.InkPresenter.Shared/InkStroke.cs index b15f774..93b3aca 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkStroke.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkStroke.cs @@ -12,6 +12,10 @@ using NativePoint = CoreGraphics.CGPoint; using NativeColor = UIKit.UIColor; using NativePath = UIKit.UIBezierPath; +#elif __MACOS__ +using NativePoint = CoreGraphics.CGPoint; +using NativeColor = AppKit.NSColor; +using NativePath = AppKit.NSBezierPath; #elif WINDOWS_PHONE_APP using NativePoint = Windows.Foundation.Point; using NativeColor = Windows.UI.Color; diff --git a/src/SignaturePad.MacOS/InkPresenter.cs b/src/SignaturePad.MacOS/InkPresenter.cs new file mode 100644 index 0000000..648dc85 --- /dev/null +++ b/src/SignaturePad.MacOS/InkPresenter.cs @@ -0,0 +1,176 @@ +using System.Collections.Generic; +using CoreGraphics; +using Foundation; +using AppKit; + +namespace Xamarin.Controls +{ + + partial class InkPresenter : NSView + { + static InkPresenter () + { + ScreenDensity = (float)NSScreen.MainScreen.BackingScaleFactor; + } + + public InkPresenter () + : base () + { + Initialize (); + } + + public InkPresenter (CGRect frame) + : base (frame) + { + Initialize (); + } + + private void Initialize () + { + //IsOpaque = false; + } + + // If you put SignaturePad inside a ScrollView, this line of code prevent that the gesture inside + // an InkPresenter are dispatched to the ScrollView below + //public override bool GestureRecognizerShouldBegin (NSGestureRecognizer gestureRecognizer) => false; + + public override void TouchesBeganWithEvent (NSEvent evt) + { + // create a new path and set the options + currentPath = new InkStroke (new NSBezierPath(), new List (), StrokeColor, StrokeWidth); + + // obtain the location of the touch + var touch = evt.AllTouches.AnyObject as NSTouch; + var touchLocation = touch.GetLocation (this); + + // move the path to that position + currentPath.Path.MoveTo (touchLocation); + currentPath.GetPoints ().Add (touchLocation); + + // update the dirty rectangle + ResetBounds (touchLocation); + } + + public override void TouchesMovedWithEvent (NSEvent evt) + { + // something may have happened (clear) so start the stroke again + if (currentPath == null) + { + TouchesBeganWithEvent(evt); + } + + // obtain the location of the touch + var touch = evt.AllTouches.AnyObject as NSTouch; + var touchLocation = touch.GetLocation (this); + + if (HasMovedFarEnough (currentPath, touchLocation.X, touchLocation.Y)) + { + // add it to the current path + currentPath.Path.LineTo (touchLocation); + currentPath.GetPoints ().Add (touchLocation); + + // update the dirty rectangle + UpdateBounds (touchLocation); + SetNeedsDisplayInRect (DirtyRect); + } + } + + public override void TouchesCancelledWithEvent (NSEvent evt) + { + TouchesEndedWithEvent(evt); + } + + public override void TouchesEndedWithEvent (NSEvent evt) + { + // obtain the location of the touch + var touch = evt.AllTouches.AnyObject as NSTouch; + var touchLocation = touch.GetLocation(this); + + // something may have happened (clear) during the stroke + if (currentPath != null) + { + if (HasMovedFarEnough (currentPath, touchLocation.X, touchLocation.Y)) + { + // add it to the current path + currentPath.Path.LineTo (touchLocation); + currentPath.GetPoints ().Add (touchLocation); + } + + // obtain the smoothed path, and add it to the old paths + var smoothed = PathSmoothing.SmoothedPathWithGranularity (currentPath, 4); + paths.Add (smoothed); + } + + // clear the current path + currentPath = null; + + // update the dirty rectangle + UpdateBounds (touchLocation); + NeedsDisplay = true; + + // we are done with drawing + OnStrokeCompleted (); + } + + + + public override void DrawRect (CGRect rect) + { + base.DrawRect (rect); + + // destroy an old bitmap + if (bitmapBuffer != null && ShouldRedrawBufferImage) + { + var temp = bitmapBuffer; + bitmapBuffer = null; + + temp.Dispose (); + temp = null; + } + + // re-create + if (bitmapBuffer == null) + { + bitmapBuffer = CreateBufferImage (); + } + + // if there are no lines, the the bitmap will be null + if (bitmapBuffer != null) + { + bitmapBuffer.Draw (CGPoint.Empty, rect, NSCompositingOperation.Copy, 0); + } + + // draw the current path over the old paths + if (currentPath != null) + { + //var context = this.InputContext;..GetCurrentContext (); + //context.SetLineCap (CGLineCap.Round); + //context.SetLineJoin (CGLineJoin.Round); + //context.SetStrokeColor (currentPath.Color.CGColor); + //context.SetLineWidth (currentPath.Width); + + //context.AddPath (currentPath.Path); + //context.StrokePath (); + } + } + + private NSImage CreateBufferImage () + { + if (paths == null || paths.Count == 0) + { + return null; + } + + var size = Bounds.Size; + + return null; + } + + public override void Layout () + { + base.Layout (); + + NeedsDisplay = true; + } + } +} diff --git a/src/SignaturePad.MacOS/SignaturePad.MacOS.csproj b/src/SignaturePad.MacOS/SignaturePad.MacOS.csproj new file mode 100644 index 0000000..a1a33e7 --- /dev/null +++ b/src/SignaturePad.MacOS/SignaturePad.MacOS.csproj @@ -0,0 +1,44 @@ + + + + xamarin.mac2.0 + Xamarin.Controls + SignaturePad + False + $(MSBuildWarningsAsMessages);VSX1000 + bin\$(Configuration)\$(AssemblyName).xml + 1.0.0 + + + + 1.0.0 + Xamarin.Controls.SignaturePad + SignaturePad for Xamarin and Windows + $(AssemblyName) ($(TargetFramework)) + Microsoft + Microsoft + true + Makes capturing, saving, and displaying signatures extremely simple. + Makes capturing, saving, and displaying signatures extremely simple. + © Microsoft Corporation. All rights reserved. + en + https://go.microsoft.com/fwlink/?linkid=874510 + https://go.microsoft.com/fwlink/?linkid=874507 + https://go.microsoft.com/fwlink/?linkid=874507 + https://go.microsoft.com/fwlink/?linkid=874508 + https://go.microsoft.com/fwlink/?linkid=874509 + xamarin,signature,handwriting,windows,ios,android,uwp + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SignaturePad.MacOS/SignaturePadCanvasView.cs b/src/SignaturePad.MacOS/SignaturePadCanvasView.cs new file mode 100644 index 0000000..d495cd5 --- /dev/null +++ b/src/SignaturePad.MacOS/SignaturePadCanvasView.cs @@ -0,0 +1,114 @@ +using System; +using System.ComponentModel; +using System.IO; +using System.Threading.Tasks; +using CoreGraphics; +using Foundation; +using AppKit; + +namespace Xamarin.Controls +{ + [Register ("SignaturePadCanvasView")] + [DesignTimeVisible (true)] + public partial class SignaturePadCanvasView : NSView + { + private InkPresenter inkPresenter; + + public SignaturePadCanvasView () + { + Initialize (); + } + + public SignaturePadCanvasView (NSCoder coder) + : base (coder) + { + Initialize (/* ? baseProperties: false ? */); + } + + protected SignaturePadCanvasView (IntPtr ptr) + : base (ptr) + { + Initialize (false); + } + + public SignaturePadCanvasView (CGRect frame) + : base (frame) + { + Initialize (); + } + + private void Initialize (bool baseProperties = true) + { + inkPresenter = new InkPresenter (Bounds) + { + AutoresizingMask = NSViewResizingMask.WidthSizable | NSViewResizingMask.HeightSizable, + }; + inkPresenter.StrokeCompleted += OnStrokeCompleted; + AddSubview (inkPresenter); + + StrokeWidth = ImageConstructionSettings.DefaultStrokeWidth; + StrokeColor = ImageConstructionSettings.DefaultStrokeColor; + } + + [Export ("StrokeColor"), Browsable (true)] + public NSColor StrokeColor + { + get { return inkPresenter.StrokeColor; } + set + { + inkPresenter.StrokeColor = value; + foreach (var stroke in inkPresenter.GetStrokes ()) + { + stroke.Color = value; + } + + inkPresenter.NeedsDisplay = true; + } + } + + [Export ("StrokeWidth"), Browsable (true)] + public float StrokeWidth + { + get { return inkPresenter.StrokeWidth; } + set + { + inkPresenter.StrokeWidth = value; + foreach (var stroke in inkPresenter.GetStrokes ()) + { + stroke.Width = value; + } + + inkPresenter.NeedsDisplay = true; + } + } + + public void Clear () + { + inkPresenter.Clear (); + + OnCleared (); + } + + private NSImage GetImageInternal (CGSize scale, CGRect signatureBounds, CGSize imageSize, float strokeWidth, NSColor strokeColor, NSColor backgroundColor) + { + return null; + } + + private Task GetImageStreamInternal (SignatureImageFormat format, CGSize scale, CGRect signatureBounds, CGSize imageSize, float strokeWidth, NSColor strokeColor, NSColor backgroundColor) + { + var image = GetImageInternal (scale, signatureBounds, imageSize, strokeWidth, strokeColor, backgroundColor); + if (image != null) + { + if (format == SignatureImageFormat.Jpeg) + { + return Task.Run (() => image.AsTiff ().AsStream ()); + } + else if (format == SignatureImageFormat.Png) + { + return Task.Run (() => image.AsTiff ().AsStream ()); + } + } + return Task.FromResult (null); + } + } +} diff --git a/src/SignaturePad.MacOS/SignaturePadView.cs b/src/SignaturePad.MacOS/SignaturePadView.cs new file mode 100644 index 0000000..fd73151 --- /dev/null +++ b/src/SignaturePad.MacOS/SignaturePadView.cs @@ -0,0 +1,381 @@ +using System; +using System.ComponentModel; +using CoreGraphics; +using Foundation; +using AppKit; + +namespace Xamarin.Controls +{ + [Register ("SignaturePadView")] + [DesignTimeVisible (true)] + public partial class SignaturePadView : NSView + { + private NSEdgeInsets padding; + + public SignaturePadView () + { + Initialize (); + } + + public SignaturePadView (NSCoder coder) + : base (coder) + { + Initialize (/* ? baseProperties: false ? */); + } + + public SignaturePadView (IntPtr ptr) + : base (ptr) + { + Initialize (false); + } + + public SignaturePadView (CGRect frame) + : base (frame) + { + Initialize (); + } + + private void Initialize (bool baseProperties = true) + { + // add the background view + { + BackgroundImageView = new NSImageView (); + AddSubview (BackgroundImageView); + } + + // add the main signature view + { + SignaturePadCanvas = new SignaturePadCanvasView (); + SignaturePadCanvas.StrokeCompleted += delegate + { + OnSignatureStrokeCompleted (); + }; + SignaturePadCanvas.Cleared += delegate + { + OnSignatureCleared (); + }; + AddSubview (SignaturePadCanvas); + } + + // add the caption + { + Caption = new NSTextField + { + BackgroundColor = NSColor.Clear, + Alignment = NSTextAlignment.Center, + Font = NSFont.SystemFontOfSize (DefaultFontSize), + StringValue = DefaultCaptionText, + TextColor = SignaturePadDarkColor, + }; + AddSubview (Caption); + } + + // add the signature line + { + SignatureLine = new NSView + { + //BackgroundColor = SignaturePadDarkColor, + }; + SignatureLineWidth = DefaultLineThickness; + SignatureLineSpacing = DefaultNarrowSpacing; + AddSubview (SignatureLine); + } + + // add the prompt + { + SignaturePrompt = new NSTextField () + { + BackgroundColor = NSColor.Clear, + Font = NSFont.BoldSystemFontOfSize (DefaultFontSize), + StringValue = DefaultPromptText, + TextColor = SignaturePadDarkColor, + }; + AddSubview (SignaturePrompt); + } + + // add the clear label + { + ClearLabel = NSButton.CreateButton(DefaultClearLabelText,OnClearTapped); + //ClearLabel.Layer.BackgroundColor = CGColor.Clear; + ClearLabel.Font = NSFont.BoldSystemFontOfSize (DefaultFontSize); + ClearLabel.BezelColor=SignaturePadDarkColor; + AddSubview (ClearLabel); + + // attach the "clear" command + //ClearLabel.Activated += delegate + //{ + // OnClearTapped (); + //}; + } + + Padding = new NSEdgeInsets (DefaultWideSpacing, DefaultWideSpacing, DefaultNarrowSpacing, DefaultWideSpacing); + + // clear / initialize the view + UpdateUi (); + } + + public SignaturePadCanvasView SignaturePadCanvas { get; private set; } + + /// + /// Gets the horizontal line that goes in the lower part of the pad. + /// + public NSView SignatureLine { get; private set; } + + /// + /// The caption displayed under the signature line. + /// + public NSTextField Caption { get; private set; } + + /// + /// The prompt displayed at the beginning of the signature line. + /// + public NSTextField SignaturePrompt { get; private set; } + + /// + /// Gets the label that clears the pad when clicked. + /// + public NSButton ClearLabel { get; private set; } + + /// + /// Gets the image view that may be used as a watermark or as a texture + /// for the signature pad. + /// + public NSImageView BackgroundImageView { get; private set; } + + [Export ("StrokeColor"), Browsable (true)] + public NSColor StrokeColor + { + get => SignaturePadCanvas.StrokeColor; + set => SignaturePadCanvas.StrokeColor = value; + } + + [Export ("StrokeWidth"), Browsable (true)] + public float StrokeWidth + { + get => SignaturePadCanvas.StrokeWidth; + set => SignaturePadCanvas.StrokeWidth = value; + } + + /// + /// Gets or sets the color of the signature line. + /// + [Export ("SignatureLineColor"), Browsable (true)] + public CGColor SignatureLineColor + { + get => SignatureLine.Layer.BackgroundColor; + set => SignatureLine.Layer.BackgroundColor = value; + } + + /// + /// Gets or sets the width of the signature line. + /// + [Export ("SignatureLineWidth"), Browsable (true)] + public nfloat SignatureLineWidth + { + get => SignatureLine.Bounds.Height; + set + { + var bounds = SignatureLine.Bounds; + bounds.Height = value; + SignatureLine.Bounds = bounds; + NeedsLayout = true; + } + } + + /// + /// Gets or sets the spacing between the signature line and the caption and prompt. + /// + [Export ("SignatureLineSpacing"), Browsable (true)] + public nfloat SignatureLineSpacing + { + get => SignatureLine.Bounds.Bottom; + set + { + var margins = SignatureLine.Bounds; + //margins.Top = value; + //margins.Bottom = value; + SignatureLine.Bounds = margins; + NeedsLayout = true; + } + } + + /// + /// Gets or sets the text for the caption displayed under the signature line. + /// + [Export ("CaptionText"), Browsable (true)] + public string CaptionText + { + get => Caption.StringValue; + set + { + Caption.StringValue = value; + NeedsLayout = true; + } + } + + /// + /// Gets or sets the font size text for the caption displayed under the signature line. + /// + [Export ("CaptionFontSize"), Browsable (true)] + public nfloat CaptionFontSize + { + get => Caption.Font.PointSize; + set + { + Caption.Font = NSFont.FromFontName (Caption.Font.FontName, value); + NeedsLayout = true; + } + } + + /// + /// Gets or sets the text color for the caption displayed under the signature line. + /// + [Export ("CaptionTextColor"), Browsable (true)] + public NSColor CaptionTextColor + { + get => Caption.TextColor; + set => Caption.TextColor = value; + } + + /// + /// Gets or sets the text for the prompt displayed at the beginning of the signature line. + /// + [Export ("SignaturePromptText"), Browsable (true)] + public string SignaturePromptText + { + get => SignaturePrompt.StringValue; + set + { + SignaturePrompt.StringValue = value; + NeedsLayout = true; + } + } + + /// + /// Gets or sets the font size the prompt displayed at the beginning of the signature line. + /// + [Export ("SignaturePromptFontSize"), Browsable (true)] + public nfloat SignaturePromptFontSize + { + get => SignaturePrompt.Font.PointSize; + set + { + SignaturePrompt.Font = NSFont.FromFontName(SignaturePrompt.Font.FontName, value); + NeedsLayout = true; + } + } + + /// + /// Gets or sets the text color for the prompt displayed at the beginning of the signature line. + /// + [Export ("SignaturePromptTextColor"), Browsable (true)] + public NSColor SignaturePromptTextColor + { + get => SignaturePrompt.TextColor; + set => SignaturePrompt.TextColor = value; + } + + /// + /// Gets or sets the text for the label that clears the pad when clicked. + /// + [Export ("ClearLabelText"), Browsable (true)] + public string ClearLabelText + { + get => ClearLabel.Title; + set + { + ClearLabel.Title= value; + NeedsLayout = true; + } + } + + /// + /// Gets or sets the font size the label that clears the pad when clicked. + /// + [Export ("ClearLabelFontSize"), Browsable (true)] + public nfloat ClearLabelFontSize + { + get => ClearLabel.Font.PointSize; + set + { + ClearLabel.Font = NSFont.FromFontName (ClearLabel.Font.FontName, value); + NeedsLayout = true; + } + } + + /// + /// Gets or sets the text color for the label that clears the pad when clicked. + /// + [Export ("ClearLabelTextColor"), Browsable (true)] + public NSColor ClearLabelTextColor + { + get => ClearLabel.BezelColor; + set => ClearLabel.BezelColor = value; + } + + [Export ("BackgroundImage"), Browsable (true)] + public NSImage BackgroundImage + { + get => BackgroundImageView.Image; + set => BackgroundImageView.Image = value; + } + + [Export ("BackgroundImageContentMode"), Browsable (true)] + public NSImageView BackgroundImageContentMode + { + get => BackgroundImageView; + set => BackgroundImageView = value; + } + + [Export ("BackgroundImageAlpha"), Browsable (true)] + public nfloat BackgroundImageAlpha + { + get => BackgroundImageView.AlphaValue; + set => BackgroundImageView.AlphaValue = value; + } + + [Export ("Padding"), Browsable (true)] + public NSEdgeInsets Padding + { + get => padding; + set + { + padding = value; + NeedsLayout = true; + } + } + + private void UpdateUi () + { + ClearLabel.Hidden = IsBlank; + } + + public override void Layout () + { + var w = Frame.Width; + var h = Frame.Height; + var currentY = h; + + SignaturePrompt.SizeToFit (); + ClearLabel.SizeToFit (); + + var captionHeight = Caption.SizeThatFits (Caption.Frame.Size).Height; + var clearButtonHeight = (int)ClearLabel.Font.CapHeight + 1; + + var rect = new CGRect (0, 0, w, h); + SignaturePadCanvas.Frame = rect; + BackgroundImageView.Frame = rect; + + currentY = currentY - Padding.Bottom - captionHeight; + Caption.Frame = new CGRect (Padding.Left, currentY, w - Padding.Left - Padding.Right, captionHeight); + + currentY = currentY - SignatureLine.Bounds.Bottom - SignatureLine.Frame.Height; + SignatureLine.Frame = new CGRect (Padding.Left, currentY, w - Padding.Left - Padding.Right, SignatureLine.Frame.Height); + + currentY = currentY - SignatureLine.Bounds.Top - SignaturePrompt.Frame.Height; + SignaturePrompt.Frame = new CGRect (Padding.Left, currentY, SignaturePrompt.Frame.Width, SignaturePrompt.Frame.Height); + + ClearLabel.Frame = new CGRect (w - Padding.Right - ClearLabel.Frame.Width, Padding.Top, ClearLabel.Frame.Width, clearButtonHeight); + } + } +} diff --git a/src/SignaturePad.Shared/Extensions.cs b/src/SignaturePad.Shared/Extensions.cs index eae0a86..8747c8a 100644 --- a/src/SignaturePad.Shared/Extensions.cs +++ b/src/SignaturePad.Shared/Extensions.cs @@ -8,6 +8,9 @@ #elif __IOS__ using CoreGraphics; using UIKit; +#elif __MACOS__ +using CoreGraphics; +using AppKit; #elif NETFRAMEWORK using System.Windows; using System.Windows.Controls; @@ -80,6 +83,33 @@ public static CGSize GetSize (this UIView view) return view.Bounds.Size; } +#elif __MACOS__ + + public static CGSize GetSize (this NSImage image) + { + return image.Size; + } + + public static void Invalidate (this NSView view) + { + view.NeedsDisplay = true; + } + + public static void MoveTo (this NSBezierPath path, nfloat x, nfloat y) + { + path.MoveTo (new CGPoint (x, y)); + } + + public static void LineTo (this NSBezierPath path, nfloat x, nfloat y) + { + path.LineTo(new CGPoint (x, y)); + } + + public static CGSize GetSize (this NSView view) + { + return view.Bounds.Size; + } + #elif NETFRAMEWORK public static void MoveTo (this Stroke stroke, double x, double y) diff --git a/src/SignaturePad.Shared/ImageConstructionSettings.cs b/src/SignaturePad.Shared/ImageConstructionSettings.cs index 95de829..6db7a1d 100644 --- a/src/SignaturePad.Shared/ImageConstructionSettings.cs +++ b/src/SignaturePad.Shared/ImageConstructionSettings.cs @@ -8,6 +8,10 @@ using NativeSize = CoreGraphics.CGSize; using NativeColor = UIKit.UIColor; using NativeNullableColor = UIKit.UIColor; +#elif __MACOS__ +using NativeSize = CoreGraphics.CGSize; +using NativeColor = AppKit.NSColor; +using NativeNullableColor = AppKit.NSColor; #elif WINDOWS_PHONE using NativeSize = System.Windows.Size; using NativeColor = System.Windows.Media.Color; @@ -135,6 +139,9 @@ public struct ImageConstructionSettings #if __IOS__ || __ANDROID__ internal static readonly NativeColor Black = NativeColor.Black; internal static readonly NativeColor Transparent = new NativeColor (0, 0, 0, 0); +#elif __MACOS__ + internal static readonly NativeColor Black = NativeColor.Black; + internal static readonly NativeColor Transparent = NativeColor.FromRgba(0, 0, 0, 0); #elif WINDOWS_PHONE || WINDOWS_UWP || WINDOWS_PHONE_APP || WINDOWS_APP || NETFRAMEWORK internal static readonly NativeColor Black = NativeColor.FromArgb (255, 0, 0, 0); internal static readonly NativeColor Transparent = NativeColor.FromArgb (0, 0, 0, 0); diff --git a/src/SignaturePad.Shared/PathSmoothing.cs b/src/SignaturePad.Shared/PathSmoothing.cs index 18601fc..e9242ac 100644 --- a/src/SignaturePad.Shared/PathSmoothing.cs +++ b/src/SignaturePad.Shared/PathSmoothing.cs @@ -7,6 +7,9 @@ #elif __IOS__ using NativePoint = CoreGraphics.CGPoint; using NativePath = UIKit.UIBezierPath; +#elif __MACOS__ +using NativePoint = CoreGraphics.CGPoint; +using NativePath = AppKit.NSBezierPath; #elif WINDOWS_PHONE using System.Windows.Ink; using NativePoint = System.Windows.Point; @@ -55,7 +58,7 @@ public static InkStroke SmoothedPathWithGranularity (InkStroke currentPath, int } // create the new path with the old attributes -#if __ANDROID__ || __IOS__ || WINDOWS_PHONE_APP || NETFRAMEWORK +#if __ANDROID__ || __IOS__ || WINDOWS_PHONE_APP || NETFRAMEWORK || __MACOS__ return new InkStroke (smoothedPath, smoothedPoints.ToList (), currentPath.Color, currentPath.Width); #elif WINDOWS_PHONE var da = currentPath.DrawingAttributes; diff --git a/src/SignaturePad.Shared/SignaturePadCanvasView.cs b/src/SignaturePad.Shared/SignaturePadCanvasView.cs index 18529ed..73f0af7 100644 --- a/src/SignaturePad.Shared/SignaturePadCanvasView.cs +++ b/src/SignaturePad.Shared/SignaturePadCanvasView.cs @@ -16,6 +16,12 @@ using NativeSize = CoreGraphics.CGSize; using NativeColor = UIKit.UIColor; using NativeImage = UIKit.UIImage; +#elif __MACOS__ +using NativeRect = CoreGraphics.CGRect; +using NativePoint = CoreGraphics.CGPoint; +using NativeSize = CoreGraphics.CGSize; +using NativeColor = AppKit.NSColor; +using NativeImage = AppKit.NSImage; #elif WINDOWS_PHONE using NativeRect = System.Windows.Rect; using NativePoint = System.Windows.Point; diff --git a/src/SignaturePad.Shared/SignaturePadView.cs b/src/SignaturePad.Shared/SignaturePadView.cs index 16b31b0..4242c2d 100644 --- a/src/SignaturePad.Shared/SignaturePadView.cs +++ b/src/SignaturePad.Shared/SignaturePadView.cs @@ -14,6 +14,12 @@ using NativeSize = CoreGraphics.CGSize; using NativeColor = UIKit.UIColor; using NativeImage = UIKit.UIImage; +#elif __MACOS__ +using NativeRect = CoreGraphics.CGRect; +using NativePoint = CoreGraphics.CGPoint; +using NativeSize = CoreGraphics.CGSize; +using NativeColor = AppKit.NSColor; +using NativeImage = AppKit.NSImage; #elif WINDOWS_UWP using NativeRect = Windows.Foundation.Rect; using NativePoint = Windows.Foundation.Point; @@ -46,10 +52,7 @@ partial class SignaturePadView private const string DefaultPromptText = "▶"; private const string DefaultCaptionText = "sign above the line"; -#if __IOS__ - private static readonly NativeColor SignaturePadDarkColor = NativeColor.Black; - private static readonly NativeColor SignaturePadLightColor = NativeColor.White; -#elif __ANDROID__ +#if __IOS__ || __MACOS__ || __ANDROID__ private static readonly NativeColor SignaturePadDarkColor = NativeColor.Black; private static readonly NativeColor SignaturePadLightColor = NativeColor.White; #elif WINDOWS_UWP diff --git a/src/SignaturePad.sln b/src/SignaturePad.sln index cbc0973..e71269d 100644 --- a/src/SignaturePad.sln +++ b/src/SignaturePad.sln @@ -21,6 +21,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.WPF", "Signatu EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignaturePad.Forms.WPF", "SignaturePad.Forms.WPF\SignaturePad.Forms.WPF.csproj", "{873AB6F5-799A-417C-8FF3-9AE79C485B76}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignaturePad.MacOS", "SignaturePad.MacOS\SignaturePad.MacOS.csproj", "{F38B60EA-24D9-4046-84A3-A9CE27D380D5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignaturePad.Forms.MacOS", "SignaturePad.Forms.MacOS\SignaturePad.Forms.MacOS.csproj", "{36299905-539E-4B5E-B2F8-669C37BA5EEC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -63,6 +67,14 @@ Global {873AB6F5-799A-417C-8FF3-9AE79C485B76}.Debug|Any CPU.Build.0 = Debug|Any CPU {873AB6F5-799A-417C-8FF3-9AE79C485B76}.Release|Any CPU.ActiveCfg = Release|Any CPU {873AB6F5-799A-417C-8FF3-9AE79C485B76}.Release|Any CPU.Build.0 = Release|Any CPU + {F38B60EA-24D9-4046-84A3-A9CE27D380D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F38B60EA-24D9-4046-84A3-A9CE27D380D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F38B60EA-24D9-4046-84A3-A9CE27D380D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F38B60EA-24D9-4046-84A3-A9CE27D380D5}.Release|Any CPU.Build.0 = Release|Any CPU + {36299905-539E-4B5E-B2F8-669C37BA5EEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36299905-539E-4B5E-B2F8-669C37BA5EEC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36299905-539E-4B5E-B2F8-669C37BA5EEC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36299905-539E-4B5E-B2F8-669C37BA5EEC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 1a974cd02df72b10fab5d53b5341fa36d9b099ce Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Tue, 10 Jul 2018 18:43:51 +0300 Subject: [PATCH 19/72] Use droid 8.1 --- src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj index dc970aa..bede7fb 100644 --- a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj +++ b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj @@ -1,7 +1,7 @@  - monoandroid7.1 + monoandroid8.1 SignaturePad.Forms SignaturePad.Forms False From 190af3c66243591608737bcf9a577e8196f8d0b1 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Tue, 10 Jul 2018 18:49:25 +0300 Subject: [PATCH 20/72] build script --- build.cake | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/build.cake b/build.cake index 0950d5c..57cb342 100644 --- a/build.cake +++ b/build.cake @@ -36,6 +36,8 @@ Task("libs") EnsureDirectoryExists("./output/android/"); EnsureDirectoryExists("./output/netframework/"); + EnsureDirectoryExists("./output/netframework/Themes"); + EnsureDirectoryExists("./output/macos/"); EnsureDirectoryExists("./output/ios/"); EnsureDirectoryExists("./output/uwp/"); EnsureDirectoryExists("./output/uwp/Themes"); @@ -43,13 +45,17 @@ Task("libs") CopyFiles($"./src/SignaturePad.Android/bin/{configuration}/SignaturePad.*", "./output/android/"); CopyFiles($"./src/SignaturePad.WPF/bin/{configuration}/SignaturePad.*", "./output/netframework/"); + CopyFiles($"./src/SignaturePad.WPF/bin/{configuration}/Themes/*", "./output/netframework/Themes"); + CopyFiles($"./src/SignaturePad.MacOS/bin/{configuration}/SignaturePad.*", "./output/macos/"); CopyFiles($"./src/SignaturePad.iOS/bin/{configuration}/SignaturePad.*", "./output/ios/"); CopyFiles($"./src/SignaturePad.UWP/bin/{configuration}/SignaturePad.*", "./output/uwp/"); CopyFiles($"./src/SignaturePad.UWP/bin/{configuration}/Themes/*", "./output/uwp/Themes"); CopyFiles($"./src/SignaturePad.Forms.Droid/bin/{configuration}/SignaturePad.Forms.*", "./output/android/"); CopyFiles($"./src/SignaturePad.Forms.iOS/bin/{configuration}/SignaturePad.Forms.*", "./output/ios/"); + CopyFiles($"./src/SignaturePad.Forms.MacOS/bin/{configuration}/SignaturePad.Forms.*", "./output/macos/"); CopyFiles($"./src/SignaturePad.Forms.WPF/bin/{configuration}/SignaturePad.Forms.*", "./output/netframework/"); + CopyFiles($"./src/SignaturePad.Forms.WPF/bin/{configuration}/Themes/*", "./output/netframework/Themes"); CopyFiles($"./src/SignaturePad.Forms.UWP/bin/{configuration}/SignaturePad.Forms.*", "./output/uwp/"); CopyFiles($"./src/SignaturePad.Forms.UWP/bin/{configuration}/Themes/*", "./output/uwp/Themes"); CopyFiles($"./src/SignaturePad.Forms/bin/{configuration}/SignaturePad.Forms.*", "./output/netstandard/"); @@ -94,11 +100,14 @@ Task("samples") if (IsRunningOnWindows()) { MSBuild("./samples/Sample.Android/Sample.Android.sln", settings); MSBuild("./samples/Sample.iOS/Sample.iOS.sln", settings); + MSBuild("./samples/Sample.MacOS/Sample.MacOS.sln", settings); MSBuild("./samples/Sample.UWP/Sample.UWP.sln", settings); + MSBuild("./samples/Sample.WPF/Sample.WPF.sln", settings); MSBuild("./samples/Sample.Forms/Sample.Forms.sln", settings); } else { MSBuild("./samples/Sample.Android/Sample.Android.sln", settings); MSBuild("./samples/Sample.iOS/Sample.iOS.sln", settings); + MSBuild("./samples/Sample.iOS/Sample.MacOS.sln", settings); MSBuild("./samples/Sample.Forms/Sample.Forms.Mac.sln", settings); } From e702bd36e947b5ff2b5e6d12699cc23f5c1fe49b Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Tue, 10 Jul 2018 20:49:45 +0300 Subject: [PATCH 21/72] Add project to mac sln --- src/SignaturePad.Mac.sln | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/SignaturePad.Mac.sln b/src/SignaturePad.Mac.sln index a5d7bca..7ccdcca 100644 --- a/src/SignaturePad.Mac.sln +++ b/src/SignaturePad.Mac.sln @@ -13,6 +13,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.Droid", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.iOS", "SignaturePad.Forms.iOS\SignaturePad.Forms.iOS.csproj", "{B12D20AA-0EDF-4903-B385-BB8090848532}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignaturePad.MacOS", "SignaturePad.MacOS\SignaturePad.MacOS.csproj", "{F38B60EA-24D9-4046-84A3-A9CE27D380D5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignaturePad.Forms.MacOS", "SignaturePad.Forms.MacOS\SignaturePad.Forms.MacOS.csproj", "{36299905-539E-4B5E-B2F8-669C37BA5EEC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,6 +43,14 @@ Global {B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|Any CPU.Build.0 = Debug|Any CPU {B12D20AA-0EDF-4903-B385-BB8090848532}.Release|Any CPU.ActiveCfg = Release|Any CPU {B12D20AA-0EDF-4903-B385-BB8090848532}.Release|Any CPU.Build.0 = Release|Any CPU + {F38B60EA-24D9-4046-84A3-A9CE27D380D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F38B60EA-24D9-4046-84A3-A9CE27D380D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F38B60EA-24D9-4046-84A3-A9CE27D380D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F38B60EA-24D9-4046-84A3-A9CE27D380D5}.Release|Any CPU.Build.0 = Release|Any CPU + {36299905-539E-4B5E-B2F8-669C37BA5EEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36299905-539E-4B5E-B2F8-669C37BA5EEC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36299905-539E-4B5E-B2F8-669C37BA5EEC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36299905-539E-4B5E-B2F8-669C37BA5EEC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From fc504dab6beb11af9ab5269bcbec215e686c1035 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Tue, 10 Jul 2018 22:24:20 +0300 Subject: [PATCH 22/72] Sample Forms MacOS --- samples/Sample.Forms/Sample.Forms.Mac.sln | 68 +++++++++++ samples/Sample.Forms/Sample.Forms.sln | 68 +++++++++++ .../Sample.Forms/Samples.MacOS/AppDelegate.cs | 56 +++++++++ .../AppIcon.appiconset/AppIcon-128.png | Bin 0 -> 11775 bytes .../AppIcon.appiconset/AppIcon-128@2x.png | Bin 0 -> 28869 bytes .../AppIcon.appiconset/AppIcon-16.png | Bin 0 -> 806 bytes .../AppIcon.appiconset/AppIcon-16@2x.png | Bin 0 -> 2055 bytes .../AppIcon.appiconset/AppIcon-256.png | Bin 0 -> 28869 bytes .../AppIcon.appiconset/AppIcon-256@2x.png | Bin 0 -> 80048 bytes .../AppIcon.appiconset/AppIcon-32.png | Bin 0 -> 2055 bytes .../AppIcon.appiconset/AppIcon-32@2x.png | Bin 0 -> 5107 bytes .../AppIcon.appiconset/AppIcon-512.png | Bin 0 -> 80048 bytes .../AppIcon.appiconset/AppIcon-512@2x.png | Bin 0 -> 244170 bytes .../AppIcon.appiconset/Contents.json | 68 +++++++++++ .../Assets.xcassets/Contents.json | 6 + .../Samples.MacOS/Entitlements.plist | 6 + samples/Sample.Forms/Samples.MacOS/Info.plist | 28 +++++ samples/Sample.Forms/Samples.MacOS/Main.cs | 20 ++++ .../Samples.MacOS/Properties/AssemblyInfo.cs | 36 ++++++ .../Samples.MacOS/Samples.MacOS.csproj | 106 ++++++++++++++++++ .../Sample.Forms/Samples.MacOS/UiService.cs | 31 +++++ 21 files changed, 493 insertions(+) create mode 100644 samples/Sample.Forms/Samples.MacOS/AppDelegate.cs create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 samples/Sample.Forms/Samples.MacOS/Assets.xcassets/Contents.json create mode 100644 samples/Sample.Forms/Samples.MacOS/Entitlements.plist create mode 100644 samples/Sample.Forms/Samples.MacOS/Info.plist create mode 100644 samples/Sample.Forms/Samples.MacOS/Main.cs create mode 100644 samples/Sample.Forms/Samples.MacOS/Properties/AssemblyInfo.cs create mode 100644 samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj create mode 100644 samples/Sample.Forms/Samples.MacOS/UiService.cs diff --git a/samples/Sample.Forms/Sample.Forms.Mac.sln b/samples/Sample.Forms/Sample.Forms.Mac.sln index c160445..030d86c 100644 --- a/samples/Sample.Forms/Sample.Forms.Mac.sln +++ b/samples/Sample.Forms/Sample.Forms.Mac.sln @@ -19,6 +19,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.Android", "Samples. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.iOS", "Samples.iOS\Samples.iOS.csproj", "{2142B859-21E9-484D-880A-26AD708569DB}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.MacOS", "..\..\src\SignaturePad.MacOS\SignaturePad.MacOS.csproj", "{EB7F9F29-7348-4DAE-B7E0-198FF0E14474}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.MacOS", "..\..\src\SignaturePad.Forms.MacOS\SignaturePad.Forms.MacOS.csproj", "{C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.MacOS", "Samples.MacOS\Samples.MacOS.csproj", "{5131B6A0-D5EA-4EB0-A44A-7538192EC275}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -131,6 +137,68 @@ Global {2142B859-21E9-484D-880A-26AD708569DB}.Release|iPhone.Build.0 = Release|iPhone {2142B859-21E9-484D-880A-26AD708569DB}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator {2142B859-21E9-484D-880A-26AD708569DB}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|ARM.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|ARM.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|iPhone.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|x64.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|x64.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|x86.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|x86.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|Any CPU.Build.0 = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|ARM.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|ARM.Build.0 = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|iPhone.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|iPhone.Build.0 = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|x64.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|x64.Build.0 = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|x86.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|x86.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|ARM.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|ARM.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|iPhone.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|x64.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|x64.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|x86.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|x86.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|Any CPU.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|ARM.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|ARM.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|iPhone.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|iPhone.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|x64.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|x64.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|x86.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|x86.Build.0 = Release|Any CPU + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|iPhone.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|ARM.ActiveCfg = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|iPhone.ActiveCfg = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|x64.ActiveCfg = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|x86.ActiveCfg = Release|iPhoneSimulator EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/samples/Sample.Forms/Sample.Forms.sln b/samples/Sample.Forms/Sample.Forms.sln index b8fb1a2..8849765 100644 --- a/samples/Sample.Forms/Sample.Forms.sln +++ b/samples/Sample.Forms/Sample.Forms.sln @@ -31,6 +31,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.WPF", ". EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.WPF", "Samples.WPF\Samples.WPF.csproj", "{497C984A-6F4A-4522-A043-E3AB050670A8}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.MacOS", "..\..\src\SignaturePad.MacOS\SignaturePad.MacOS.csproj", "{EB7F9F29-7348-4DAE-B7E0-198FF0E14474}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.MacOS", "..\..\src\SignaturePad.Forms.MacOS\SignaturePad.Forms.MacOS.csproj", "{C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.MacOS", "Samples.MacOS\Samples.MacOS.csproj", "{5131B6A0-D5EA-4EB0-A44A-7538192EC275}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -407,6 +413,68 @@ Global {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|x64.Build.0 = Release|Any CPU {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|x86.ActiveCfg = Release|Any CPU {497C984A-6F4A-4522-A043-E3AB050670A8}.Release|x86.Build.0 = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|ARM.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|ARM.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|iPhone.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|x64.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|x64.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|x86.ActiveCfg = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Debug|x86.Build.0 = Debug|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|Any CPU.Build.0 = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|ARM.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|ARM.Build.0 = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|iPhone.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|iPhone.Build.0 = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|x64.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|x64.Build.0 = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|x86.ActiveCfg = Release|Any CPU + {EB7F9F29-7348-4DAE-B7E0-198FF0E14474}.Release|x86.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|ARM.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|ARM.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|iPhone.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|x64.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|x64.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|x86.ActiveCfg = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Debug|x86.Build.0 = Debug|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|Any CPU.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|ARM.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|ARM.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|iPhone.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|iPhone.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|x64.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|x64.Build.0 = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|x86.ActiveCfg = Release|Any CPU + {C6FA17D7-0F22-49B6-8C17-C6AE0AC39489}.Release|x86.Build.0 = Release|Any CPU + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|iPhone.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|ARM.ActiveCfg = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|iPhone.ActiveCfg = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|x64.ActiveCfg = Release|iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275}.Release|x86.ActiveCfg = Release|iPhoneSimulator EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/samples/Sample.Forms/Samples.MacOS/AppDelegate.cs b/samples/Sample.Forms/Samples.MacOS/AppDelegate.cs new file mode 100644 index 0000000..01690dd --- /dev/null +++ b/samples/Sample.Forms/Samples.MacOS/AppDelegate.cs @@ -0,0 +1,56 @@ +// +// Vladislav Antonyuk. All rights reserved. +// +// Vladislav Antonyuk + +namespace Samples.MacOS +{ + using System.IO; + using System.Threading.Tasks; + using AppKit; + using Foundation; + using Photos; + using Xamarin.Forms; + using Xamarin.Forms.Platform.MacOS; + + [Register(nameof(AppDelegate))] + public class AppDelegate : FormsApplicationDelegate + { + public AppDelegate() + { + MainWindow = UiService.MainWindow; + } + + public override NSWindow MainWindow { get; } + + public override void DidFinishLaunching(NSNotification notification) + { + Forms.Init(); + LoadApplication(new App(OnSaveSignature)); + base.DidFinishLaunching(notification); + } + private async Task OnSaveSignature (Stream bitmap, string filename) + { + var tcs = new TaskCompletionSource (); + + NSImage image = NSImage.FromStream(bitmap); + + var status = await PHPhotoLibrary.RequestAuthorizationAsync (); + if (status == PHAuthorizationStatus.Authorized) + { + //image.SaveToPhotosAlbum ((i, error) => + //{ + // image.Dispose (); + + // tcs.TrySetResult (error == null); + //}); + } + else + { + tcs.TrySetResult (false); + } + + return await tcs.Task; + } + } +} diff --git a/samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png b/samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..d114e15572edd287dd3eb56fb3ce41d0a560dabb GIT binary patch literal 11775 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 literal 0 HcmV?d00001 diff --git a/samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png b/samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3b98e88fddfcd6e5bb712a158760b0f9a473d5d5 GIT binary patch literal 28869 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 literal 0 HcmV?d00001 diff --git a/samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png b/samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png new file mode 100644 index 0000000000000000000000000000000000000000..02bd0f42aab5991cea3e826daf3394bd30800ae9 GIT binary patch literal 806 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 literal 0 HcmV?d00001 diff --git a/samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png b/samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b9e2163bdda24cc3fbdaef66659fa12a07b29a2b GIT binary patch literal 80048 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 z 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%0AKDgL0*tMBNWe_4P)+EA6&2*a6()IOG z;aG3}=f|#asIFkg(^Gk)vimg9d06j*zXH@0Lg}!#4KT9sny3NpJ65wXQtytm!fm?f zPw$0jluh$G*j67iIJ}EebP=ZDG55LI&e2CthscHk)XQ(M8N+5}|U+U=me%QQ8>HpWH!=4>W| zHPX^3DQlj4Jm4#t3)JZZ<1p`>2jjZ4p6t!dv`z}G1eqcVYNaqM%-W)NNB9v)sDB;K zo=y@$)JElE=#;MQ^ZUiLjh%H-q)Abc0pG>Rd$(Br^gD|=eiuy_+SW%Fw)q}F`FSwd zL16-+&mJ12%&ZDMP}u2pn(R_NZzoh!Af`4kp89x2}@v{nII)?N!j#->B*r_&k zZL64=N^PPPpDqf&y{$VPMEpNp9%b@BYNHkN2;PC0SG2{q{N##7JbY^W#SiVH{BM-| z2oX=df6>mp{^lq{?N9OCoy7xDv26Nk8CaYYF)fshcxRq*cG}EUp8AC)ecVNIU-CBp z3aIO*Az`{`$AO+Ct?LWEgM=C9yhu1>rO0)*e+35r`u>(4lzugi41~bH9o0Tqa((kBWB*Z~5 zC%4Y%uKX8DP$bp&zCL=xHbFR%)Mq1Avp&gQH4WH$;11c3?|i!UG2Rs}BQwT!b$k5~ zgC95djRP|(7`IQ=K)hKZzZg#T0GSE%8S<5HIMBej82&il)Gr`D1c$mu?oYN`Mx&2%{-@ZkV7< z?q^-*3dc=aJPRzb0)mquWn;Kqe%3nxJ2x_iKCaz40XtQL`Y}{xg^Tj|;d<+`N+`{g z$o`e#bbuHOs43yJJ?Ju1M5Ro5SLmn~bCICFM4ybn1I0MH7?m`vxM(*N1V|L+C$7%sT}zdT$i?XUs~8;=YoTiEBvsI}ST+uga&)lvCP|3y2OjKgdzOM&!Y+UT<=SG^-W+7t(N8K~eLwuvG@!tP_WInUKW$y0>s z2ytCjfPkL6KirOR7>4bbdNbWpYvf}N&yJe_^ogk7AFL8Q_#2o%?b&>qjds|MAXE|R z233&>iA5NNNdDCjMtfQvSh&4Kooq3&=>L5R=sZgf>U}Dl0zl}N@dNcn8m+Eq1&jCv zYzext6(tP2Rh(95Z&b-7t>xAdzTZ7isJnVHU$6A zoxz1+o__G&mR^-~cNtR3faOppt)@Y&VN`Q#-^lhdD8oiVz_gj5*6R6)&BHENS1eD> zr%`w-1)x%BxqHjhUAI&A(N(PK&)y{PWudu8+gGswV;H^xZw&j@Z}Si~^XwjV#?@U# zz*lxkx*Rpjok)`bj+N#WFwd2ss#AVorsDzuXId&sC9;KKZXw zB(EQ6pvA}u^iSTeDhVrNf3`Caj62S8I@w_fS9k2# z5r%zojL*qFHR%DS1`9X6txXcsAR1h0%I09n+E}6>>9_hptD{f&Wy)2-tW+UxrEtc1 zQ)=Hc5e?q#Drz6u3y1deVlU8*DTc(HNMac?!uJ7I{`s3SzAxHnyQs$9hCXHgO8-C) zUWF2f)0F9tTOHXL3T5rQ)hae^yXKiI_~{|xKt=FLuw%QGJoAa}>5XNELWIN!ygise z(d22a^W)vm0vH8(^~jT2>a0Oas`X9^y))^}Rr2>&{T2yqj@$)PdR)qp(_lOvUyAXb ztNYmy8c^A@hq#DBG^@Hk3RzH!1XHcR&Pn2R&#wt|uDRzjS?6AI!HrVSDIt#z23b2p zbwbndBYy`TJIeci>7vGfD~G1e26fg4%+EmNV&1ZC?p{uGw!`YEN2C%{CNtdxsrKfg z5C(v^ks5LMd)i`IcWR6TBEe9t&Wb2z0h&<&On+)B-ID&`D_ z>NG&AtD3^-vfDS*Z$hsGdibeB)AiM!%lATv?xuNHZ}k#7w2JzAlOVd^_+zYmr!vkQ zNX!iD&OZ(DnFOuPH55VntLH6Q{WKN zCkq0I0-MbJK?Hwd7U`w_u+m)0Z&h_%E;F~~)OB2vs(_2zq&^i~s^;33R8OJBXj{bZ#YY!*8j24m=>0Yed}ejmF{I zN{f;4%#uHH)XxlqYh0O>e^K1@WPA`TQ|M3SzdzIqK2_ zobkL-0D90;2!X9Fj*`l@sS*eZ1o^h!c3MlWjV?&o6|7P-Ia&@>=B`34is`>jR0CjU zl@2O?T1GT(;4;)sejWY$hlO2slEc1U@LAcC`qUYfvDH!J#k|Mt+4&hx`ooT{tokbh z>;X$xiuMg=8o>JKnt=QO@orY50DPwY-k|-(C^zPwm1OH@;M|Gi2NfQTFhd#z1drnnIfkddWZ|*HBLpohvfvXp z3jh1HVXXA31nV@??-W>9s1`15D`NT%$b=-0 zKP^JQHt>B9iS9+=wZ!A29tL?{%w#F4``Md&Q*R2=8zP9f#Ulk@{-`|2%c3OM`!3u0 zMJ!7>Xu9WbBukqfv>|#a%q8*-Ul>*!Hl z?r@z3x+3ef=Znor~kqm&$)wEvT`AJgJnl22ri;Oe|`p z<%KWoGVke>n7lGR50q}pm@8hOUDo3D&@Bi#Sh)0WY+MvN@n$~0a5bxVDqGdgbz#)- zd;o#EMF@#Uvv1eu^X{h;F=92Lo=`O?Y%;jmSDi5^0#pP{_$q9vE;k zMk8(>^K{l0*;@2v3op2+$aZ!knvwd81i&?7Cv`A8)?Y6_?!A$RYIZ^T9WQ69NIj-APtTbHGYBxlmZ+cJ!C29mK1NZ@ z#NPSlTyB#89GBn1aJkiy5CTFdP?H3;wc$fD8~kNq%nemq;TH_|mleLCHk$8^=C|)k zCoB6YAICt?!oUC~vVf+gi;KVBsN%upWUaQ0&zN`x77M8JNWqcGK)eV%MOl?_;tG!< z8%}rAmaw1!rg2d*^Dsk%!{^fWe43W54zmvHubq6klcGdn3}D|5k;13VXDEX@n7S#8 z+;{nAZ4&_2w@cll0Op={KYhD?pJ3&Im?srlbz@=_Dy6l$@9m-<@z=07w>7=ic?Ca+ z2QRDFIE!~3O02%Fhl_W6d&+VV)5RbT?x(k?$!sw%nA2cYq?>;J2QW%p;M)@`LdQj8 z%_6j#XvFx7RgfM>$SRvkK{E2F5?B42SOr@}ZL!wOWVy>ebn8`;wO5YUyBsc*A&LAa z#LtCz>bKA5m?PAyxP(SiwkO0OL!H{K_*wu21YyD49Y}C&Zu8e4IS0C27p9EcM>W^@ z=&cib8A9zecq8(%YT{?7aRmv;*e79;7k)C&7rt!)XPAa@mL1y)BH}^<7Jp_evckqTKK9Opc4Ba?TQ_ODlx|0|=gripF%_ zs(_*yjKgXl9RRcSVL4Y4LPzS8J3=Nn;+VFE*Qwl&0{ve}skT7iGw91-x9h%V9{Uve zVI`RFq`=G>BM6!6IM-GCEVpR^P0%ow(H7QA%)M~$qzoHGT```pEKRdqF*dWNa|JjS zlVq6Ma5rVow3fstA5`~0j~tk3DwOHOuB!$kuxdvQ?-F9cF!V7DN&Py=H{|2he;jpH zoHM@pH7Qsb=;-=yP4Lk$Av@;|8ds4s!$mG){XrL>Hj=a~*FbV;rHbBY=~J$)eQkf@ z%p``vIo*j?7z;ZJOxG*=)gM8l!3c!AVmip4E3z?K0l$5e^wqrc(H(klyJF%b;|FAm zjR%B^m@Ph^Om@DofMtLxuM0Z7(5yUTW#f5neG@E%$nw|g*4<1JWxd497*Ol&{`YqS4JQ`GGLeg2@JsbW?M-swqL=#VH zl!Ah4#@35eLg#y>=k8pd@(^9GQi#_32Qf`QbWHa*xV&^yo}O7E1~PGDT;m*ymMC0# zz&R-~pX{b)7|JG6y<0AxqBH{@;I{{*5!0)ljO-m&Kp<(#*4pKs9_F(_u#@0e6!wEt zD7pr5HJ;o@vKjIV=%4#HQVJxg3aXNSPP8*Ru`=NhT@<|E;J84YaAU`@8u&x76_)Vi z7I4N(jN3Bn>y4k3zqa!q@G5pvEX1aT;f^nb(9eNtVM@ZZbLVxA7qhP?Zoi%QnvSC@ z?|<~}GyU`>p&>u-?4<@kk86dk9XWt}$UKfMNoJm_)mjV|bc!1}ssTVW4)_;&f1;5RaXGJA2ELYhry<6r)+YI_36(ijg4@Dl zGsCd4bJt7D)=v6nb|jGOnejH!tW8Tq{>723J3mr+W1dU3WbM?* zIaTFAAkF$h4Rf$<51gGIP1t|{DSxgr{`I45*#A@8^V_v0vrQ^zv$mzQk8_`dd%;)w zE>+-17Pkg_W78iQtOQwV|JeYKz$;|n6S%r639SgZtp5t3w>j#V(B&U-4O=NDUpfD# z=}+>P>1NQI(5K?(y?e>aIuX#(Ke0|j|McaH`KdXa7M9)Z77|W|xhVVZ@5GLcoDQ07 zGh%V{L9$IUFw3B>b+dQ1Bo>0~F%D#`f^jV4wPfAt+BX}mUYAx0@==35Xk5!54LNuT ze>(U&dm|eR$S(QfXEyqJ!EcCdAC8gI{(yYOY!)+|nw2B~WtS0x!f=21raR22;iMTK zE=%E5&(F}^Ff6@Z7%jXl8Ye!4@HzE(dAB#a zn(Is`1jLxls>>xB5=$Cuc+_$~=zVfVR@pmZl*`$w?VYL3J@GP>8zNe?I z9M@bQ83~uhWIGdKlY>9zx^fcF`M39Qk@-nU9$Mv#g7g}FqV=aD05)c!_20e!dYi0F z_qBBD(|DcDK$6B3TWNyK!c_BIX^k!lJ!D}Qeb~&00<1Zm6%hJ)1AwsUYKw*>v-jTY z64l$0Y`9*xEc^)Ae{))389&erksQW@UZBfErmwZ)jrBN|U!Gzt#$y&TLLGyJzDlM0 zI#oS1q`~Xi(BMJGFX7K#Zc6X;q3wg|e2OS&9H@Z)dJg_3>&YcW#v09uf8FK{@Lxq| zAu@I+uwrF)k|hL1`PVvaH5-2oEH)e=HPW8yo}I4<-Ly#ijbKbdh5jR<`HfUW^{sA~ zmD-$i2moxD^3h|AEu`f$-#-Oh@VN=r%v!_Eu(zk-0qe%?V@a8iah!nMaFHwC^?O@? zZ`SPUyx_b*nyfn970)N~yLW)%nE{af6cf+G!@y4QEw*KIbe(tImZqD%gFI{8_)MtR z|34lc;7<`Dfr3nk$b}uJ03_PWxpmjQ+lcNorvTo7U!|&Q6*vq}B3n`=d+NK=RNGAE zqMmiVw^K{u+us1N_n{yCgsmxwU2`SsMlG5qlEnEaXq4>$at77;Xte4~WxnV0Rr1d3 zSQPQY>Jz0#b5bMGcqRQ|WoID+160idC`?&P=2rOi@kcyEC$8| z1qet+r}@3*yH#T&kV2fg+1Z-t$)zSCS>+-Vv+^{oLS!Bh`s&0*US|L$rXWacobMq6 z0=no=E|-n2()EI`c%C|B8$d$KFaLVLOvP>kW#8MJA!+^5F-q zIhzfQiv=4hDp~lOLs#VRn+Ef-a(!(hem8F@8kQJ_8WseKsRA{)TnU?pA7^^ZZV=?9 zKHn63^aMVOV+@5P{uCtdr&KS?l`L<6Z3CAg1G%~WZSnB|j>Wjvo_VUQk+i}gHm}@3 z5I`_^1}iA-IRcrzo2lWR%zyyA^mSR(CtS+Bi@x@XZ$61y!HKOleURbU<(iOt^p zmrTJiXJO)R=chRtvoO3R;Tc;1)B7!3xF@Pqd(F^&xqrRCSNEf|=_>XJ6R$k5UP=QE zE&D~ZgtrImThoAdQ7z-YEp@@5g)Q3+@wJm%-~#?}pKaZlGUmO@%DcD~>=y*1iHCS> z)%pv|aw)pwwcRfa$9U-}n zH!59}0zew}mUf5-b&CpqSh{H{xj;WE!e&^iT=_h`q_Ts*I5K7JCCQI>kSkWvR~>pK zKrA%;hK((M_q`|rP1M^bWLJ>iZS{!3t7)~GobWuUM7?0G1Y4~J*KgMF;(~Zt{ZtbMR zBNck?S$ac=ayAMR%Ohts1QMOCN0#)-`96EbLC*6cXweF{5S7BUV;YKjZ;M4cC(z{h zHODZ2r!gW8^lr?&t4-dGLXjhBqHZHQR$b(eG-}(m@fGwp?~z}%%k9e{KXsFmHzj%_ zb-NAj1en1oGGAYtVzT6xc>TLG!z9<{r`ZdTmUnj}y*@_M41PY=c;%`Vc;boG>f`M0 z>>XU+Do)-se*X}veqpAo@YQ_LZbFyCuN$J5aJ~WpfOODUDfWAEwDz+D&T~FqdM~$i zW3Qj|`}e3%DTNFGKV$(+HYWcu`^g?X(X?|YL%CNS#-Kxjr4MRX)d)7QR{m{=9o-iR z)IpU8V`#l1$v%Bm3d}<)8{qPCHz51>^y8z$phRJR-2anEhfROTV=2-W3Zo zf0|IoSV=a=_*E7}Kv7R}^qoGPpBf0V%<|8T%S?E0&h-;_FokE&S|ONRSRygpK&_w19hni`EYpWuavaG<5HN%g?jJ zbz|EHkN?@Ku94vQ?2o-;GIxG|YNwLpaV1{Q6%84TBF7(w!kaT86e$}F%8XooX2L)8 z034i{v{4nbox$FPJae@GU^r@Q@2XAHbemYy@S)jN(5k#tI;L1L*)UEnjf+{x0RId= zBD;C0JLHeL_-OlUFvoD1RL+&Gc8xzOWD7C#Tf=m#-o^1%@!M2?KlycBlERc=8Dn&m z`9v!M=b`;(_41!+>`?HmG0d~equ1At6~dfPiTv~d)$46c@l( zm6Z&q&EQL7@KM*{lwYzl?)O_v|^ljY6Hom&Zwp zb{$PIwR(W4jKJMn=`}7A*!y13?$&;0loDWC9Om+cs!kG0WM{5d=sRXtcD~c|8UDGf zaph16NQuS9d4%YAsST@ZkJ%~a_Wm=dl&|he#r3CG>Bl!l$$pw?)tgU&;hjQmeWn{? zqnamC2_5*=t0y!NUzQHLsRTO30lBww8DC-O!Z;&H{^WFmz0@E%roy|bZpRh}M&XB1 zIHRFEm>hT7cK}J&+x187kyP{xsKq%9bmO8wDR$mF8=k%c3pGu4x0OK23CEcC7XRxo z5x#6=1+BFSW=qk*if+0Lbk8a>=y8|(M{EXxVVlcCAGg7&|87XytuuiBQokEf<09H z@D!0iDidjpSx&^X6=UW(al!NoS>MV>XFk~v`?Oty&gv)$Ze+rzoKPnC!R8v4(J(83<<&bVHT61UhV^{z z#_QaHF*^aVfgy6@!eO%WZaSZowf6MJ?9UbIoXua)BmLuRM^>_78hqW)WRW^oi&zvH zKpHI~P3WRnxS0Ygg+~yB^I$U{D=7ggaIJD;$}qw6Iw5Ga%WCx$p{%C~$V?az!`g-$ zARcMt-OII`!VULPq^0X>7L7b#f|lpW68;>-j!;8KQ_~5pLUIq`1Tt9jX4>Qs{8OX zm`K256Nf>o#c)ONSvmEU^eTIq=3e{H%7n_9F!Z+WZ``4I?tSbyHoKk%h)XvFxw713 zU7%WseO-Gj5l@ZgFfJer1mx>kmkWqaOOhWcW4696yh{WKF zI&XcMoUf*?1o9ik)fr_+bb?8D&N5gM-#rxkc{=`l-1#Z@39W19{XAUOdhkTfi4JFb z+-9Uzrnr?9C;y%7MDALIq5=L}XeIzsF;IBdvv%Qjs_EpDomwzw_q-x0o z#e|6;_%-{(f(+omw!&(kr0QT;FMG;lu^uicEHMP%zC5?!d~oh ze~>F7@Fvr|PJ?$>ED2*;f+3zNPu;3eA`RSGPdH%~6X^bXZ-d~5*4_65I#PF1WQl** zV+Z-`FFZc=R9!My$hHke!>_O>A-aD4YC|itDmUp&?_@s ztFQVzN@$dpDh?v!qMw!n{39D4j(Ht~zAI$<3V(I3nr|VDSr6 zw~F4A{ygK6mFh(_x7Q!&-H%0Y~io>2v)1>NT${9s(i45q`o@Ov zy|R@KPR-}62;@(EU3mis{UZQwEBE~*)8_a6^Ujysmc4Ki1Ertu?Z40PjNX^o`}rhc z?@98s73wc(mtv9NCkFq9#wteN6!YP!cMZ_@)YG%Y|GG?EuMDHOudqha8k!o?f*jW) zD&!#U-7lH0V)Pl(BsZTM5?tRqM)zEL5A~ddx~)z&eqtjN5TF?*@UdLGb0DO{(Rny3 z%k$vwrzKc*PHY$>n=1UA9T*DorCP5qg~e?sRH>>8o#+R=YuOF)SN2?RX zg+XsmlEC$z!46ltH|=sAR>~WX#ONmp{ugGLuczLR;MZUc!AC2v-+T0?3dW%gvf-?2 z$SW?JEADbsY*fliCY|4I7L&#_#a6qdlkCxdCz;zg@fb5C)2!Z01d5+ODIAOrBffa? zuKUjoQK)W!l;#g7P8Mg=So(-l{SO|e<`8&;HYo>ySLw;pjTQa=N9MEpuF(_fCBb?A zm$irF3{Wst%QxqRD#2;evms&ucu@FwGP-OLm5kx1p+$XtNMN=~u;n`#Aoj<2D-~cf%j{0P>yF$h zs*=;`d(?lZj6UkApWlLU4uSztp@~A`&?}6-r^J<<(cSp>%tiqr5~&Vm>))JAvO)i4 zot@!@pQXH|6$=;Nx=pSByR0~;wf9luKr4-32+-LcCW~~Y=BlwhW}62=_X5LYDQK^- zq$%c!0BHfnN(5u`D9xS6a6$7wyk&)Jge&e{NbgLrQngZ>64qF$5!mrLKAr1YYk@sdRRJ~ z9)##^HG9i@bTolK}l4v2ZPtiTcPF0YiiveY|2U;AdQywEeq7$Jl|v zO(Vp%WJYWe7TBC{GAAeL5k3#PCubUjGa)E^20wc1yU&idHvK^urJC;2d-vjMZq9VT zH{BZ8(UB$t9^&mk{9RQl&2f>O8b*A8!O3#ATddcW&BuwAmHYqdZLf5lAk~hNP*NZu zD(f{;uH(VqDP7=mE&Puf^hXY!PoeUX}a$ES_<4a>yIl7n!IP%)T zWfVaqx5wXOfZ>h?PexbI6-a@`h9f=5JhH0()XPY(V&mv=u&&Itna40#MXS+(<~d!1 z3tF?s|D;*1R7~{V&-!sT#ewx0=YcC{P-IW=PeIzh3tEUZs;Wo)C&Muftv09fo~CHA zl+svjiW7zr`1_=?6LERG<^jkf6BAMetL7ox_{Ka0Ad{Z8Fyr{k@*91&ElmN4UonBz zHTZvsQm}b;R$^;A*uIv1ozcX$tl0hUI9b6|#fP5P(lCNCjq6bveJwg{fOzs0SwL5(zL0Utl%kj!QHhM_ zfO7z4L?EpS>{Aj0f&g0IMBQJsg|d>yRvHa3XLz5YF!Fsnmt&We#lm#*WAOyvD4VEd zol7BykCAeI`H9+|>?j6A+OphD`(Qm4^alwzW(eyd#P+F4ks|E=2lv$7*bCU3BRkzE zy8S<#+-t%o0le7|E`jXNU(Q7o z5)$BTx{?JSU|bHY3`KdQsUumoAht7-n&UV-mUOW{jWu938u?k0QshDCFdg~u9CvL! z*+i|A-#p(PJ8te3ixdBMNOU=TP~i0A_f;nnyZI$B-${i|uJ76lNR(Pwy2Fz?Wr0+4 zrOHp?fB+?MZl*%Ys|hjrJn#e^wJ3S-gU-R7Y5mvtz%LA%M2zpsC`7aIInJfaj-KK+ z@0}Byz4vz~Cb`RZ%%>Io59fCCUhm{9`ClxdmbS3)NkTvvAG+R$HRFMCXP!Au2mTie zYkm%f{)zoch^N-cwarB!ZyfG=i+L~M%Bano@9-^(NmkM@HB~SJ3yHzwl8_ms<4e>mlawTSn+{T@Ow1WvGGbH0}bkK{xQH28E=l@mV z*Yr{T7M5AjQhX%+r>GAov@-^+&oz3)_N*e4UL#&9zXS!H(# zz29~X_xZfwXXcbYK}6BeHH_^`{~kOY&>04w##vE)uampZ0)&JO6iet7T?ZJ)qhd{5 zSYw=W`us9|r*5DAU8uSzlg}YAyO91D^%kBZSLV0iOrMnVeQ+mS149jH437xR*;0!YNAuD2AFVEX9%$E0{ zj@-*y&@ix5j;+Adh_r$Qh|E1ABd#l;nC&6sKZUfh7M&?aprg}s^2Blsf~gb2^7*O7 zj1F*3ujtDh^D@tKd64hLml_RT1e}p2`fJk6Xw~CLyyc5wQmVdUMllX}v?$z2AZ)UY z!0;ly3TG~VRL^1FP}MJy>iEjjC(0?E3x8M1-t>=kz0waRz_M77>^eOQiaYgv$M+JXY-(I}!o(oWJctWFig2e6c;FaDU%P?4)lF)E z#FTM+UZ57aY1=?>jqgMtTF^MkI6Air3G*aAS4k>zct_}R@*M)3usOchvuLQ`%ws5| zuQo|UG^r${A*4F@?Owf~5Q-H6Kj1I^=qrVMIkp$BERJ*~a1Oovtg8o&(Mk>Tfro`qMD0IVi< zmz5wu;lFI|Ny(o8>`A#Z%jTP|ckFj`|2}Q1=3VwBpV|oZWClo@0Biw5(9kf`3(}D5 zNYAgEhDUU_M~G*v<)gY?Q3T~@ssZWa3_Pkx>eo^K9)lW4M~!me6gKDAW_tA{B18WU^DiR0G_6~A#*wJ+AZWhubu-b);U z4;@IBp3-DO`O5Uk>{B{XP&t|T>n{w8sL?q^_`_J|Dd&Bp?dg|W)+D=@?Fel~SZB9Q zjDQTx_aB*zYrN~j!d`L?*Y)hf1p8VR+S9#*r3{lW000M64o@mW%%Qpp9mIZ;x48T< zOTW_AtGE@KC`6MK8TO<~!3gAYWdttZt=URl(m#MpipsIk^C_ME{d^9$9L483qLhGk zsZ)8&^=^c5)sFZ%WaeTq@(O0P zfCTywiDQ7979;u0XUP=8$c@83LR6+ z>aYzsP+PK`KvM%BW98E~n=kF=wQb93)QAR#z zKV&;}NPI*^@W^-11AKF4dTXaB{*9>+L8HuE6=)}!y(Z~>V8 zV7pNMdcgR~*VyI4_U}DMo^Vwf`ek{qySU?1ZsXjGU34Pa( z5bQ=sYoCNKfulPc*wRh;qgkR-M*Znxxrm+TN6-Em=?=ClD-_%geocX_6AKGD9m(5- zMXzjAgh_#YxsuUY2uv35Hxb(%y;WyRlnLJT_3%5&4b6iv$Uc#wGj*mC+Fxy znRX$KWZZ`S&`u^z`wlAr)jh7_H@(Gz)>>mmk?brAhEc(s1{!Lc=-;jcxnuiQsU$OO z_LdmgbjakCWudw(o?U$)mz746R^Z87i4j=8+11ONhwjB;7&vxrH1q=Q>Gsm4+A0qq zDWrLEMA|jaKPYq2u0AgP{OpUDjC_Fod(!nnhZ{SV;EKz9F0-I$n3}F7Ey!b+U?kNq zL?;m)XG->NtMDAge}sf_6|GCkz-Pl^4n;d@pI^=PYh-|wo5Dl@B5U?m?00S`cP@)M zU+Dg58sGSTG+lQ*)!+ZW%ieoOB+9xriHnRfLfMj)m5{8m?j@0|O18{U*;$$Q+Q}xH zh+LbiYh3R7-Ou;&`2Bb9<8l8u_ug~P`}KM~*X@SKSY@|cyEQqm0&>n=QhOSFIg$!;c{aw?a zLsktGK_sOIITr3IOe!a@t=zJ-i=ZaX!pX>LEc_Cf>8&MoSTBv>hHH^A7lvt0j^ksX_O7Hb<+UDkuz_#!d zljs|=qYb}XN0I$cZ%Sn;uG6!&Q11{8qZZ!PQ0j(msk50ot}3pB6vwRLaJTLJCQjYE zjb3c8ZEqbfKVShaOb!<xNOA=TYltl=rqzVE!tpk)|?=bzi4V)q&Ekf0DNixoSfP`;$O#fma20t)t~=p~toqnk&SD>U zQha`9LJqmn!zyIea}s&jC)9}NICrFCF4V!6Uv|x)IFGTsbXeXR{vL%?u zGHW9*NmKk3g97|>wcSKx^D(!Q#e8|bPd%dppbEBE=D)Ka7pr98<9zS(l@MNw5BxKY zsVX$xCGOrsHbo<~xEZw3aw|wK7Ox(%8C1L8?z*?X_tS-gSM%^GQ`O*ASQn5|!qKsZ zelUa`kKZE8=NuO#L>~$;~#Gi${T*pcPZobp}vwQIrJ*hKadh$nF2tfLD?9_lPjZ&T}5G4CLQpx{pf3l-W zT=$Zu3ji>$4q-A&>)gZ9G{Rw@0V0?hB;WUu4)wdwmCGP4#tO)>R3v%2CMx*6t>3@F zH)^-!yaUD$1HOh*rVXUh;kSUd0UT$rL$aU)I~X%;B+*Ki(2u?g$l`Q2e0~r->)5O* zhuVw5BnJx}+wKZY^>pjKX?iZ1!&Y`1Pa{a^ zb#Jk(p5XQVa4X%2M~j?w>P_xj67Kp;QGoQT{R(W$O}!0V-vR`oR_1^=;vukpWjfb5 z;em&~u@6AfBL&b<4<)$nfnC7H)6J~)9e;-}zF!;UQ>kiiH0zu5#d#Ff2EpTFNOF(r z3sOB=utXqE{Xz~vT=~3S6eYr?^Tc;PlTgksd1{n%mvY(scqS3;yXiTrm=G1R zczBcX-l}l_ZMVm6U7Yf|S}qszf3~qg9N}#d-(##~x!(^zikoH`C=eu$efIU#`p?OT)YWMa1Wh4lgx@ zi}R!$ULQ}nAlxA^J2o)*4rAGmJ!PBC&G{P07EwLnsCg#9U5d@L*%Z3mqb*T(4p zB~yM+knI#b;N7G<=bj}A?N?cRg8~AQPiyQgk{`pASI2maruw9#1?#;QApn!Q7}&V; z1<$_Ot^^||5{^P<5yPVrP*inZW> z5Wu>pVB%>(fIA!S;9kLK##{z%AiAzjDa!ra0|HzR(_PYtU2V#^F-8eYY2d#6c~FaT zE5(=~$eqXQnONrK@kik*_m)2b#xY(+4sw;(IMcLv(c+4FOz~lmU+|u(qNBF$cDatl7lErFTiuHSu}p!OK$2LU$wD+`PgR&(+URofyiR9HNX0BmbLlkm_1wZTFgU$g zSrZZ_ZW;Q2EIl0ya}c1)wUhX5zX0Dzw>e0fd50s(%)U8g!7a*^+lAj)34s8%pKNH- z{3|AU8=Rnct2}FT;66oNSE7bE?Ul(p*i23jiZQN!0!zDhkee%A!-zp{06(388XvYZlg3KB?mdgJ7m=jlqtdUO}-Xe=M!(wOAZG$U(F?rr?F zYC7h(Zd=UKRSqG)QrU7FEg67f!(E#ao@c3v<`oFv}N5%d?ffJ&!9KuYAjKJ$i1`}NYI0d-(<;3vv#0WG@HxN4L6y`)(m&Tz_={1?PbCtAXLr|)rC}jyywS*4Pdfy zM=kKvM%l_j@i|TJ&u>joov0`fLXqQI)sN7uz+59=mNa>$*9Ep8)b7KR*_&@IMMDRQ zl>4FOqMZ7x6K5Q^z^ih$Cab~=fFza4Qd2jj+YUQwH>RF=<6_lk1lE5L&i+o|FP~xj`dH3kDtaESkXFfyuX;c{u;u@(m5UQ@*^XS%bC;g3p3mb3DZ5M zG?&NZ7%TxWc|m!9+U&%JKJ{O7gO`4lFU5&rYg%;I>j>U9DfK<9z(tA|??XgN2E$(* zKE27C2L-^n#iIU1<1V86H7Rx#Z-lbM;?zxmge{O{$VM&8&9~ogPLRaOI$OFgD-jba zt&CH%DocxpSQ>%?fp36vVT4cBtHbzAXK~g#E+16Dr24R!Me(}TJg(Ku?Xid&@0?w= z8LZ@q$v;&t0^MzNdr}6)%lFEb;@-`IM-Hi{dw|Z7$WC61-SUj4CoT9;7~zj+YKVVm z6^`v6gv(PU z8B-~9^P~D--Df9WsoGx;*cg90#NAwyRI;Ox0aBxCdPC7lZ**Tdmrv<$q$V`_rXaKK zNx`k`v$5zV_0)$;l(e-h!wb9h*-1a^(T$D1z3t|9LhoeJE!a`f=;jLUJ7qfXA#Qcd zDSUs7>X>YuHM|XUGA8nK0T2Rl6de`HrT~_FTl51%Ju`oOrN=}QP^h+0c`^*z-72s| zEGCKpaBVQ72;Py;2)Gw`H9A(i?mdUr%sY1R-wwhlQS|`+`#Ec3R`-?RD5uB;;si-S zWr!Up7-8ybJ^_e?dycm_XfIf7Q%)plqk8QDhi?8V%Q>KKZ?DnU*KAFQS5ujTGawLQA`MDmbLRzvy%frT{5+Bn3EgskTu-* z7i+Lj+&T2tqqGJ;COpiTK2P9=*v2cg$dCCQHGutR5N&|kSMJ_T79~OD1>r)*ee9u+ z=q%$O+S`^nwg;j25V5FV>5cbMYB#>3S>}uyU<`Lt%H2i+s=S)SEH^d9wq}+{_mqwQ z-H#-ppHmUTE*0f`Aws^F=sWV?!6=WNlNRYouhb?8Q>PnSq*PC2GCc1J45_SK9Lyz@ z2KoqiYVt4XaOfX(?EHjLj%*f1dof?oWTx19{B7vXi`+OptS7f`g*8M8@bZ?28rs!j z4Rx!#favmuckRb31m~(Yc(*4z(VHaBT?{6_8w|s-B#S}8uKg);c&X;!_We_y0K;*C z#;i?O8`|cYH~sLCHI={hn9#;2BOuHysf5ZU6Fs)+|C@t$As-;w?yt_KHcTdm(vX6c z76T3-h-*nb1;l#zsYCbPsNBw7W3?2IU$mjlHm384dT2US;LP%JVJqN4117Rk{o#}mo7)~AuaM&O!=Ger9UMW-aPXT~9X@OemoWRU z{uD{BG5H18-l%f9?P(z9{rhxfSIPr;1xW5fd_k7#_dWOKL6`?LoeE)G%Cv>Cm7Ym6 zq0C9k!DG*ard+K)n>5+;?yQ_F`Ak}vrPsaCx(w*4Z!x2a>~z&l3MM`4=E0Z=P|LWR zhgmc2!{muKHBl^TxI~}AtV3#FY+m{ z#(!04%z?0>D$V89W%S>&-Xt8^>a4gZAYcNOGsc zCF0Qp23g5fa@ER3l|EJ#Hgad(J8D*4YaA=k`el;QbiBV^mF(Wq@Kby{kiqm;t+h1S zINYX~sM;5<2s5L{btlg{twh6bVLjhIP92V8wT!&nK8D(9Q&bsi^Y*=r2&uKQEgZ8><%5=ZZ?&6O#K0_MJ zCRWZKSvZ2osgte~m>?Kl>o21X;2Yp?yZk+UxBt5WKDR#BEYQ!IK6-G;u)g>t{;qUT zx;4XAdS`QKZ1|(nm48LAp6uqbkj-8b{TC)FgKfhyZ3%#2wyc;_WRJjaOelzONc%ZY z2(!Y5{zY0U?)cpa`3o9FAr&q&a@x8UYdaRE`;2ZJMo=H*gKZ;i_@L(QF;w5A>C>;x z;#2i7U*%n&H(YwR*6b;aD;EXWlJ{$MF7VGbmvhS`$FQcsRw3 zIs^CGkfWq0Y^_Zt8hL84p1KATCOCzy7*Zm`58GzaL;h>B`qi{%9|Vr1K-+|wZ+A); ze$SqV$!+g_7L1<&t@mePU27iiG`s_0fT5fJvZ-glQNzzq!eSu;n7ssQYQQ6|-tV+r z`9rRS%(?*T{m><lW$vh-nX%he^1l|Qgy(H5xd&f8MWmd)f+oy_r_3*Tzh%$+V9y9 zK*kwfi)OFhP5gjvK1)Fxuu4wM10N0NK~a+cUK|dnuRg_#4Yz;SF=o8zrF)BetXy2- z$my*l`5Q|_G0CSktF=N~;crRXVmPM=26)X)4+~ezkpi?GcH)ip`Z?;h+EFoS@|S`I z=~9LXXyyXgS@N_11#5{$_AEX4SRf;OxdD1O5>U+^E{efxWHumM?n1rN0IaL2s%zt! zYjNkfv+(1R=7zjpN9=_prPGY;2e1q{-`Ya-JEv>IQU{r6%<$$j8jw z)&?G+gq>frH=8he)tY~929sS3&P&f`TGmWhot49`$_m);r2*^9#eUp5bQm})HRD}< z6EI8wk}6e#Q>hPfTj5kXeixcqZZ}3D^+>4-XEY+ah0S^>xvROc z7m26vh@;gmVKT;4HPU^2CG@QEC8h4D?GJd4owgzGXI+pDlxDFYK?!u=E{HTU*Y^&d zuU%M7v{Jn4!T2B=Y6A>}CBr>a-WSOfKFM|D25%?O0YZ-=sc&9Np#G~~?ehK=o^j&a zn*9$VU%@?L;W}kf&6`8y%HB#enN@GUtudz4Sc_x)`dhX&in(HnX{y0462^_7Cp|Fk z;hrg_-$5s9O3?<`^q!f$7W>7v=D|d$;OfmztUT~_2_4G$^9`~dSA7}tQ(pS0KL{Br z=hplyoMzKisC_eznJ}QYyscG6!CZQcV5Q~GC@5BDIczufK=#~N@+?$Of_i2IjH^9{e0 z<45SJ5U?s?XCQeEIchg!;4|w@D&cgyzpnp1^~q$f@BP#@gP$j&4-Ce0OJh8k4*{78 z|5e*g(iBeXAsARhrQbmAY7oDN`p4ltTW&vIR!t{nPB}aVA~^+*K9Yyl@fVpcdMn&z zS7Lmd)J9(uA7aP4du<9sHtz89*VdL5jHOZXzSgNxtbL5P%^#_+eb$$bp$+hW=ZMM# zoEYj1I+tW))tY=U3-knhq;QMaE z_&KaxM@5?g!++flo8h&%J*UyhW*AqRJY=4|e=5~SOe+{nO41i$tj$sNKG%Pl*w1Xa z2X+GY#g*NSi=7#}5^+zOQMAV=jzY2>e|v_M@+m(-k_vt;xy#H3(v$Gb?fP8G!sbpu((Jo*U5>6(<=%is_YR0<#i`o}Ra|hGdZx zHv_LkX(p4OrK6YgmzOV0>3MVMT@hb#6=2+%M=EuTz(FcY8zhFE^%?K3i;<9_+t%AD za%KJ4@1PeUHPY4}FX0$O#3hH{2&OPIubSa&g6fUBAJa96DcN1U=2L$5=}R#>NhpvU zO}kFR9*fHblF6lCPJ>QTQYmK@3X!R=SQ(Tkc)phUYOq}lRVOy|(0Xqm5~19?-s&Jl zMGMsAfYp<2jrwCxofLZdY$EQ?;1W4&_{Cb7Y=c%|+>d!gq^k3>YP{=AW)YQ-YfC`& zD+wHbI=|EjSYbm=MOG`R2v%=609mISKMVKkKNRLF4)JsqBFJxbDUHqC=sOJUix-BQ zQ~Bh)LgWhXVtpHpvJs^K<$X(_L@?*BaMe$P_Yq8LX!Bj*1ndEy8#BqJ zj*(-$k~1fG-DEv3YV66M3zhZ{8alLe1vpfuPACTG_92zwS6X(?^j~gt@}-YPNpyWE zEs`7hnp|K1AZ^TPFD^L;0RxW8KNd0_=gyiz!0fe9aOoH9MiIWYrQoigIY7gi{l2$3XdFm<&+=R_PcVj6^V_j>e? z;?{CuS9jS)Gf-tpg%yupKCu~qflqSA2l(OLi+%H@?^v}96*CS3h9}jEg>r!Kgh&K= zIds|T{gvfRTRONgc1RgYzno$=|L1_BxYAzY2%pSfG5Xst7d%1gnegX6ptN}FNt3zN ztvkzf$Kjz_Bd4^$Urck9t2q11|+VHY~CckOjZ}*5NDIFVar3ns%XU>v)jI|vH)_DBPPmQYlwgj zBoPL*NJpW{6B*T`+y7nfDcYWVB+?co4BQd*$I(T_!A<3NKbXo~(LN=GAQK|w)*Dr6&y)D9p(C|qI4xY*FPIa7KtIf=t( zW}bOgk*gAih7SF{YdW5A{IA+JSVfR4K(yqr#nF$M1Do(?od@^&gbYfWNOXiVn%7tI z>bBoLiFx(~%#z@C1r!$ijI4MK%)dac1RA9^cy>o=Eqtv^hX0d*-_vG%OUXF))Wl1! z*1#aO?<=plebZ<=2a=50PyC%;2f9)@j~sR2J?_|6pqy;(VDO6!z>&^;#)M+x#FP=; znTq2-66B0W;R8eS{(SSHDTV42c%`+v((}Lb>rx^RNS1?eKEjn`JxM%;IgIxAT+|nl zlBo45bMWyp6+^LQ;kTO=+=Tdv1>4t6gR|GOlDH5e=8nL62y}{nvG_bbq?j^Js(=aE zgOvS%9%L5=d!7r!dR6XWd<@~P83ujrh+M!P?QB>LhM$ex)2TO7J-&QJp3IOX9khE+ z7#U=jo-YKvJuB72Z+@H?cG>vTE-)Lq3Nx&|QM z>bo%?YJ66=!71re4mN0zrTPKwxITRyW2*$6|9dyd9nnPhJS*D=VJ89Md{#xG`2?u| z*5cFt93J7Sg%63QlDxs;_Jy)-!VJkW*~xwS38$f2suSdDEPgB}of zpRedt!5m!hi->wMH<3Y=XPLNEKbQOas%S=7EbBx`epSy4} z)M%GX@}|OpFF9t*&~sYz$Jz7x)NE^E9l)m&pob732*fm{To4V@em2a%YT_Duu^lQ2 zLZBKwOFA+dNkFI;yqdegEr9Q9Ec&-}5H)77+HOfP;~WU5EKwlMPLQFYf|65Apdw5V z3if9ShP642`kN(7OW}srW+El z47SHsMXaBUu1)ZRm@af$u@@7Gjv;!(p(VY>NiFLL_~p(hEwZP=YvCOfe3&!;-GHwx z5P?R*$MTV!$$t+YolnqBD0xVgZzY-3HYukWB;0ZP@c_uIz9DR6pn+(>PZ}p$hk1`G z2iLCr66tC>@nqiz9`u?l`hLBj{mCXG;v*`j`ZmFy^JPBdXL%Uhh1zp zi?7`AJQe=%e0Q&tNea-rM{b3lI#F0Md@}w%TA?7+joc-}U1oz3dUHznwrwn6Fy=`| zn6Akf{gl#b`8yE#G2K&NO>QNM`UQ}m!SWr!3k2Xw*!G(Mb^y88s;t+>hh1!72Ruq; zN10-}02`CRf0>6KT!e{{F69_&ud5Hc=WoC>#HGxrOXsy?h5nTdhjz&`u-!ZLU=%jV z)tZbZztwx-+3ar%6v_F~_N{7c{*Ot-`#)wM58)q2_De!&gew^xK7~+yW)I?i`|UD= zlX5}B*0JM+?fIwd((LkOWIlZuAXo`Vu@hwJ-(*1@m>u8H4ws#sc=Ob}aaqS(8wXY3!fnz48LVZkQ!g5FEp^{BgS--AV* z4Y4rsRogB)+iF#yHayXsv(UBE;AL?Kb$i5BRzMU8L~aa^zvgxOY4Lf%0`|PV_Vwwe z$C2ZEKQ4O~>{8jGe!On;c&P#YKcK#E)88p}4VyZyciZcZdc)JL@t1>1FCuA3GJNmi za_cTrA-vRKtjPx&8SDu+v84k^@os}XC#_p;yC%Du>{K}aA+)s1Z+2=r^OBQ%0hx4f z{^V#bZ3q8X+K);h$-+zr35OTw<9`w$wM9D0PAvOpEJazQ(o=VfmcO;U4Awly4cDEy z8GzcD&+btn1_XaNE?(d3{TqJM)GJ;p6J}UdzZ!i0O8sX14UE4lWWjDTjssBL{_m$v zzu+0e#G1!gO72yO`!0iz;=Olt9j*I@zup=>FOE>zSOR}fnVGlh`UBM|Hn`3cS8xbb zIJ0J|B{_)G_SuaYw;@O8ZNsi7PP<FKEDN}Zvz6Q6|k``zEq zt^@Sbp54`YS!~LM_(`1q`CK2WmNys|eQkq$=@$5aijWtseH+gKwMpx=ybn#2pq7MI z>R%n5EN>(kZt2jx02`s3043V8tEDT`K{EPPa|pXeT3*$mUx>N?IH3^0F7X^s2k2Yz z_hYjWU^!qmb4ZqTTT4QVTXk<4xn%@86H<4)p|3 zNJcvl$@Sy&%QLw(?u;vWxY#Fi=vCER&4qH+&ZA@)k2B#nB=D7|zhC-D zT?{SSA_dz2m1Ekcf&9(#`tZr8ta5L2<}PngB`pL3fOAmO0+po3zGOsO{d|>hExmg zZyz6Ir^ZOo0b+=wTi)adQtV5+A{%)5#Aw8s)*fB*_*V$=WagsH`hhqRmh*43p^owC z-R!1BJaWL2_=>uE{gJ0t~*MEnjkAQ^E6@TEy@hL~&l;U4=5K=g*dk zzG8o6bW-56tpe_g2kqgZYyer46!>ath?UxYLFzzNVUfU2_*#;mS6oO0$yNNIb+_78 zolVN3>6j@p_qulp2sicX)k}4_=0QS5YiX2e@@@R?GAreg@Bh5#3yq3@R3rj!$jfzt zv|50(0YJYSLXC?7FXWGCFwq)ldQ^04#I{PE`a8;uuE?}yWiu>9?yAOTfOC%PsmrBT zgH{+ZfaORie5VVb-w%%G_@@d)Ky@7;(#)$C2V&5_XBF?pHUAV6YkG|s!XN*l*VN@{ zIZQA^-Glj<09vK`4dktTWf%MiUNysn=}q|a1|)tsKH4a@__4b#iyxb_9OiHs&?!Xv ziuQka!=vuG@UUmYH=|hmr*Rowo#1!M%Qfw7u?X-B8sRrrFh$IS+)M95W?{MhYphC< z_{9}cV7!WNn4##qu{T#8pO9}6B8r=<73QGk+HdaUXC`??49^s}eL`KT)v%?bh46YI zodH2R7Rp3=y_b*e8f8XPiisx;VFl5xyQ3s(RxL0`0Uemj)|LU_J^}5K{Ag^V!(#qM zsCbND-a<6>&z}q9-HNM$ZlyJz?$>e;vs#krTo{w7OV4?8RDOvymP7jbEfk#n z!$bJkgENpe;)w&{{UTODE*_{HOOWEAsb{?ZfL-L3dWQBF4zs+Tn`W@}B=w~C)Ej%@ z&N~{2dpe~c>_qFchTWHUmoFlQ4{b}MSQv${-clZ)MXikjaQ6!^2{C*DmuH6LxusqtI(!6#Dj7sxkP2p7=`(bm*k4|@kG8rsNQ zE&8Jwy3%oNA$VT@{XBAfSMBg;FTS%uNmvJe{+uN2bR%d>P7A(@TIQ&!uW)uWcV1=y zSR|K3_)*`Rq9Q{LxvW{AQm;h}G!)m5s(beB2{Q?EG+O?g54FneR*S4gR*mKK4{JPh zJPF@?JQLin=408e23$b$0w=KIpP?d;+;whPMbUg9l+kmh7tL5frnYvW!Cp3YqP))I zXCHwtgPf-nC&JQw`=zkSB7gBllhNPMG8CTPtji@nDS&RYlpj^ z$oCd59zYOeT*6ocx``*a3|~@$l9#MKph9dHliqOL{TRzkGhTk}Xde6uI|hSKWgjI! z44TjvzrC}UMaaHLOkL?XXNubnHFD2Cc_7=ggD1KJ?2nlAb1c=mEGe1|!X{__y)&`5v z;!Yf3*Pq^P_wAtn%BruX&BzWy#1Z zo!!SfS~FHd$Q(b=bW6{ z)A5Hw|E3i2i5GC${czC?z_q9nu=po>}KVF(bRT*_tr1#&S!U-#C%iDls9saW>QP^N|EgU%EXk<)e- zr2Tz-dVA0E!d9pKu~tk$H)E#!PeoTW#jTbP2aZ4>?%W_$lbYbpGwYtj%2mM4@favX zFPaOet-vLv@}!?b$ zy$iX{zdIFB&uUV64!=ADn602&B!bf$S`e@T_=QCTi4QhY5oTEc7g~wVUo6i3N%+|= zdb2L4HVbnGO9KllL#m-3~EEiRJre`_TM)lB}6%KQ^{_subL?x3u3pZcpj=rggY&yE%ulP9?ZVKN=Jdr z$(S1zZ|_IHEri^LS`{*9c|EM=$WhrO=$cGdf&mODdmVsn;x_+tCVJ<1RgWaN4-7L- za|DRkh42%VNy8h`!2V3F)^`E^o*%w5Cr!P zed;vvPi}`Y1`1p?W5slInij*|1ixk8{E17?N*R{R(W)nd&z76FkNz5n+|15A&{@A~ zyim)_)0;1SCo;(8#d#}j&`0#jUqt20*4a`3rcAYCTf^0oECrmanrOaS@ZySz*~P=v zrbKi>VJDQV9z{Zs1<|y7S)KCitI))xXM)&{7_f*XtqvDwR1`Lh4j15+m zbsgR;$f6-D-Qv>E$V(3}G`}Vf%w_=zI%-JB3kO>n?)z-xvdH%{Tdb7f{L(pg|7>2x z<_mtWnpS`_%{U2iW(&dD^q!&RFqQ6gX+-*jI6JB%uQ&v(J%_3NbuAj|pZ ze;AcZr|2v&D{?2ho({mPA_YJNKKdXqJNouPn^#ibue-TPXkS_0ebPo=uq zqs3wQQc8tGjYG~Po|Y3i069xb@eC5nx`u&hTDBr(8k$jfaFw-kMBs&_+1qXOX~?{{bqxEWT0^TUten0q_IpC4%{;&Uq=@UHPz`T=n48dj>>9~Xo7sKY`M{XnEGH@^TG zwyd4UbhE=X(cUTvQB-)v8XkoL3Z_P~tO77o%Le#E=3 z6wM7zic<;=Q7T!^e4xN1rS0-wK)f5yE*C4mH_=FIqm`*N2o$LUDmmB-Fm!bys{ZQo zhH*izPL$~sT)WNo+-qg_KQ61=(KR38PyhpsOI=3e@O@%w=_E$~3{1wawQ+y%PnB6H zKo|VQG`2>MF6epH)jP>$1y7Z>QAjRTlo3S?AW{3|oaJ~tWBE}O5YERIO^TE@DOya+ zHWR;8=;<^p%D{=j*2@Kfg=We`0dU zh$vQ~?6HZluOUixe5!w6O4)uZ!!c&{+TP}+=(bUg00tXKYoHPa@YH3=RN=58IylDT zi>3-QWzZ+xn9GG)g2Hzm@W(0T-vIzfkmUa~5_Y=VhaD{`D*vQD#S|&cE0o{z+2_P~ z-krJ-l6FABtv5rm1^NxzsYhVC966c-m@_*@L%I))%j3-!4B9h-b92q*=VSsDThi8C zLXpVYhJv(hmn|U(S5YQ#^Y6ul5MzQ~BsTRK(2_b~BDH&!hOhl3!i>tGknVLJ9Z>r< z`sx<@R*~G>(iY&YY9Pv(*UKnes_Y!V7>ba2x6k*~NINY!CYZJsFtf&gd#MMC?NO{a z{fZ>aY&m~~iPX~rUkB)LhU)DIHf1eB=GgZOlG3H+c+gKCE`IvjDj(;4R_mM9OQei0 zhM6)rg2JI0pUQQ6;%}+Sa$?J+(}p{?mLA<9CT91f@_@qI}(U>_*##? z4+GAI`YyhPrawXFx>Zl^^YEDfDl1lP<6~+Za|}Y!BLzKt5Oatik;dIDF#;6>r$)voBkf3(YpcNKF;IZ{rR_A8*8EzVMq**1n zctx02O@4!$l@Zre1no(50Q?SxXh$=5#Toc+^iYEB5Lx0;`Y)4N90Yqij)-8gMF|nV zs4Y@Nd1=$JW99D0VSRlcfB3O<3{t)$+ai^HbtE%>4G-4}a?{k&IBNhBl64?;p5GWY zH2f}(%iB&!^-2>SpR0B$guXWnBEyReZ!Wv8Midhl*w85!q3#Nt+D@|Ey3u2!5c!L0 z%>^!gRnrXhS=(_^4u2YGVd5vtqt5Y3nF_aJny=ae557iTONMpB7m#1i%l-9tS-kEX zGW^2T+ff+_8)k)XeHMCPFF{47zDu%+p+Y8>_4F|{D7z*NGXu88fg5gQGhXYi01VpwMQOW5*8O1mZtl` z2Y~sWL@kh`;Kf+O1h%F}w)U;3C+uZ625#xnpG_L@;n1qfcInS+;R zn-9K;8N3v_^WDOUgYUW~;1x1n=B*c(-Q z$QwHMjNZC>Ht=WPz2Dud0d$VhgLRigM`|VkllcQB-nyLf;uTvA7+|abaaP>Tkzyw0 z?@1Yc$|$$NISCc*FvnHX*S}a+z>D--Tm)ZqPw~xVT>pzah^mV@H=wl?H^1B>wX-(4oSTN`D844;!$LV*+uYT?4@L<=uy8J6Gl-{j;Xgyel0y zIqJLIUNd(twd##zH!1lHKb!FkD^ zP$RmRzoazz`1@u?eP6Lqn)AY0y{sA{dDTdRf(I8QiELsPSiD32ZNO6uk>mF8ww-iE z(5^ShEA)8-d_-jaJ;@!u@=8LH89g(eS+?Kx9G>_^;u9+ew|J z7u8U#6%#u35aU+0_Er;^7&KDFR;9%X=cl|#INl5Y+A`MHYOu^yJNzLWP6i`|* ziee=6`+PLiFZ}qO;a!HQh5XFVBIHlw1rPp|mUj5=dlR$Vr?n-N&6fjdN)UCQzZEF@ z&hX9Ir^$5-d4cG(cd?eQq5(BGqC30w9ElT^JPXAg3pOuFZ&q$x^(kzMKWwET^+jlY z5^+1YL3`WFW&5l2tBm^>jD(66IP^{Px@=G&YaWg;K{1wu0D`#TUB#}K3LWo@>lXC) zbEK0qGV({ZGyW&RDO;GDZVR|pD+@t*8NzpBKWZSQMB2YiKjhuILf_B0)g1p~l5pR1 zeyv$yI0}=kM_g7+H3P1LX%Ts2h~!h2AiKwaUc~^0A9%lW9%vQmbR8DCA3BbUPGyYN zxmZgrOBlMt@?E-3F|{Efn@mw-%lMWKf|P~?TNLRdk^v;NY(4o^of_@Gwwqey95Z0# zxapV8e}+S3#oyDLEB^98g0w^|Fb9T_uw`mf?f%}za;A8P<&msbdo7%tx);?abz=m+ zq<4_7%1SjuiP);Lx?;U@sQ~@xEi(0kGH#67d(o|$N`d!OT7J0mpmHb`(s<*N$&O1C zmF-9U=K9})^mEt6C7}pLy)wIBhLXSs5$CR4k8|lhK)CFsnyEy%5qP*u5`bo``Bz5yV-u285VYSlXblY$AuLREPyN6z2cE05X1xTC4-SszWI_ z*YK4KK8oP3UHq7K$IYeIXQQHXfAJ032~%(pVMF!S`vhKf@+$yL(!MmuQvmOu4uk8a zPjf55*L@$At9Kf13D=X0lJF5t=XgR-t|~cQY-!4IM-r+`U&#P;_Iq(oQ?4VQ^ns46 z{t7K--Wp3*+Bw|e%?D|Z@NyYzM@8AkEYX4+9@?vn(_ZH^2CO{2!=)sC8NfS2lf~T6 zUnI0}%Xrqhg|Ja3*SU*;1M6%V4X%0BN(H7vul!uGC-d)*X~t-wPb<@PVcZ`C6{NTe z;HZK`8qEoo*XA!YNP9I>JlS8ES= zVkl+bYGC44TVJMW`tqUgm!9vyY1c1^W@%=A`BvthyYZ zg+3!VxZc6b)v=4wn>MBdd`$L^ZIw9NTOp&3Wn2CV9Ky-?Hfi{}sNY%MyK7J^2vxnm z2$y6eE$T)OZoXi8>s)4qhsiH+l*v#RO6`|vbB%{k6QYa7V< z{IN9Yg(BHT!C_B?oLa5d`gyK1YERC~_jAUh{D0@Wic{pr4e$)S{5eJRX$OHTRRnRs zD3uUJ#^**$XaU<=*;*_uTHYBEABLUWCl!n#qKXnv{U0l}hNbF7XY&9u&}h=aOiN4J zWJ|&s)%~hn(vZP5d9f+!HW8GVX;p|LI0S_NNW3grRgKB>X|siZ_#Fb5@5T)G_x;tP z!iWHVtQq3W(XQFfNj0_lw712ELSK?R^Vx$SUlmTk1mmn(BSX^8 z_@oNWusm&Dn%&RD#$NK$yGis2VuqaYzVh<+7z$d4Y|F>JWc-9*(5k_u=^QVtg&Uqy_T0FT% zZlp>uVj{sbIst$U&P_zX9hTf(1!`)YtFu`oiSkYhQ9NFFf@}w)E0gHkgp(*nJ2y(2 zM+?S(?u|WGPV9TmC#4IBro@Y)S&mx*@>7)uaMJ{m%+~rn^si3Z=S~;nOsWy3RQuaG z;})y>oLP3jRXGBNg{<397Ahe*hK4PEgFGz;X-{-PXAq=nsI~Ez$E}w3mQoxhn=BEz%&Rq?DB8E=Wo#AkvGZNQrdrf+B)+ zOD)~qvGMHZ`+Gfq!OrZ=eb3Cf&UqhfkR0$Bu9inHs+&i2KjmCdCrbIs|CuHGde$9rbE}FYzj}NUeDe8pb zK-I+dTvGuwOF*Iqj5=EDhtTS*)#k?fD2UJg`k8LT{gjQq$kyl>&p<#mW}7j)l^PQu ziw5*WZ@v>*! zw9hA@Y*+LP4JG?2&VT0&*yp|fiZ=KRYkCLRu)~pcSiWfp z7^p$IT7s8k{*l(b$@O8(Rax&~zZ4dQr{7B&M`yTrErCK=avb?5Xzaj8^ z6e+c^(fisEu2j z`Za@`(OQ*)vTzX?azJ+Q8=i!Ga;*emz0r>gcC?N}c@%)5LVDTg5nQdmbvdK8rRv** zxf-?Y${e;VaE&maZ9hu@l%->q)qP1>YBqRsNqZbB5{1;6CUt+O@uBYDH?Nhff8^1$ z&ID+<2|;s)?99+j!xw`Z`J7C^A(b6l-}rq!N9}8Mdk2`-rO5em+Lucyti@J0oqo8q zw;mfMfjIDcnc^v~H@7VaKSDr7wf-1>#Kt;V_vJqcU!nyJz56<8xT-psggqVO|7i5{ zDUJQByY)8+mRG}sNUm)RH?h*+wJl1J!J0LulUY_JBLIk><^_h5`#Yqh#LYz8kCl)$ zg%>hlr*M^kyO%_tIq|*IA12X?+Imajc~fc!gHXMDp-5_+V0jA z^N@j4vCb8tk?*MuTJ!J{k?ZH;+P|-NTy-c|)FE|bT~sP%8#l54o!)Nl=3%504uu{F zeRZn$Fl3ps7ssPD;M_gxe9R2TlR+*zs4;A;DV5X1|67%{oqNuavdDwTwCrE~xCzc7G90!E>qv2Ny-AK4{!D0b99-9%3cT;m@)x_aqkix$ zEgXl|-S)PX=bMK)bBE=}-2(455uQ2-rpuN zTrv`cj`(DjoibjeR>ORl)IM@$zK?(Fr_p+k30Uw@-fEPVT{OQX+;ZF|$kr6N2!(H5qqaChpY*{jNtT`nVc6xTL3^9zxdoD!7G+ zWa5d)*4OdBb>!wwPR$AeCg=YfAfzjRxCjWU!96z*P0#rig%{~t6B3r@%>C%Ff8Z#y zvHB~r_Um9DN`OrbQS-`o3HmZyiABOi`3J|)Iv25gZTB!KTv_pP5>96vQ`Us9uL`MH zv3aY!jcEdtleulO3ID=$yxad5w1A4P8LPVEN}HrRy_b~;?k+-UQvfDbzT*uf@z(SQ zgv5iya6e3F)g?^^4qW6oivIa_R-{CbVo>&d6e0H>EzjQ;1}d^jn|EY5p;lpJRS6J%KC-v164-o8tD^>wlpb zLO|r+gWbIh9etZ(Vt6_lrkZ)a8XLh6XsgmdpAZ|8TtI>2s%gB4;u>(J5NrwF422}5 zDYq8j4N%xh z*78dm=62_wM$l4TemliUCc$r|#cNI$HxAY-ZH^j{;q@@lVO%m+Idc|Aum@!t!(lNj ztb_L^e?k-%3sZ1i(W)n3#M(S8?io*3${5->5W`sjJFmIy-N6#n8^i8;iMJoo6F8F_ zsLawi6&nXZ{r>H6sQ*d1ni4taGE0*U4rbbNSaSjmX&S38)zq2I zGzyuDJi4FkS*eAp`j%=@#)%?td~k!xM?X75K=evoZ}?@W|^ z@c_!dQAOyjviIGiiIH`C9Fr7kM{?ZIevc6wVt!`k=&(z{Y4`z}`0v-=Us3`63dq3P z(q;x5W~$bd0H%lOm(YHgux7nM#hz7D7C3IyJsUM zYEzE?^fN|wV=g``C;D~uStK>H@9@d_G0QTL0K(i0g(-SsY>)o&3jMJdAsY43jK)Hh zb(h{&J_Pbtqi62I4|0f1ZMIvA3AxOM`tFQNMBcA;yeS>#JMi7obUn!-r7mlX>CUn? z-r6)hX%j!s4#6EJ!7yj`vvVQi1~zm0|6L({jQY`hy5B zOZ9Xzs`P)ylDF>+T6+Z6H3q&u?}nOzF5ZSXfHqLbXO7FcVdl4JiEzinzf6I%E~M3( z`X9T*=Rh{YCuM7{yC%TGda|eAbCXX&ndwzUZXyg{V$Y^jKEfYeH}vQoUUu6(_~87F zA?_h-rc^(S8_~|Pj29=tASa$@H3uqDNKYuoQ=HZCS&`Qa{t za}D8+f+a@XTZ}8XKfzC0T2`aNAORtdsC9pw9kWpHmLZjqomHHAD=)p@3?K(t0`N4H zkYAVO_-|(>H-qfD5{HYH;{m0(9`s&l*E;8yJk0~~1Y#TpcjJcSBX$fQ2*!#3b+6e8 zua>=sOn4Nw`6l+3KvthCOpJ9>FZ#*KIhFz@eFLSUan#rW|z{ zT|7OJ#{c2e;`^&N(7^w36z})5TUA!HY4?EN7v|64lnSn327WN?mw;l6H1laVqO5AzFP1Emtbs*6JiC z!D;Z`R*g&KkfJCEnv+P0Ynbz!DeflV?H;J&YvXK&NDt(C&2}Kn2)x^ue|k>{c83if zH1M9SqO#*k8q%m)AF7#)_bbo&T(Qg5%%70ZDXq!t57GeA}y!WfztD!xIOJWne zLcv;2EzVm?-H*5(%DP7uV!t}%$QpWj2@xFkxQnanK6R$JtDf&WxQ=ir{vzBHx~B<1 z32C9b#{O;(pXHr`q4RUG>gdDE<74~0lH9;8cByZ~;xhTo^kCVQ7Oz=dde;8i;N^e+ z?oO>i^++-B1L-v?Pm&*?1|7XZQP0E)9hMA+gNb!TdLO6jV4UA+O-B+H%$V0R+Vq?J zW?xJs{WQiv=UunACTl|zn4DHdlJt9uFrv=1G0l>{lkPYdqM9I*Ew9lQ z)zAO%HpF)p2<=i^U(addZw_F*R+H2PK!$S07cWnDtiz_751D@y zSdZZ^$py6zvG@|g=LcItJcb;c=$4^w2^tk*OwXYJ1C8Ml-zVC=`fc;5FGw(Ed+NuZSCjCF z?T%Bg@j9lfNTxUt_TeVp5CwA&#bI3oUYyS)g10|`N0*=T=u1%Tep0IUK+<|=z3ixk zt5{dgjSnbpm*->sDd7B?r>BQILO{AOpY@|PgPQ_w`Ozo@7ZBg?+$|pg>~n>M_n@C4 zEs#f_bilZD-0ph;9$PlTq?G5Y$g5cNXP)xbV?)H%m`N5(bmc%IxCRCys0crwxqgYQJyfI8(Q@)T$ zVf;I)<62oXY-Qu&M98QyWjfE@LkiG6zO+K8MG)*b29QX|AHWrG{!y<$aCHn0u8S`a zwB|wdeH4EI))h9=y$Xjlw;gB`!;$A11b3eQmj8cBlX_TzVV*A-s-1?e3E7^Yai43) z7K#*2GfL#X<$#ACoxFqeKPjEg8Dw#3>qc8`3g`=>W~nbKxD@c1n(+kmJAz6L{%-AssOitKeT7g9#N%s!WzH0QE-~ho z*tA5|4FbcNbG!Eo9KU{y`!BXh<>S8}RRY~6hD%f$0v<2cN=up2S88nCkNZk&^Zfi$ z*vXGcw@Civcvpn}-nc_YmXkhCRPuYhMXK1EBEso~F~dd3X@~noMm>n!#vOp!i*up~ z<>y8ceZMjUNZ|DW!4i^W$zaLhtZ3-0ueaCGk{srGc_mFs>APm2zK5M1TwNi-R|HoN7ddF+k{)<@@pq&-3?ZWt@^juW@T2Zp zcCncFs#TU=C&C)PQUbvaMuiyr!_>nP!J-U6@}-9bDSxAqSwbo7;L-`CP#in_shOq> ziIiy<*H&G?S!x&Ddwjiqu3|v^Rs<{!4YNTZeDli1V)Pf}Diw$*2TKXdis0`)-#fk# zu%RkDjV3`|UATZY5Rm1v!!Et#+q4?qD)J&TJOI_RZ+g~QX0#k}ziBZ01b4j7;Hypa zXvTWPib(&R6)*axd;8A!uf;gD+17|~ow)W7e)!%;LfahE1~x?cc_B=2fvJyseaTSgt0_`yU3P|zC%)3&|s0uLSIYk+j?Zs9$zsa8k5H7P@+DN88K7|wd= z(Jp5;l466u3&RuqXrI@anb8E;v7Fq@SAL3-@i_yVg#T7Otwi>>Gl&Ehe1+xX?#@bn z70f3uM3qwi%gsi~7W!QQ3caT1;i9|Fj}x2rx!Nr8P$YCD{zbz<8UUWvaR`suJKixs znSx=RybqF?bjh>RX!XzkTN=iqoojh&sPYtSa&MQ-b%? z0=W|+jbCl^pY_^Z=Lq(M{hzS%omyZ>6~wiMA2Rwi5_hZN)vw>AP1F|_TC8JmRX~1- zo`IZ*1yZa@Ux00)nUd-sDK-U>gNR8S(MFSSN8eXx0ydcUWhLutw;nE~KLMSr@ffQ3 zr@fPSBMn0N9uKM124}(&E+B;ZAf_MACk4pF+G-{gOu!s3s(FO3xpQ%DSb9BcU?WXg z`xIy-z$x2BQCC|&d>3+jl?tqL#u-8;@cYdC<^!wvPxzxp1b3F znS4f%rQ&4Z8Kwm35IC;rF_&=7>oA9=lrQWnL`&`0$+lc$Ukcdt^;w5Q*N%L;MZJgE z6{l`EeTvv{%52#t2DBIvgR{gJ7~C6dR#|0MRk`Iyzk3hMLAgR5uxU?;Og!g4#B+fV zfue!d?xiJyiJs-jfT8sU*lx*pFg-YR!#`!V4cKcTdP<3x4#uHoTrWUsAGq=$>)GD# zW#C*~Pf#A@#O*v(v`m=a>$>FfvTZX571dyzg?HLuXS$B77?H07%=i5YjZHhR3))h; zJA00&ZC?t64@%k8D}-nPi#{I2fN|NA5M1kP=bfY3S)S@_tMgTHSbzuH??%^$>S3p9 zVH4!QqWR2E342ZJOeSP@FNoIf6m%&m9lSDze5li9ekTnBIET=JYzh6leuQGh%jL|z!yF4W5ImbgDY@~QQ z1+5_FV_lJ#8E)R&G&BXa=Z^pX_lM0hYov68q$M{c79T2TDf4!1)eN@-ZB~SAG2rQC zCF40Cz?Yv*0{{MB_Nw3+aB)N9m0RG-NA=$9mi64A_k(CO3O2R!prHO$9=fRQW3DJg z=+aKj;9g1|*_E%q;eUH%_ZO%u0S!>=Jr|;*#dA2uCCbX2QjN@T_wOP>5xa_mC)3l+ zh?>X2+wMZztq+a1{Yi1Pu&~fzTy1C=oNqzAGfbhIa&?|G?i5Eh8WqWo){x)v2tIhn zsXS&A)cj3}vRsR@_6hJOuDwzl-<>7e)jI9yAlg0yS0)uDzajb3hCZ+BuFWTS-RcoJ zEpf1e9l7EC3KK1 ze?PnH?TN}@eg+^Eo}_vH4zdk!=Lw4zLEqWizo-@iT@c+8i<=l+M~~u2z|DKP{2j3I z`42wG>PzvJwu?#5cHEV<`(}(^|CYdaF@YgU(1K&=nxmic(a=Msk_W>-npLTq0Ec}l z#T&tE`#&>mur0aHhP^^Rg}Q#^|B5NqVCct>^5iL>XSJbVB3F-E!H z95RPmk^EX(aRZ61L^OL-b=xNQUU->2P!GGQ8)i%n5cbe+|CgiL`{~m3;6%DwU?Bg& z`Hy-={<+coIJ^{>MTUX1A(w7J4K+ zTKdcc^X^!JBEneN^sT^b!7t>{*!bIveZghki4u+j&u!m4ODIQqgbwYU7v2L%X z+0@>2%=Ml4CLW?5yg45K;wUGYdwPMaM$85=m|jFItX&e+sr<@3i}3afIsW#;&vs(WU6qy77u}i!IC+P zNslHp5sj)TF+4hX+gce8HB>7O$`ZTvnglDlmUHc|nRrUm3`Z8L7nZ>a^lg^%f|S)> z5VRc&yZ4xFZ;N{EY*N0)lAkPcLHIvkSukY}>q=U%}&;{d$v&H`?Ue^pNdykghA{J>{w(qVDYqJL( zkU3ER(nWWHh>y7+s6wR$%tj?l!=dAi3`)&dU^5re!&OF&WR0lPbjbx1o_U$ms z&2%@(!F46{Xr+Yp;MBIl<-BC2+Mn;wpemHVD_>~mE>z244I7YQx+a-LP!Wq)t{ZfY z$(M3BA530&gJ>BLv47t$Xt5ml-x#^Bq}G`4Ze`U%emq8QqhOyz=Ask9h6PZ2FqCBs z&oG4j=cF++GE=CF-cha&7qn|fA&{8zUqE)2GDdq7^$gAg;@&WuUI^`K;y~e&)fDW{0<+S$)u&XTgdNuxTT*H3dOMEtNl^mtyGPg$|y%Ug6fPA}KLg9Lej zJ4Yfd*3nT9HmAQY3Jj$Kw8bZLheZe`{-$)Iq&M2Ff9lnxNHK}cJp)2Ddv!KNn!;eX zR{FPRbz8j}VaUPUpC^@o6@`fe-mUcAV>lxqZ{NEo4l-?XOyj(Hi8xE;8GMsQV7ES_ z5RM3+c5o}hvj523JG&(ab$SGI&r5HL`=D{1Yb!zc{$BtcwX&GPE*f1^09O1F*+0R15=e|$jX z2Df?;oZ4Jwvv4~-kda@xEO;P8RxE(#w{<~PhJ#@M1@%f+R~`lJDNEoupd+PDp`o1v z%`G*_g%je*b~zjS-fje2^!-rE)Wbe`^1GsI7vv6n4MbsXM2u}WMYRw9wD2t<2Jsr5P61>WqD$XN|(6%LGL@a zjlkcVM05q^tXz+FO!OjdgvGvLSZJDnxgxGkO@e9-f?B5FxM6nuI$e3jp)`LvA{F1Ju`>I{PzwJUUQ@GnT#H4*;pT|_HDm<#tEqs&GSnioH5n8|_H zqDE8tRsF%)6hH(~N01TJ=053&@f|7)Q&9Q#8C4|ei;f70vf&Zq+u9QI2fd%?VDts> zw>0+VqAK)dUlV9#@42nd#GMUduKTGmGxGY|4LXyS0jrM#8yZ8dEg32~6I{>g7DHko z=+-zp`F^#F_51|39kQyXtF7|^4>WFHj#HVXzO8ZpKW)fx^tD#Sc9wuqmG&mPXQuqA z5wIbGT_z$6Ps4#8PnHVIkK$9^c%d_{mW@$=VP(H=C|ha=E75TfN}Qcy(|F(T>TU7 z5ECY6{Apx`1&ssW?DBtXFUV(E@Ay%i&r89IQ7H6uX3`pl<G zWxp@OY(ccy>O{HW7=vlhOW`5op}8I^gx~Ia2^%^(I#V#gjOnD;ZZ9VGx89T}D&uQY zLptI(D3T3+z#UoLu>5PRRK+Rp#6qYyau1mZb}fXi`4C1%t^Jf!t1aGp`PfN~(Y^I7 z*`7P}Wt$CT2eA9o*L91ZXI4A}Uv*_en1A_z%7oDolV*V_GwXme2yYqpeA-6Senhvj z`p&Iq^~7h^xf9vxpI=p-1;XCA3BtLWgDocdg1OOE;skXovz3wqN)n2h2OsGsoq34E zUr79Z?f@mN9Wx|wsl^|&RDYrIZbO>!1rLI`B!|5v(U7w#d%oSOp!APqqLv`ysGYAb zvT43jyp)MT4OlD?b}b?3&L1G^9II0?d{~5DeMgAdm!qtJN!&0Q zY~7zQRR2yl3Jy9`9cA}>xaXw*ZwKe|Hf7g@L7`NBbc;qiaWbZyPlyu`j zJhF;S7Juc#>hp8WZASGRi^gO1I5utfL-vEB&nY-JAE-A@q?2$JNLK5Phq8JB zB1fF4J*tC|_9o&?u=1{#QwFx&OH$+Jb!$e5FZ5XIu0HM@)VohprKoT$B+(ua1Q|4MYr;7ttY49?TZ!>s-W?Be zFqrp#5zxKu_H#`3^XHWe;vksHeh(6V;;4EIo8UzIjOv^&j}0V{1CW!45Fann(@%iY zNKrH3gp+o2@DGDSt9sPv{ecBmgiTXk2xT(+tI>{JEjTTpPn^WSZ4>i^9%y8GZO6+T zcDk`)GY+~D!48)3e-M(f6%ganY;jF^cD{IX5`yG_fMI_KHBN$ctt>a!!%RPi67X=R z^3%)Pqe-}pq+CXl)dJ0dv-hGIa&7mRMXdMCHh(5{b~e0@?ewv0w-yNtYLa(H?e8-_ z9}GUbD^BNdd~fJQpKmA76G6cVe{S98KR=jg@n+_%ocLl{FL;T5a&0YExTD*3Xyw+$ zccxa{X%$2+c@|AoH^BM9AzH;Y1|p@S&1j?7;&9|g+MJT3*6m?mfuN0`o-WFP=SD7M z7Yh2_*>L<>s53~?YA>gVdq>mqj`jmt#Y)uRkB9E0;n7g2o4iWc$MRe616^CFgS5}r zX&KTlS~>DX4V!#la`_V4NkFDr_ zI5@8)V^ksPt&lr*x!y^?pQxXegO(MIP%jqzo5XLr|Ffw*J1?9rKwcnuJtK>U50dG4 z^C~5ldS{FT{yO1G+%6fWRoJdc=@scD^qq}Obg~{fu}0KRSx;ZILrX)}Obl|YrX)_? zf7|cc`!uX&ueIjU2|Dz8S9lFGE9KLX$74#%$+Ou-XgwQ5tQy*I1d_Y(Nd_UA8p^l+Mgrd7pI;7_ zK`_~%wbe7XZ_3&by%~_UnRd^5f0q7sdR;1vglpz!juD{mO?Fa6?TMFoOa+}||6Tw6 znWVSe*Y&a7g$IN;Mw6%#_@QTBP4ydoT9%^4CoUJwSr?D5zOid_(!5LzRZ&}m>1=Ic zb!v;sYOEL<&!%1V{q(M8y#Yka52D#e1xY#swP6&9`hJx< zKG@7#cMo$Py~^su_LcFImQ>Npr6e#8Upm{Mi_a1&q50aT2pl`oeQYm)gnK8~u1fs? z(GC&XHB1425em=bU4`kIu=WC%+{s(LLqaNS0a#_-}ALju}?|=0^^^X3J zxI81!%#nyNm9Brnezy)t^+pOp#uYamowKk z&bjv`b*L^J!`o5PpU#v&>tbwYZz8j%5$%h=+3@Huigmgkx!(X>C#qG z9h6fb=4Q$18-?WHt(VTG zvE(dA9do;pVAP91$FR=?S^Y~giDw%@5sx>^D9T#y|t~?{<13!Pl=F6PBwwQ=e zUm_!~?J}A}7Kgr|FUA}p*VoZ#{w%QuSzXyXYSv*XS5iRtK}pZu60F}I@ovC9%TRf z^OJP_pCyBg`am(+^gHPyQ@S@iDRt{_IliE3u9tbqNvv*XgDqu=rNZII!4cr)dJbav z2~V*9rv6p3yXbsI9q#-kj^Oxxr0i_3TJODO|O>-8V2?yL&N;{xiXqaJrW~rxCo&Mck+wrv~SK zSveW4CEiy1^2SQbf3Fw>G=^31MS$QF@a>ZYCR(zC=eg$>JV^`{Myg;*`WI_vMgOWx za2H4!QW;X{00~o?6L%L_0ykZZ|J4`Swen#Kv7FWy+W=eP;oR)QjdDi)cBQ&NimYMJ z)mbqUB13u_Ch30|B4=A2Z``Upci?z|KVd?{x~rap4uKCAhiyrD6xp!-=A!-^o9irl7uf90Lb0{lN~ z>Dx}MrUesO&@oJ$&Mqlf*#&4^3(p6Xkc@?>QwuCQx18N!mWtYLm+>}s30;A+? z?PB_!+eEP@}>Ms_&HkMr#SA*9Zbo+O-`x>{%Ner(( z$@8pW$dA)%rEo}q%iUxGJBajmJN35LAWQ*JpK#0fm5v-YWdj_iTg@47#d3sISAi}T00 z=tX3ZAp&rha@Y<|Ovep3H`mF^YJHo%3XhO&y>-of3OYpEIl=?x?tbkD9~5!Yv^wm# zb{CNeB%e)khR`6A-Ve4S1uwyS+TVNbWHq>B#bYI&udfjuALG#pa`P8|rncr#G?}a> zH1rA;(e2B(n3H6jZUK*Kr7|qkx>I*Opt64>C4iVy^-iwo)qr(`HQWMuabQLi#RzD; zgvUjOaRC?3)w!!Rfo<^vRtkzFL*xrLa4C);(Z6rM1AU%7jhx!qJr!nio+0xE?m2j> zq}9Vr-EEqxb^(tov=;lP*6R{z2=Z^hd#+sUVGwqDDl%NpZE}opB5WZNKTKD z_-iCO40}lG{%gO4ABZ4GqPFj5-sFl1TA>hFH(Yc$rK~9-i0GE@pJA?r|QdHjEsk2DTf2R^}Em zHXn4|*g$h#UH87~o6(rDN8QvHHeTU*UL{0z$sUhe8kmJp`*qVXMKvF&)*+0U@?6PuKxMltXGShN}7g1^E2_}zwvUFc+tML@HPzX0?Bs^D7cHs!%F zIdSEwJ@YN1cegq1N<#Y6R~M9H78drcgcrP|r(Oy?_@ZXpd;ZJqKA2M1-HvZ_J6`Zm z7_LC_{gx}+3WCSH&|%6g=zK>(De+QI?AYP*5iJ5;qKCP8<{m-l9Vz2uT!tIPV!Ei~ zcywOA=8Qmk%{BXaxHBoUNpc$P4|~M~%B&pvNxz9ojRBhuyfk{$cler#gHj8x$OAQW zNO)n@WvPO7>QVj2>!@ko3CV=2j7(hf$Gl%kgbZ+;n07R)MbzK^~ zvf|<4MnB3<_41Ot z<0w_sv;_t-8&~jDLWmHm=&kdZ_Pgo$;fNftQ>qdPxN36YRHl@Z5{RX>$&L42_zqvb zTr<%-u?b(3+Oe|ClBw-}cW)4!{3{!YyExnBPEQDBXjflU)27EHFLxj&SkVG3nm9^J z>YSJq7N+a=-zcsR5ObuiDV1$JkF@(e>oS(;xfvFPm{Mg1@JX1~*AH@@gKF4IGj7HK zk9*-BEjL!brrz0Fufd6ZfG|b}7Sd)!9(q%8-mV-wv!QKNcF`jH`7~?7W9q=7Ce*XF z+J*eN6#zXnxulWIFH4Ja=6LWNBImx{ie*+cR=>2+actGJhXY=5nh*$m($V`p@K4q{vN6s4yO!|G|%qPHylkx}- z86&Nzp1M@q7l$k99x~q10IxHJ#kzW|=KanUV|GMtSJp1i*vZ_OL&%dOc7$-Tdn_MU zu+uQi1y5;82_nTBn9}V_dLFmbdeDKx-!C&3kjI@r+oOThhXhq0jOJdXw-eDet|V*a z_R}svhM!ogWhlOwEM;T}f;|qY(l3%`jk?f1jfKg_|p{uO)K6 zR;Otf;L8Fm2Vr36rWJ!lrlaI5)9-QD_wrNs9CXJH1{%+Rqd=CQbbrj(yIBm)|7AUj z|9+uF1ilsB;-+Lky7_vVDZFe{2ulri))a=LVk4OtiS9|x-_Dm%J^V%gfF;jRyNaHR zgqidnOBEl@wZ?YU@-A#L{uB572UcRS=7sRTv9ss5V{_~O8K9axRF5w-Z8$)AOCil6 zq~=I|lIZyI2gGc5=AthyaA9F#;)SH?=^qq$^bdQV<%Yldn|At4^F&t|X?f@!OG7i6 z_r(Ql4JXN)wXIkZ*FGeo4^w}@bx7v9GjF9cFX<{X2_<5usna|#rwJ!PeTAEvN(X3# zhE9IV3NYDbX70ylV!9r?LQ%yU)ur#EeP+TOH#@tza6z}LLWnyXA-)s|6p8|1fVan@1_nfa=OX!qNm*e+=jf8oMK{H?by#L7xM zKfkrL(EB-Knmf5(vJ~xr)OYY#Y}6&bOZM5gf64A5CCL2IuZND%*r%4fp#>P{dk zi{P)dLHJM+;Of>(+9eV7pG3kh6}D05@+TuMS!${LF#lz~9o{qK1aSEDa*embtFIwR zQfbXH|2yHPPGvStR!%MbJVc7_eKz-bc#r9gRe;!Kvy1vCVL4@-q7(l7Mab#6qtWiG z!wwnsJeM{(#(Gy}1k6p3Bu9@rGVvJ8$D^tD<{1(7@_Z3x@K?0#vcC`+T`dlyY>BDhMMM*p0_q!PEcl z2FsW-DyLrxtJa$T;N|M3`%@whL&i~JCDvP7fBUKP9Wx`0V8q|}0h_ohL!m8?8WSt+ zPjI>llijg{x=iGFIA5pnbTTHeaF}%I^Y_yPS{|LrWQe&9*Wp9k<$Y{LW<|uk+{~6b z0ReJeDH;Oiicfx>P(wPK1=(^GF_4{zgW9LG1Nc=5O9m3qx-&yN<_#;&Ujt(V@ko>tKrX+AI_ zhOhqp%o*LZC8F_%g#X)7VyV;DqHl*~mu06^Uf0qK_*U?fg+2VP$kJKRp&iJH=cx6P@|{{gd4+vC)n;JspJ6Wen)Z zHA~JTF)X;4=v!>1QFgXT)e9_G@n@C9s~uh;FHXkBEyhVf@eT@Fwd9>zFz>JDF3LL3 zU)Bu1XGNL{ke4{K^1ZeJ%<;QPX%viOi4`XxAV{7$X1` z)M&C>TJB3^5uyi1q9QwQo8u+UaHRv!l>k6qQS;G*=YQp1&t4SN7Ks;^RO~LriHAys ztl{Bnh?)Me_FU~JqA-pZxJn!2acAwbBu!3D>|S4Dg6|v5qz10SKuTB);OgKYJH*KO zrKRtEz-XnF2?0-6i#`$``MWnq@NV*D!k$%^9jrwK6qnkA;1zP8OCH#G6@!l>WZRe$Npz)V`BZ&jw(}+}q2Q~QwZIsBYH>^Rb zBfgeKvw#-ts{0i#YLmx|8mcYO#tuz0{*l$J)N3Y9ScjB(`-%AX6ziMt%^ zOrS!S>Re}kS)?3tj;Pd7p|$w-WS+dAqAxsti}sk%2D2YW?;tt}loyzv4ak$_aU2|X z%Xvyo@Pm_Vay(l8i}~gPGKpj(SGurjeDu3r*ZYFag2dvRQK28-m_r5IJ{@I5{}{1? zV>TPU%{kKjl#|oVLdOMcxXf2JnFxg$EPjtr?yT?0+iD0x$hR>6n^i@ zXb#pt$DTd!qB7nXw&UhcMouKFN^JcU&!cfO?q~8q-)@`SEDxvsQjo<21eHEI_J3+A z<+e7ivt;6#yut@t#z1=C;t9TuskNuEu?s6IrBg9uPcjLMy!U1N4=mCN&v}Q1H+-#wN%kTZk_9-SlQY2((z~# zRE8LCuaD1pXKdsw%YEVgr@~|q=GR?FpD@V{Z)ChhTgFAsMSQ{|;M|UgriC-<^D6#v zFV@j9c{WC7L)*vqq=2|M3UKU2u_NWIDdh%^O*R7F&jsMu(A&-oVh=OBf7cu6LU3Js zdr7dsziApcZ;^AC*>;!lZ=(k-0XGwS+dklfjY6bxD@I0a{5mfryhIqH4i2o7fCC!( z$t6uK9(^wmeDld?dc^d)?%06~w@7KzeXAI4vM>~D=sd`iYwxpn=Y_9$=G>`H*IB0fo9@r%6z*m@Yg!AJ*su0}irb9SEgopg z^_$d!tuDYyu*P-u$(-bAIQ@Il9n>jNK>?h?m$m*M)5MLp=MI|^Vxe7x1e$_=Uw=PF z;`=BW%4q9~TdKPt0e7#O?qrETW6X5#g~Dc5#j9)R#xE*(|<>tjaz)2 zS+0-y>RT<@{W`ltjvZa6gnnQ-gGNrvNyAg#Bcn;aNUlwe*n=;_oIp;HdjR` z3mBzeiH3YhX;pg)kZw2tRN%1Qd&H{MFVAfjTdH&sxoRZK%#TqEB4nca71;CUn`vsi zs|#86@q8$;xB`7I7Q})C-te@>2xeK@fp2w{G|EI(s=yL5va_`Cr<~ z{|-*WKMxQR|F#2nsM7ht_2PGtk0jjas(pht;qURu8`1Z+pp%1c^D5IrZvU8rra2u>FzHeio z7os7xu{D6g&X_O8^aGd*>J2wiJoVCU3V`sYK6yTwvW;#<2fonfc*-$ZDNO{yMkWj8 z_jjOL@#fg1P9{j6m?eEeJzSj<#4;jNXlp)7}LW|qlzd_>kOv~Vo>I1VjJ z&V)LA&fxyx68gw8$A7v*pg?WgK-+pe;;=0Izr{)FDO$te=&Ns8TeHMReHM%BJeA0i zJH)QS`dJX#`6BG_Te+X0)L}&(TXvc=F|pLEY@CobB|u+^=$Eqa*@^SCx-aEDMi~)o=Y=QRsqCSIW*KZlMCrBQw>{hb4)|tidCnU_0nlTY{f$e z(2sGj>JciJEW7@M5a&w0|2nqy|&nVJG$1O(>-kLP?QRiwOnwp&pp(y7;2+V03lyIf+5;7__3<%xXO zg@&5adO~agf7o_bM^r>lr1R`su$WVlJcl-HrZ^IS)s9&VDyWQ42Zp~n$V~XD{C8DV zSKlDVBnK6s-j!XSo9{QhC**!k&fV^1-CJrED2uwleuTI*n?T)XX4eM4P0&`oZuEHl zbd6>0&mI0tZNUDhoyAD+13AEKsMzIARrM9AsQOhNSC5|h7;Mwe3Dl>4d<>Bt52V~; z2jg5el~$I0z@1k0Nt1$l9FnE#zI@@QrF|N9v+R#Uu_p^wYTNZ1=$n^gK(40FbpRt4 zJAewTelz1W&TDHt69#lbWF3PWAI02Dje5hAt{i?gd`S6Q@XN8T6YqZT4&}>Rktooz zPxVlkJTsN2xn|3fV_h4xXHbQk^^joj?2%WNZ@L76Qhu3fxRaE+h`_=`7%SrbPA+9c z_KCx*F?3`bYt4rlw3nS$efW|!BM=hsQ9Fj?4Mi_#aQmSaY0He9Cl1?z zxd=GXa}X}{`#XgQllf#HR}c=dMquhpK8$b0QTig6OzC2^m8_U-Jd_Ko>v0ImFfB|Z zzZMXkUCcWaV6iBBxnixA^c8j(n1UK!A`i|8A!Y-FY_>`+dl|{i%)Wr za;AUgmf&s=GN1EUpLthduz=vg=8q>OABmrb*YbZzMhgYqH`?e_ndS3w15!8_qm`UL za{w+#HMGh6ZdCv&lbaGUApUZWl_*>iVXcG)HzVBKRCTDw1c7J_o?*L z3D?vx8>}-)7xXZ4V<@0wLLY9V{=E0LLv^|9b4UJN$JQ1Z`&k=ac;eW{tYlTK%m3_u zw`57ciDo%kGRH{||9mGnfU8oGz@_C7-&YT`fk)@mOrT_k2V$k+pio zrmuljc-U+(Ha7XM~b* z`^4Hs`I%>^!SY&kDm3ji({7vLqcKffL4!9dEIg#0NkO+O;o(abjJK(5k=q9e3l>FP zVw@9cSM5CaVJ@Z&8=`^3qST+RmsFwAyPZYg>1AT)7zF&y>5?YYoA|mi?Uz`KGt>n_ z{Pu4w;#=b|oGPHvfJ^`bi@Gu%dBzfEM9GS!0}2-mFQ#V;h_ReV&Py=V4Y@h-1(qptJT`=Ux^%gB2! z9X91ElU3G;#}|Pa~hySiy;bu57=ZcPB!rfi(TF~r{V6$nk zKh#BkJmx%9z^yY@+5r*f@R$1CJVRU1G@p|sZV*EmNvIq0;hH7y${s-ut^fc@xBxM_ zmY3qKT1y#UP$#@w5?UZmJt1Pg$D3`Ap#Jrta+Y`7(le@YygxI^u+$F;ZF`T$>-6HG z#&~zR_<-0y*A^VG$HX95XcF!!0mza8t``OqhA=9jq?sP1+7Kv$# z4zCou!QbFW4yD2(P=t#2AD@%?PD6l(nz!GwLvloD4&4(4dQ}sx_uJn!EJ#Ai#+V6h z1Y^EN-ogYSj9X1@IZ{7al?v$d%enQOUXER-hS4nvK3fmgESIk$rTlc;bb9N8G9_LP z(c34}F#2i9Z_0c}-r@N-JQYCqK>@&FAts%LVGJ6|DXw z1+emFnmYs|IM3CS9`(oV9k0w|v6(hdXYfQmqiI;=L>?(uVe@vJn%WXe*xiO-OmyK` zaCq?_KJxufEFkP8%FBDUFqo_Fh2UpJ+MYk**7ku*W$LIuPN656HKx}zhl@)Gdb+|4 z+}EA*rIr~oBOQ5IHM*b(yty#=QUO2wNxmwmGD-o{3`kM=Gw<@qq8n@S=AXN8QhasD zuzXwr4iKhbJ18Ycm5|4~dVi92zGN=vNtSp>T=XaIz(3u{roJ(k+s|VEc6hJ3t&<)` zjW>!)RscXZ5Xr1)y5n*}oa#6z0~$`Z13SA2LQAO87j zz9!Yd0EcRmg98ZpBgudtlp~{5rTWczL3c*Z!&_Nl+UP)opEnLKNd)WUkSg%@BUEn(Q;5|{5RRz98Ve* zCvv_WN)tW@5oL>vdtcQ%JzTsHxaIAxSsh?RtD`8L`qNBVC%u3G+X0;NssqSwO~d2t zsiN_!mcPI$>CO@rAuP%?_UFMQGd7U-pL3d-?~*p~)Z{uYTW;UZRJ{cZ`=4RABcgFX zUws{h_trUFm(sL8hTQG#L_Yt~Gb0GAPn7*U2fVw=`CiNHA*@oFy%KhK>0o#)GoI;{ zetmNJmXYAK$yT-TjV)DJ(oHm0wNMgHadgWWnQ)ih$KUK70<4qzz=+vCV-vb?QZ`Ip znp0w!n=Ri^a1Ml*yqSuxPSL)X+8H%7&Lp$wC#vhony(mxRg0(SB7kw&YoaortOdwC zrh~Nto(q_qG21Tgl&s&f+Fgal+H}-;qEU}>#P-A|Xu3ma3?}qWPYz6CN-RC61vCl1 z{SJWcj91wEWtneGSm*P60(K;cUXrW5gX06+|y0DT!9b>cMoG{4{v#B((~fy?=- ztWy`%NyK0Hnqk(a`F$9VB#_pceCeJnM`Lp$gO)eOn%v(qWCD?=N3F0_ce*;+ZGTB0 zRP$&%A1E-~bFYTaVnW4Rm5c*8Q2B)*-aFLeZA(cjbv5SSOBQ7jg&{DR-Ok z3Ivg{6acrO)O4i?hH3}5SZuGNrvs&e;#WdcDOsgozLuuxjwV&n?>c`g&D z!I+qN+&>Z@tg$WkW~trP$XIFaTM!$e)j{*~FSQ{bi$cWikH864Iicy7a7Y+?YWTaK z4s>V5pZP3Rjen3)4#UL6!doKOH!L@3$4=i6hUCDfE|g2YjW%v3MD)C;vI5%@{8T+?v(jc`JYkhcP_W5HCcPt z+re(5iU1+q&P6%8caVo@QxG|RDjk9l8>P#}?(s(v;N}gIVgT)xPoglTMxl*Hdpgy~ z*-N9U0Mc&nzdv+g!uWui1y?nFTJLb)1O;@nHRzm?E!LB@0VcC)9PTOM0H{ainx5lkYUREjOJfIgo4b zfi$T-{5}*!SPjCRmf&|oL)qjgPbEa+`IW(Sqv!WTTq~UQ{t6W7z2kY>*h)jV-S){p za%{(m-KsE9hz#kQ*}f2t58g)cO*nk4$M&$95`fARo#xZtwI2grS<|2lz( zTg-EKu^O>2M^Qf~+rndeH!zur@OK`GyK3}YW3CUvK63)AOB7hg#k`~vu#O@g;)3a| zW-hZN$0Y-@aPyLRAb&mEDT8#0^uR3-zDFI`)#WctnaD8xwC;AMziPonR#q$>pRCo! zG$i>$3xc%?y`NXFNx)lv1rHZgN2sQ9fNtbR(9xd|NBYk<`5aXWH$V{z4qP@dx{{XtlntLQ*z$YC)UDXP-pb)Ti>{8QXt+S(0on5;&5FjK$x66?yB;OU zoHilHa?ee7-G@`T1`P_r6WZ4#$a>Noi)WMJ*u)LCK4`Q}#^6f*iXM2GXZ*Cn9wz~o zBMv0t0dPw766(__Uxp)o4i2!X?!BPp)Ik75syrM4Da5^4E?C3)2r+6kjTLk6j?#jx zt3PK1wU5Mt29MNO{qydrD3;qTi@M%~(2i@wfCld<+1OJ<-4h`%g~asEJj>f|o(mMn z!C%!roc$A@7HgfAkkUamyy`oDHW<#6C5Ydr_eFhX;7s{-gML6%Q3EvwVhG^WaZYqj zz}J3OXakJ+$#2qSH`+xb1~kez_+eZ1mz!Rx@Fb^OJg#ofY?FqaNg03Nr<+xxD#n^9 zRID@d(f7$Qff3|O3r}r#$9!#+@S z^Ynp?KWK1E>n8+qx4CU}Z)k@4E0yPX0FSL8N}l3Do-Y1!?UXFH9Q?uo^i{(A76t3U zq+jE<)hTjyRpVvuy;+4+ zn|Zx=;9*PL>VUOR_<)=}IX!K-DX*+xfnT})Is$GrvbS840g$_uKynp3HLopr?2{b+N-kEs`y;I3T-t;Ym5*PXJU9-1dA_ zlVkG+GXI?RgZ=|KmWF(*AM!yR6^Ctu&@m^k$O8P>jeT_UDOylSZcm9}|5?Sdw9-3* z`#(e3+px=X?EU_O>R_HyvIGYV?X;gwDEU?KoNjdcW?#X!PO4$Ao>bPpAIxSOEDN7GWfsu_u~4ID zb>Z(6lajwn1F0zi+%Iw_pzmeEvdSgjRKMpTFTV**Xe7FTIS|WXJJWc9jtBZ`M6F~* zLAhK)Nv!&Xwi|d%y0p3E_)U2YvL+Jh@sd*9WueKZIWVqJjpYd!n1xpE$k|Th{Q7>gbfx?_{)k<0Zx)Kdrwpp5iuXe=MW= z+lSTZL)iA;oME{0W(T|$u>B8S-XF26DeeuS9Q#%2cl36k%-pY7*pc&98Hkx= zBgxheW-__9_VZ-kR_2VzDfn+)zIaQ(`6d{IotkxE#}vs70)}GG@^Xh@-!baz3@zCH zr*)R#Y{5>3iTeE^#aJK%c@+u}w$6jg`RbN`(2We$x|m$8%xNt^_~++UnRBW9mrR&S z9dfG2$s9YpU`ljS{EIn8WFBlefO^~VI&+X#TWK9rYi+UoW!NmqDhzj9kGNA82QYXP zWyg%td3eSozYdQq7FG!jjOkKFd;jiI5WAf#qTA%-i~EN^&y)1Z(nK&&GV~?7H%!XC zmy1Yh|8gmyPJ1q!IS88YvKe5DWF%?ojZlQ(?a~|M+Ud>`>I(qW5vld9Wudoy^_`D4 zjp*jvy&YM7382kuj+_}-2^JVRw!*=VJwk#UlJ`a}XIO8w7wkI#^jI~{(7i%H@u(t5LeqiTb+pb`e z=4cq%&uAP+$EXA-3`|ZwKkuH=g(8a~OSZAVBuhzRAT=!@HTSza*Pgg^EGc%ijnenH zl%?~AM&-vp5bm+6%UCA<*AUR;QsU=NwXC7_B*BcRwz@30VcDsDN}`Cx)>TB#^~bhy z*7ZAiEegD}4o;RvA65mErjO4Z(8F{m2D#zclU2(6H0P5KB#**!l3q4gJi%a##c2bv zu^B#gB7%y5qyEv_0hWk$$dsQ!)Q6`zip2=lk$&+2v2av7EYuSVi!Aq7JsI$}WPw{9tdX=%W;t7zp#?;r^NIslk z7xJEcP0jZ8_`?IApQd!r$kKe7@n=`r7QJ|@pMb|9D9Hn7&f4W#CAuHS8S z=0uM}ZfmJpS}atECeBPE3*{eu%o1KDt@lHqvQ_PJm86+=sFG7#V!-3SUu59}hQG1` z&J_O}3}FNT!^=NMkPW+^8*_oWpaDk)0y%a|te;peE1%y0&Brg)Wl?Obt0v`i}J^_d|9QV>2 z{-)}`N=QG6y4-&6_9H2`jn z`6?@L^*vv{a%-(Ks9tAsgzq;|TZs?aeNQYIt?%7HtQ|K~A;yVZ`Op;~D z({5~DzF>HO3Bh;8s@z`@;rl7rI0Ul26gXO#A^n{o^xI8=y2Z@@LHvi z4O}5jUu*H}@HIZ*`=`6Xjj+MByr@^#w-R>F_3FhZAp{j7*An3d4uv%5{nm*Wk8^9GO4RqbOjq*d&bSoAd)_JNTlRa* zK&*D){ioyOJNS1zLIbd#M`_xU2U>50pUsL#DbwM(gb0RCyU+H6I~G2YU;4(3EpgnJ z|Jt@`d6J-@6My$XblkWpV5-;`(=l`6>gHzs5xGsUkqF1R$-y%P3NjT7P4>L%pOpD3 z5Cj3!SwA*5w%%9CYhn8twl1Fz1Fv*A6TY`N{P{}uC_4_~;8bTzygsbgpX?{$9@^nx zH(cA6!8V5-_(!#no8$&l*|gfa*>>sitTkAeL5UOXlIg-!zyd6{TI3-x8CT{t60722 zjf-od(XKQTw8FY$p6j3*?o4_oK4?^H{BzUEa4v+YFPvua@&&&n^24nyVBbd|Tqiw2 ziaT)nB&FjEH`@AeE%_jk`NKApp!lw+pS&Ugz*;u{wzGTV*A-1wg=*#oI0ZjHs^L8`lQ6=Ie;HJ|dFHuF6;6uNDrtGw@tF z9pK<&RFp8vwwY#n;-^FC;0C~fMf9hfdoEopM#6pm;LxD9so3iewUPERg&sSwI$l9% z%#RNfSk0Yd-LaEK(rc7pRmD~t^KkD-1!x`B-}~@LAHXljoZba039gAs%ZKe`JbjJ& zg=h^}rNgf>?mz&0u22q^o-jfi`&*86lbh~0MxxNyhhc zQUiyY%JRmrNY|i)r77vYEkIX*nmn3q2JAZ*-r^ z+PC;9Z^sA47dZcQ9wbY-ai1OKSEkOx$9C0~zuyJ|6_mF*xJB6Y-9aucSn48mLDz>k z0i@=c2M1EWcq@3;`fPK^f4CW+?Q4jY!wK4hg(IK)eSI7%{PeT3)&0dz_(u~oHRL{T z00K?C^qq)PFsMDzivtj<`Z)yzh+f~gW5`NjJ}tqUzv2~C3X?9+1>3h%#d+!YQbxt6 z>FHDLR!y(?xN@1C_< zGBY!MeRqIkDQVt+*s5~Z^=(~Ig3im)qR2aU}9J>KgNs}t&p z(lHr0!kfy9eRI+hts4%7OY$blLBgoR0t4=L`EYTg8vW~RrwQ*loF?AJoPKxqzZ~-X zaoj5A_nMnyidK1pW)S`}qui1%4&lu&v0X)Jcs%xKXz%7G1m!7uxx0dO51k^kXSk#T zLnuIpYE7+v)l3CYG&TA76A>>e?m==jgt`c2xQr`^FzFLJKvrq+-s2`uCLg{GTf4ZQ zNX~>>>)gi$tft`8eIuK0bkBRAu=f<-KlIq3T5i|9#r4~`s4Y@pB9z7Z0j3y_d~3bd zAyeCazuOd`SE==sTR;bYcBRjMHE_>-JZo!kZ|qAWxt79;5s9|J2BWU&{<0&2KF@w> zeSJOoZAppeQoXOM&-@qg&w-Z6&yeK)bhP|o4||oIW9ma-*7aV=-*T;1^ei|v8!XP_4e3P^qc7lbalt-7ujraPLdWssnc&G}xJ*`60# zr9qW&D&W?tyiTv(Vr*>ovRvUxV($pAPEc|W5^l+f#^qg>;y&M`=Cg>ELlDZ|Pm~;I z_pQm-$Q3;4`O3=l*L=UgHiO%v{DQ$r(*VuufL=1;cG8#R%BBw_CgdwYV(BuOvt^{qVvu>+rh4n44h z=piQvT8kn7$u7&tR2!Z@|A_);cl%3AzaH%{?k-?!$~&EfFj2LnQqtyxJ!?D;PE+LoQu9FDfr_BOsrfad3LdHcvu>CjU0!H|u3J4^To1#ug8m!rW=L z{Xd+e$k>-derW_p{cKN2q2 z4Zh?&{`;kGR8LMrXDQ$HQ_MrbM5{{ucx5j_{`W7BLqz#pl_ff|Szd6J1sspBoviSL zAHeM%;Bys9)Y9TnQWPGMe-vQIpoO8G7_7z^Mei!}=$2UVva5JzvTISthW&~>;KPE(93 ztZV@``_>#J3hmd&p)hwpgvf0KRq5w9JR;q$$U2# z#{<{;u{{pwt)%uflVgTI868u*9T5wA%I_lw!aG+I*Q-%PsShBAxZoDv;}Y!!e3404IW zNO0s!judGk1u0XXROF~5N@mFGnWd$rAPtt>mqaG(`;U+1GEblH$Njgp#Zhskto=IZ zLy`q-Cr{?~_`dsTLPiJwY&(9~a=0ZUIbp<5 z-Rt4s%2#Q`Q8`@}bD6ne4+n$%IZ(75GLZ%uboQ4_-rYU&j{f3j&mqG456PvJR>4uu zu1klR9*SbG_ZlM6lq+U8Azogyx|TQGmcA31ctrkEl|?l&d3ka>w-_@jMb1w_8HS_Uv|Dv2}y0QJ% zGg#MNS9&j@>hL62bA@3P8cDDSUi6Rn{X`7;ldzLpUf|!-1A-V-0qPe4y(E&yG8hro zPQds4nT)X-rIMkAh5zts54Jm~n3%S7p1-wu;h+@J??WT9a$5TBR?)^B;?sdu>_1g0 z0BRNeae8GtaeCNQI`-q`qjxJhf#tshbjPN_p|R`YM~=gtYy{EDe6)*iOc=4TZG+|| zF6;le^Du|YHvaER)hU4_OT3xF$`SW7-w(XdIe$R3CBDt0&XxS{{gOC1IAmBq7Lf1n z|AL4Q&>@{Gku#+@)u>+qd!5*PGkhCx4ek(p5_!H$na5P`nZqpjb8ZtX6MjfucQ~)k z5NB4c-8B;bCqx!*{V9LxQAPARR632#ky7F*_XW^ zFklv(cH|7HWCfRmN_qoS>8kFc$F+AI10v#zp2vKSV&0TWwr=qk?zbq&xk)msvGww~ z(g0%1NnE!YqTBvOY3cCGE^AXY5p|arOqqS{u@9@O8N+l=PeLXtrA`7$ZprI6>d4Uv z?V+JWU;!QiKy}jfEJFFgR#{m&7=OuMMz|8%Gu;O5xZnNKsMjtSmV~bYnoj5{9T(2i z$d!6UYwp$k*=Ig{erBe`#BY~ncAqpmSAho?NXR@HaU#;jEfn%fngQNvh7VBytas=# z|M>XGGx`{Hclf<_b@*4tnjuDUaQdLxS-Ne+6#ybP>PY)l>F+q~_wHrELW{i?CwliODyxoLwQ!zZLId}j z2;y+Qi3P06b;;N-&0%*W1PtJp^)e{~=6i*DCg^;S41=zn@DM4G=#56Y zqad7!{z6J{X2zSe?4ci&a0s<(Ss|WyZ#hANRcW!bKQyEk=XZR!{cEZZDtWfK0*<8O zm}De2!98=ubbhOY*dR$Wv)q=8X#Xp-sBRVzJ^qQQMIU16|DIz1wXj|LyVChca;tLe znwr9V@;e17#aDOv+MX~4Ac5g0FU=Zc7)GZ$-DJi82OfCQSJ(Hw>^t~*OF;mqa~NBx zcg?5GF|Z_^*sjm%$z`tV3gpn9t^_u4@7-aTk-##TCdCG*sZm^~dv!h}MD5E(oEFhI zK>=SPut%EOTtY?4F;q?t;6FbjR6Z{KN9r+`Zn;p#Z17`=k>9NEFRc+J2SY8Q=H{1R ze31_)()K^BFLf*~ieB#;kG!Rg`e=Tqa_%K@-tDPr$vL>)@vR{3=#RW^f5%<(OU~^H zQM^r_a%@qtK(UG!O}Zwr!U$D?-^27(NS-5#CGs9atnRm26ICKB^0B>r*twot%hPmQ z@LRQu+R*zxNesi{V^_LG!(#3C6HG4D_>D*iT4c2)hrFjVO2|vL7khjv|993KcS@!; z8gK;|=z@k^kk~wLAxp!Yl2JzVhTV(Miy7D2c8Q?NxeCTjS9ajFQsFn8h`0JiwWhyF zt=B`OAytFsirJ;Te4SkRYM>mN$O8l?6EnkdqbE^WY2$i7+H1x^-hm&pNoLVRmSy1x zxsR8b#T-K8I9Ajf+S~CqCkm0dJx_^#;5vb=c=NKpx*3GgKvh8uq*#YRbTe}udgd&) z{$^;y5bgoC;JBoy?ca0JD{^w-4Spw>6cUNih;TQCGNe{$PXJr?9=`|CL|V=y<_4V7 z-*slnNvAOd=DpXe5Cz8Way@Jp+QK2Q6_uf5GP640qmRD2h9RLUtn4WwAk&Pq{5Q*Q zBsbJ=L}Rh@b+Y-prGy}J8#G`2sKiRo1aoj+7}~#6 zC$=Id3hL_5^ouy#&*vBM6|Qh&^zpr(RH!MlI)Xv66pQ-b3P0k{+Oi;T20n%l{%ZOc zd4nUJ!A^l#3NMXq0=lOXY0O8c>JkYWzsIe=85M-$cq-ZhXzAbA;g(g)pW8eIM=bq; z*Wm-Cv=O%#2Ux36!VNOv*y~rg4{ADkST~lfZ??!>vK#Jd{+(OT$>V`tV)lL)!#uYI zUOfbl2z0$QF~@wM8R%tI3Q^RxZ;oZ37C3T*&8npD!lw&+>W<(|_Xnh#-yW){$Vm7V zj0bO-N>Js0qcmZk6sZF^B&ao=)U=*5$fEAHpiw`sb&lJeUdtKdTBzE!yz?0)C8N_D zn)JoHnf4BR-qyGS?s`74!^ZTR#ao+2qmEK*76PwUsbb(EPqu)&YZk5!Hibn>O9AfJ z<}TKs0shSfhZ3tPz=5DZ@!ft*_!kAG%ne8r{!zs5$$=dk#{|nZ4C}t|N_G)JE(1N1HE!Pt80qq81r*w+o z8BV*C^hcY6yQ)?;Dfl`d0`W|FhQr!cho83X8j}QvZUS<>G#c4?6?3c1^di)+=2*6QPm@atEwYL1L%-)aya0WLVf+K zG5!^`)$l{pjY3z&Fxq+AQ9C@o`8H{1ZFKt+_)sxlwJbNQB&_MGXb;CoYJ1hXA$+yo zdFEP&RA2osvm|n+Y1x(cyYV9YBC77~~^&B!7vuS1(7Q{`$zYiRmTm>v z@nMK}^T&CK*b%y#H|Asd$*?AF#jiwmq!T3{2AIB-LsTC>+M7=^3^xQS35!nCq6-ZStHux}H`>>=^^vpA7XSQS{ud`2}PV8-b+MYo#}M@N|# zbC>keO({l#u}->g;sLJRA;qM=BEJh+5*2gvO`_jsKM;m3E5S3)-&aN25nYWD!oqu`W#qa8c9~){01@ut0|JidrJ2_5-bjGL)J2~m~ zbslk%EZ#4)f2*_%h7ol18YA=X>!-+MupnKl3ZQe;4kPov3`_O&MDx|(v&BTj{ljLe zef8s|K4Rw06ep4wP+D3_qPD!YhNcO@t2sV6k=rbykLTl(`mQTd3C^Q0M>KRJ;n2Zc z1exk|t!{IFxhiHD2a2qOfP=@05>J6lS{WfR))AB%8HughZo_RN^)G)DhhKQvU1tjY z777_iD9rO*q;Iw8$+}8x`U!X*1Wi6Zd{be)8A;+7rLZ+0VzEXruvK?wxU96QN(s}v zbjj%AP?uk)k|&CrlcMPqG`}^yAGkfqLaI$Ytkq%0PiJ4tm>a0m-@ito20kPBJvPSmF^dh zmc~FW-raw`2V*xhn0cS2fwgqFV=z5Ihvg9F7>0q~qns?0j^#JuJ=+5ZzIAADjP)Px+!AV3xR9FeES9wg7*A_qDGJ^xiIwNjS6BlHuuW6$~C4liMC2^w+STt49YML5r zTdF2a?cYyCpGHKfm90KhXr)LC6cq$!`T9FozHtz+ z*w>rDy>pjye)lZDb3cjx!j_nr=sRZ2m=_HOLyXhu?84u9h_5LsD(V|fjWpcCv(Bfd zrY@3Hb(_O(|C=O9MorTQeV3vrmt2~*9U#hvlKGbaNKa2+MVgi~YSbvx^D}19q)C%B z0HKD42C2Tjo_czFdjaNSTV&)Xl%4JJ1oD3aNU>U9HAqsvpP!%ax^?Sl*6i7C`D}%% zt5+%izybRC&K;iLYWwP|f4Mhcpm_dx*0I%UO*SaXK`*1xZ_S!D^zxiJ14Q7~G;Z8D zijIz^YuB#PgYNE^!^6W**Vfklq;LGw0AThcRZ$9H`alF5H8wTTweP+oS(b%T?)3)i zP*6}1RaR6OH6l}Wb@fqw?N0$nOG$}URMiH>X84_ggM;b*{rgl`S4S5wT%e}LMw%WG zLEhfpx*iG%38AX0Dr#$OHDk>NE8OEn)xBecgS51?7i38~h#Okw&!108ue?HtblUOh zr!;lyRJwQX9-TjTj@sMXY0K8FWHy_HWTYldo;;bL*kUjmCt^~#;jx`Y0AN{4N;H%g zLiuC>p*3sQ67rt%^YSPNR$zr6Zrer)2?5CUHrc|qyTrL;w-Mg1MVe+>(Z6cG&q{}2PFE8@< z_a}Q_ADuaSR?IivzD?Jws~JFjPft&SzWEOUq-ADWyiKNqn#&cn06x!HzMRcS`}ggm z9})RkSy?oC^k`k4u*$zb`%DC7$k?&eh=9C(>lW?VvxnnDlNDvx@#Dw4^#e}@kdcvL zmbW~Mlo2cO@#af9C9yjk2-7Y2~R@2#z^V$EW)P-kZ+?Sz|d-n>cR z<{c3c5e52w?uX3+Rt|w*!smaFi;oup2lLU9BS)wPrrf+`i%36DVGQgRZp*Ap^g&nGY6RVo z%2~(&Dz=)din9h`!yRE{c zlZ$Bo@A>ltIVa%k*KzX>H`*Zv1A@>X%Ly7D6AKqEq#3B|dSeRZzi5!l?%lhIZ_WO_ zQdvox-g$@MGLf1G^7H8&Xc#xI=CO2(6OZUCU#@nE;8Py`tJa=6BPz}CQ( z$rl02jZ?F%tc+8w3RGvs^Q&pN^H0vZV*uP850-iZfhPBX zr`k_0yM0wrNy+~PZSJ2)PEPj2g~sEYm-O)AFGosCf5ws~0IXlX-q7CG7Uzuu0urLY zz(7Gbd0%`X3d_uyGY81+e)y1IymaT$JFgkBlL6(I25iC)xRouOph(gZxHkZ?aT|5y zMxUa5k9h|0h>ANpI-bLZa3&b8V%%a7a1ZdxIa*vSGJ-3d-uQjT766D=p}eT*oW9oI z%de%SCCjS1(doeZ*y+r}`O~&ThX$pj?t&NKg5c@l;o?oF3rn0kmrlYJ%zzUnOrR!I zzYE}jT0Azul)oWXRu&f*pVjwszhudhNFS5w6AWKMTzu>w82EW^Zm!*PkLOqbz;kH= zkW#S4!i7R)2GcMX5pMjl;l~G8Iqm`Wj>F~3g7R<02K?)%@HY*r`Vq|B0Lvs778YLD z*N5u`0MKWhBFox0Uw`eySZi%*QEEZGEiEmNDjMh&tr3c^sIq(-CM`p%-Qvl_#6%T! zVgcqqKo-pb8y@WK>wEXuv15qNKW^X+A`U{-?R@~TlDQl=aPlo-iUyeaj9t_IgPULR zEGRH_C@S4t>{|=wi$@Io;Bq+r5fL42%YNeP=V>qm0N${4>C%8vM&mz`=W9_u9T1ia zf0QEFe&uxl@Wn^S^B9I=eKr)ogz;#AtpegaNl^+>6~$iOKhov~pdUc$%!i`YAe9(I zxj&TgdrM-o;Q8H+-<=4qdP$bc5htesPx|tw}^dRCoc^TM2YjRhs^*QrSbo5?)!n0>Q-J=swykO+(YrU zd+)p7zyJSzG0FdfHh$#DNPB2#-++JsOG!zIxwyFac1}*tp`AN--mmTQO|_liL5&|f zc5EYmvw5`LWEzflJnrY`*TH1Ma`7v%*@|&IX}8k&^JlZ!zPH+Je@IPD-BT6t?DI$wAU;0+ zFM%L{1`a?H92_idqM{_KO&bXb4J`%ylKXji{uj=jlk*oYNM2r^0#5>1EEd7oo5fb^ zG!P-JDnxi>2oM(+Hy@n;5R0~u+Z635pL|kAj2IyuI(C$xpdc4Kg@uK3;rw~|?z`_~ z@7}#~@BV$UKq4p=7@t>ASU7q8`t@sE26?!6BnS{28#_I~-+v+2=dbmB=+L3^>Z`9x zpc`-x7$hq*Q&z29DVbSWiU1@62$&0XNJvRZ`Cm_C^gTa)^01BoKN;XZ#`~S%hXDM< zi4z6(pi0YX+_qJv0Kq z;EjXMF9-NwE%uEgBjuU?{l!ijfYlOIbs8n6OP4P4%dul}`}S?^A)+sL?6~jv@#EQ^ z=6WaufY`@_^D6*8l;GKLF8Kuoa_G<@*}Z$W?1N!Do1LxhM}jc4@KtFcAt4eT9O$mSqZ(xAMvKr!DPlM-? z9O94X+7{3rI9!@sy?RvApm;fi6?~m?yZq% zRG*tUIf}5DCodr(;VWd2Wk$y_@PQLx%$PClLV|wC;2g=;H-cr$EF0QWvI2-$3gGx}pd-d+Eq(eP$`;YxH;SJ87 zJ*y%_*nztcgJmEtJY#t?m!H=C8LWM4xTduL-(7=m-n_ZYoi|T9gS*BCHzi9x`9yBr zx+VReeOBI>I8lNT1x6tccpHQmHD-*G0O~fmOJZ$Uzuq`Sg>z>h1rLMf!g<~Kfe`=( zuN4xTwea;lH2BA$=d)(dmUivh>G!MS>C>lWF*twY`gQ5oub)hwJXu0RL!EsB0t03I z`0?`cuwlwB@B!6f>(;GwZ_a+k6B3G^gzl9M*JUThPB?!c1Q<1HRCDO^8Z5Gp22Z0! z@a~+ah%Wm0V>u7K?%AuCOrJho*$20ED!?GB#30(^oFo7ZC8dDZ?kyk5(lvy}Y$QUd z-F{->!iB}|{py?mSmf`Z^U2V`eq0!e71F3tBbhOCrob1wy#LarOA7p%GiRiG_wF)t z)+}iN%k8Z(GE9Ob(7MxuK(*xP&p)eV$bHOtq{}3Lwl5&UMf9l<4%aCGP|%3-6_}ET8S%u|w!m zDJk$gNDOV8^>gE~&Ik|{6%~Z=_P_lsmi`)iSiO2OdCC;!-i$A0oW5xBVmW&BsLJ){ z!^kmutE}C-cTY)7HY5fXU3DkGW3cvA2i^AX->*VxKI0E@#}U|r1Nyn~SSNwd^UptT ziEP;L&oEZ65j@3{7WnnoUzdJQJ!O2K+`W5OfjDyHh_q|pUI?C^p|VEsAAj_b5FGpS z9V8?H-nel?1w70FNYoW8RtO6wR1q}vl>f=d$jI~bj@nDWf(7O#k&*8M{9Gn4jC z^z+6>E`79cp$bsiv~4T%;0{|NCaA0t%o0e<_uqdnO(7|B=FXL;pLs^Ti({EP(0!h9 zcoQA`kN^<>6hwpTyuG8g5?~s4^yr@~0RjI^;EeKUbjDAZpj?*mrJ93`@>;iUEpq{) z4eETAwW6XT`P&y?$liVXl#Q4=b*gmj+Eq@SI;DncH}@kX>Ns5Db+}T-2?TE~F5Yjw zfBzjse-+(?uK4_OWtFMBGvN;1V*&R?@tRqtU5z4G!>^^6uVE+?0_~rX$8d9?q*r z02sW4%*=lQ_&*t`j%-gT`dEY$KgD;=>eaG!%N7+2Oq(`M1v?(rP~q14^mIWrS4kB; z$#c&==hBCJ0VfbYpy=tmPYJ}Del^+ca{&Gq=YvX4T*S4Kz7luz=wuC^1mG{aTQ?c> z(o4z!>hTaiCB7RrY>+_2@o%EY$;_=P4Yhn(4Z^X#22a8wse5C+;0m%sZ3i63yTyft zlh&+T=Q~4ko2;CKZV%iqVc155hJ^eLOm1M*Kl=M{Z)9$!OcNLYFjq|z1o(cOLU!3U~dNRcOatmz)WPhOXnmRw;#B{!-> z03NGYkPTUtq(O=AX z04|YkPJtK6gS(rSoSM3_D(`XcPL%_#3WE4QfW?}K>WLLrh1B{9fVW`xs_=dexf5pq0(r&nO~7|0kK z3A^mG&t&`d?P^X%T)Vvp>D>(M0Ix9it;xAp35Xpsq?un(&_bAlwdsP|1k5Ed(X!U%Ga7qE3r!tpuNQkJ|rVwaa=*;vwI2`o1^SB1^Y9h@aB z)q`0~sjOPHO1_1C;JY|4h*}D7P9rSma6zsunwP4LG)C59`h zhZLCG+T6rAfz1hmClOfFzXaFCk{1ggtO7A^e|EqCnSv2q`S9x)z8wvo#trmcO{!!9Fa3 zxr66>Sn6UlNaB<81aB)TSqx9`$Lg%3vc4VzAs8Y*v&EvEFvXCS8d~$}HmbzaN3Ae~$!!;c1Eo zt+{9tfB_DR4K-;DW1m6pPD#?OC3b>lp#(;Cac?ws)O*?w4ITz>DZtM|QL|3L^W7c^ z081PLcC{pUE}}z+4)|KFQuTMoqOLi91S~u~0q5g9#jxzf27>5;Mwh6;L+4k(X1w(v z!1KKx34oVBO{+@@;3q09UDc*VMMbF)Sre4|bwB?2qsx@s5?{V-nKGKlH_8lNQPG!$ z+1azPWuEWSxehNX5CB=5KeDV|TKt>Cnm1|OxMu7(EVQ>{8;kSOuyNZ;H^vSObQtPt z*9y+BxpM8=?2Qi)Jl|iz4PvLZ6BhCBc&0wfVjyxDnha4mRL*t*_)*E(?zE z-G>qBvFggux7uC-^H9eLlqGFOd<>D7Bg)G`RhQuTnHxgrOnmZ|geq=MEpSzNXoWZc z92iPNMFKF1VG$C^kYpl~`vKd{+{icw-_CFJ5)u=uEDb21IsHB7XZTBjN$|{w~Z)tq@i3zSH+Z<+^ein@0swhkpRr@7$qv52j{VWe-h8*Q4l#=*<9Y9 zBW-UQ78KOgYPS!D1@B@pn>&{T1=&G_Ta-HNT783h!j~9-SMW zzcD#sK*U@fK3OFw3|JW3j~q2h&*$}60I(zg!L#wm9|-{PXG)5S5^DmUOhZ)J6Y4Vw z^9@Fd+!CP9V>9#sKA?Wj&t|)VPis$u^Q9=?-$R^H#s$YpT?l{)`r@ZPUgE+!cIxEl z=6XOvq&UbNo>g1!>QbM5wQQuuOnm6yb>llg>@#+&H6b}Y-PJGZPF{|K2M-QKAT=uI z`t`Z~etvxc+zQZthg8nNyt^Uhx4jH?x$Qy#aJvr|$f%8FE?*lLEOY$=gUIi6xe+-5 zA+N8-Dh}t>>f!)@G5_AZqz#)lANDoY_zc-*2qZHO;yefWMIWjb_5i+w{rEG~vdYC! zJ*SfZFc=LX_WddT{IzP?(rXceg9&8di!ZA0@tE3t=BMK6ab_3*q!)Y<}D^_O0%@lK>$WOIui_aHO2dwMA87-;N0q4I}e` zrV{|nPgMz?A3Je#grGHeED*c(*7*Rxqq4=q>jZ{}g-r$Uf5P}yG@3|^PJvldP%GF~ z+4!nFcM`yEF5hP0f`bAAU{@*>W}R~~D&)2_zxkuYto-_G6)DoS@tTX}Jd`4y^9WtN z0Xy(sN_u*wMNFtjt?T{p?qE*M>|(kvlAx)iXm13W^*YP%fHIv zZfrqJj~>WN%z=7p*5vv9E-O6@i1^K(j^Dv;3@vkOJd&LBy);s|&IRyPYe~spQ&LlZ z*7JEf4jMElqGA2|a{+!H-mNOpoDZMcEW44D^VZHf_)9V4dz}P;-W~y!&*7zQ*#U(M ze;ApfZr!^1gYsr>J)eVEbMKu5QXm14T;@4B%yTyCC|uI{Qk(4`n0FJd&%i=^{+vsV z5TRQO4-HL#WuI;K^Xo~Dvtj%_sO2A^YM-x3PPRI_*V(}(%R@bW8o%GC5o06w^g?*8 zLGx%lM?Z#^Iau;`TXFF}P)$0Bpehr|PXWjIYQu*QZ-CO-NDy!q7Q;A1y_3X5fb<M2a1y+91&quPSln20nTE^QxG4U>UFtr?`Yb?apwBiC?Ho2VvyJ_I zoSOl>Q)qB-0@NfP@9DVu&6f`0j6w!JJlKcxWB9iB)Pe;I$~WqLEXToVR#smE$fsZ;NX&=+o*`o>s;LOy=`r+XpLLX=Fni5XVKswSOs%f~sZ7D3=Zwm^7d9b?7fjt5f zK3w+G)>4v4N8l!?$4us#v|1T_M!kcZ{qv{Ec!Ow z--C4cmzw^)ukl^AJ+G7ih8LI;$Bb!<;&x0xa4;sGlub%(_002ovPDHLkV1m~3tvLVy literal 0 HcmV?d00001 diff --git a/samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png b/samples/Sample.Forms/Samples.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..b9e2163bdda24cc3fbdaef66659fa12a07b29a2b GIT binary patch literal 80048 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 z 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%0AKDgL0*tMBNWe_4P)+EA6&2*a6()IOG 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%0AWF=B*Su|!a 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 + + + + + diff --git a/samples/Sample.Forms/Samples.MacOS/Info.plist b/samples/Sample.Forms/Samples.MacOS/Info.plist new file mode 100644 index 0000000..a1d10f4 --- /dev/null +++ b/samples/Sample.Forms/Samples.MacOS/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleName + Draw & GO + CFBundleIdentifier + com.vladislavantonyuk.drawgo + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + 10.13 + CFBundleDevelopmentRegion + en + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + NSPrincipalClass + NSApplication + XSAppIconAssets + Assets.xcassets/AppIcon.appiconset + LSApplicationCategoryType + public.app-category.utilities + + diff --git a/samples/Sample.Forms/Samples.MacOS/Main.cs b/samples/Sample.Forms/Samples.MacOS/Main.cs new file mode 100644 index 0000000..cf4876c --- /dev/null +++ b/samples/Sample.Forms/Samples.MacOS/Main.cs @@ -0,0 +1,20 @@ +// +// Vladislav Antonyuk. All rights reserved. +// +// Vladislav Antonyuk + +namespace Samples.MacOS +{ + using AppKit; + + public class Application + { + // This is the main entry point of the application. + private static void Main(string[] args) + { + NSApplication.Init(); + NSApplication.SharedApplication.Delegate = new AppDelegate(); + NSApplication.Main(args); + } + } +} diff --git a/samples/Sample.Forms/Samples.MacOS/Properties/AssemblyInfo.cs b/samples/Sample.Forms/Samples.MacOS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e08f99a --- /dev/null +++ b/samples/Sample.Forms/Samples.MacOS/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DrawGo.Mac.iOS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DrawGo.Mac.iOS")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj new file mode 100644 index 0000000..3ede14b --- /dev/null +++ b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj @@ -0,0 +1,106 @@ + + + + Debug + iPhoneSimulator + {5131B6A0-D5EA-4EB0-A44A-7538192EC275} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Exe + Samples.MacOS + Samples MacOS + Resources + v2.0 + Xamarin.Mac + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + false + Mac Developer + false + false + false + true + true + true + HttpClientHandler + None + x86_64 + 3rd Party Mac Developer Installer + None + + + pdbonly + true + bin\Release + + + prompt + 4 + false + true + false + true + true + true + SdkOnly + HttpClientHandler + + + None + + + + + + + + + + + + + + + + + + + + + + + + {c6fa17d7-0f22-49b6-8c17-c6ae0ac39489} + SignaturePad.Forms.MacOS + + + {eb7f9f29-7348-4dae-b7e0-198ff0e14474} + SignaturePad.MacOS + + + {cc18e151-5792-4da5-ade6-7cfba16a593e} + Samples + + + + + + + + + + + + + + 3.0.0.482510 + + + + \ No newline at end of file diff --git a/samples/Sample.Forms/Samples.MacOS/UiService.cs b/samples/Sample.Forms/Samples.MacOS/UiService.cs new file mode 100644 index 0000000..b4b8b79 --- /dev/null +++ b/samples/Sample.Forms/Samples.MacOS/UiService.cs @@ -0,0 +1,31 @@ +// +// Vladislav Antonyuk. All rights reserved. +// +// Vladislav Antonyuk + +namespace Samples.MacOS +{ + using AppKit; + using CoreGraphics; + + internal static class UiService + { + static UiService() + { + var mainWindowStyle = NSWindowStyle.Closable | NSWindowStyle.Miniaturizable | NSWindowStyle.Resizable | + NSWindowStyle.Titled; + var mainWindowSize = new CGSize(550, 330); + var mainWindowRect = new CGRect( + NSScreen.MainScreen.Frame.Width / 2 - mainWindowSize.Width / 2, + NSScreen.MainScreen.Frame.Height / 2 - mainWindowSize.Height / 2, + mainWindowSize.Width, + mainWindowSize.Height); + MainWindow = new NSWindow(mainWindowRect, mainWindowStyle, NSBackingStore.Buffered, false) + { + TitleVisibility = NSWindowTitleVisibility.Visible + }; + } + + internal static NSWindow MainWindow { get; } + } +} From 17485b483af6a4c394af1c1eb29fd9e642456c05 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Tue, 10 Jul 2018 22:25:55 +0300 Subject: [PATCH 23/72] Scripts modification --- build.cake | 2 -- 1 file changed, 2 deletions(-) diff --git a/build.cake b/build.cake index 57cb342..88b5f61 100644 --- a/build.cake +++ b/build.cake @@ -100,9 +100,7 @@ Task("samples") if (IsRunningOnWindows()) { MSBuild("./samples/Sample.Android/Sample.Android.sln", settings); MSBuild("./samples/Sample.iOS/Sample.iOS.sln", settings); - MSBuild("./samples/Sample.MacOS/Sample.MacOS.sln", settings); MSBuild("./samples/Sample.UWP/Sample.UWP.sln", settings); - MSBuild("./samples/Sample.WPF/Sample.WPF.sln", settings); MSBuild("./samples/Sample.Forms/Sample.Forms.sln", settings); } else { MSBuild("./samples/Sample.Android/Sample.Android.sln", settings); From 13a7977d390f7ead5d4b22f006bfefc254d1e51f Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Tue, 10 Jul 2018 23:01:16 +0300 Subject: [PATCH 24/72] Wpf fix build --- build.cake | 3 --- src/SignaturePad.WPF/SignaturePad.WPF.csproj | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/build.cake b/build.cake index 88b5f61..6a4b99e 100644 --- a/build.cake +++ b/build.cake @@ -36,7 +36,6 @@ Task("libs") EnsureDirectoryExists("./output/android/"); EnsureDirectoryExists("./output/netframework/"); - EnsureDirectoryExists("./output/netframework/Themes"); EnsureDirectoryExists("./output/macos/"); EnsureDirectoryExists("./output/ios/"); EnsureDirectoryExists("./output/uwp/"); @@ -45,7 +44,6 @@ Task("libs") CopyFiles($"./src/SignaturePad.Android/bin/{configuration}/SignaturePad.*", "./output/android/"); CopyFiles($"./src/SignaturePad.WPF/bin/{configuration}/SignaturePad.*", "./output/netframework/"); - CopyFiles($"./src/SignaturePad.WPF/bin/{configuration}/Themes/*", "./output/netframework/Themes"); CopyFiles($"./src/SignaturePad.MacOS/bin/{configuration}/SignaturePad.*", "./output/macos/"); CopyFiles($"./src/SignaturePad.iOS/bin/{configuration}/SignaturePad.*", "./output/ios/"); CopyFiles($"./src/SignaturePad.UWP/bin/{configuration}/SignaturePad.*", "./output/uwp/"); @@ -55,7 +53,6 @@ Task("libs") CopyFiles($"./src/SignaturePad.Forms.iOS/bin/{configuration}/SignaturePad.Forms.*", "./output/ios/"); CopyFiles($"./src/SignaturePad.Forms.MacOS/bin/{configuration}/SignaturePad.Forms.*", "./output/macos/"); CopyFiles($"./src/SignaturePad.Forms.WPF/bin/{configuration}/SignaturePad.Forms.*", "./output/netframework/"); - CopyFiles($"./src/SignaturePad.Forms.WPF/bin/{configuration}/Themes/*", "./output/netframework/Themes"); CopyFiles($"./src/SignaturePad.Forms.UWP/bin/{configuration}/SignaturePad.Forms.*", "./output/uwp/"); CopyFiles($"./src/SignaturePad.Forms.UWP/bin/{configuration}/Themes/*", "./output/uwp/Themes"); CopyFiles($"./src/SignaturePad.Forms/bin/{configuration}/SignaturePad.Forms.*", "./output/netstandard/"); diff --git a/src/SignaturePad.WPF/SignaturePad.WPF.csproj b/src/SignaturePad.WPF/SignaturePad.WPF.csproj index c2e5054..2791dd5 100644 --- a/src/SignaturePad.WPF/SignaturePad.WPF.csproj +++ b/src/SignaturePad.WPF/SignaturePad.WPF.csproj @@ -43,6 +43,7 @@ Never + Designer From 5abc1716e0dc8be64a88f00309ce8a64f060be9a Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Tue, 10 Jul 2018 23:51:32 +0300 Subject: [PATCH 25/72] Fix WPF and MacOS Build. Packages update --- ISSUE_TEMPLATE.md | 4 ++-- ...Xamarin.Controls.SignaturePad.Forms.nuspec | 12 +++++----- samples/Sample.Android/Sample.Android.csproj | 12 +++++----- .../Samples.Android/Samples.Android.csproj | 6 ++--- .../Samples.MacOS/Samples.MacOS.csproj | 2 +- .../Samples.UWP/Samples.UWP.csproj | 2 +- .../Samples.WPF/Samples.WPF.csproj | 16 ++++++------- .../Sample.Forms/Samples.WPF/packages.config | 4 ++-- .../Samples.iOS/Samples.iOS.csproj | 2 +- samples/Sample.Forms/Samples/Samples.csproj | 2 +- .../SignaturePad.Forms.Droid.csproj | 2 +- .../SignaturePad.Forms.MacOS.csproj | 2 +- .../SignaturePad.Forms.UWP.csproj | 2 +- .../SignaturePad.Forms.WPF.csproj | 4 ++-- .../SignaturePad.Forms.iOS.csproj | 2 +- .../SignaturePad.Forms.csproj | 2 +- src/SignaturePad.WPF/SignaturePad.WPF.csproj | 23 +++++++++++++++---- 17 files changed, 57 insertions(+), 42 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 17d0ec4..b2ddec4 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -20,10 +20,10 @@ - Last known good version: - IDE: - Platform Target Frameworks: - - Android: + - Android: - iOS: - UWP: - - Xamarin.Forms: + - Xamarin.Forms: - Target Devices: - diff --git a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec index 0f37b0b..6f85238 100644 --- a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec +++ b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec @@ -20,23 +20,23 @@ - + - + - - + + - + - + diff --git a/samples/Sample.Android/Sample.Android.csproj b/samples/Sample.Android/Sample.Android.csproj index 5950baf..68e5d40 100644 --- a/samples/Sample.Android/Sample.Android.csproj +++ b/samples/Sample.Android/Sample.Android.csproj @@ -16,8 +16,8 @@ Resources\Resource.designer.cs Sample.Android Properties\AndroidManifest.xml - v7.1 - False + v8.1 + True True @@ -54,10 +54,10 @@ - - - - + + + + diff --git a/samples/Sample.Forms/Samples.Android/Samples.Android.csproj b/samples/Sample.Forms/Samples.Android/Samples.Android.csproj index 9dacb97..032291e 100644 --- a/samples/Sample.Forms/Samples.Android/Samples.Android.csproj +++ b/samples/Sample.Forms/Samples.Android/Samples.Android.csproj @@ -14,8 +14,8 @@ Resources\Resource.Designer.cs Off Properties\AndroidManifest.xml - v7.1 - false + v8.1 + true true @@ -47,7 +47,7 @@ - + diff --git a/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj index 3ede14b..8b119b1 100644 --- a/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj +++ b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj @@ -99,7 +99,7 @@ - 3.0.0.482510 + 3.1.0.583944 diff --git a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj index e5d6332..3236bf0 100644 --- a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj +++ b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj @@ -91,7 +91,7 @@ - + diff --git a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj index 147c531..c0409b2 100644 --- a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj +++ b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj @@ -1,6 +1,6 @@  - + Debug @@ -61,16 +61,16 @@ ..\packages\WpfLightToolkit.1.0.3\lib\net45\WpfLightToolkit.dll - ..\packages\Xamarin.Forms.3.0.0.482510\lib\netstandard2.0\Xamarin.Forms.Core.dll + ..\packages\Xamarin.Forms.3.1.0.583944\lib\netstandard2.0\Xamarin.Forms.Core.dll - ..\packages\Xamarin.Forms.3.0.0.482510\lib\netstandard2.0\Xamarin.Forms.Platform.dll + ..\packages\Xamarin.Forms.3.1.0.583944\lib\netstandard2.0\Xamarin.Forms.Platform.dll - ..\packages\Xamarin.Forms.Platform.WPF.3.0.0.482510\lib\net45\Xamarin.Forms.Platform.WPF.dll + ..\packages\Xamarin.Forms.Platform.WPF.3.1.0.583944\lib\net45\Xamarin.Forms.Platform.WPF.dll - ..\packages\Xamarin.Forms.3.0.0.482510\lib\netstandard2.0\Xamarin.Forms.Xaml.dll + ..\packages\Xamarin.Forms.3.1.0.583944\lib\netstandard2.0\Xamarin.Forms.Xaml.dll @@ -138,8 +138,8 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - + + - + \ No newline at end of file diff --git a/samples/Sample.Forms/Samples.WPF/packages.config b/samples/Sample.Forms/Samples.WPF/packages.config index be44111..3ea8f8a 100644 --- a/samples/Sample.Forms/Samples.WPF/packages.config +++ b/samples/Sample.Forms/Samples.WPF/packages.config @@ -3,6 +3,6 @@ - - + + \ No newline at end of file diff --git a/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj b/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj index 764d962..99d0024 100644 --- a/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj +++ b/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj @@ -68,7 +68,7 @@ - + diff --git a/samples/Sample.Forms/Samples/Samples.csproj b/samples/Sample.Forms/Samples/Samples.csproj index 6e032ac..32adc3d 100644 --- a/samples/Sample.Forms/Samples/Samples.csproj +++ b/samples/Sample.Forms/Samples/Samples.csproj @@ -15,7 +15,7 @@ - + \ No newline at end of file diff --git a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj index bede7fb..0721370 100644 --- a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj +++ b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj b/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj index 8204d68..b1918f5 100644 --- a/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj +++ b/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj @@ -33,7 +33,7 @@ - + diff --git a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj index 5ebee82..b2cb067 100644 --- a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj +++ b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj index 31c44a6..1d607e8 100644 --- a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj +++ b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj @@ -31,8 +31,8 @@ - - + + diff --git a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj index e9d13b9..257b6c2 100644 --- a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj +++ b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms/SignaturePad.Forms.csproj b/src/SignaturePad.Forms/SignaturePad.Forms.csproj index c005076..3bdff12 100644 --- a/src/SignaturePad.Forms/SignaturePad.Forms.csproj +++ b/src/SignaturePad.Forms/SignaturePad.Forms.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/SignaturePad.WPF/SignaturePad.WPF.csproj b/src/SignaturePad.WPF/SignaturePad.WPF.csproj index 2791dd5..020b160 100644 --- a/src/SignaturePad.WPF/SignaturePad.WPF.csproj +++ b/src/SignaturePad.WPF/SignaturePad.WPF.csproj @@ -41,12 +41,27 @@ - - Never - Designer - + + + $(MSBuildToolsPath)\Microsoft.CSharp.targets + bin/$(Configuration)/$(TargetFramework) + + + + + + + + + + + + + false + + \ No newline at end of file From 444518a8bb89cdaad44abd28cc6524227b9bd662 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Tue, 10 Jul 2018 23:59:33 +0300 Subject: [PATCH 26/72] PackageReference --- samples/Sample.Forms/Samples.WPF/App.config | 4 +- .../Samples.WPF/OpenTK.dll.config | 25 ---------- .../Samples.WPF/Samples.WPF.csproj | 49 +++++++------------ .../Sample.Forms/Samples.WPF/packages.config | 8 --- 4 files changed, 19 insertions(+), 67 deletions(-) delete mode 100644 samples/Sample.Forms/Samples.WPF/OpenTK.dll.config delete mode 100644 samples/Sample.Forms/Samples.WPF/packages.config diff --git a/samples/Sample.Forms/Samples.WPF/App.config b/samples/Sample.Forms/Samples.WPF/App.config index 200da54..7c47a67 100644 --- a/samples/Sample.Forms/Samples.WPF/App.config +++ b/samples/Sample.Forms/Samples.WPF/App.config @@ -7,11 +7,11 @@ - + - + diff --git a/samples/Sample.Forms/Samples.WPF/OpenTK.dll.config b/samples/Sample.Forms/Samples.WPF/OpenTK.dll.config deleted file mode 100644 index 7098d39..0000000 --- a/samples/Sample.Forms/Samples.WPF/OpenTK.dll.config +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj index c0409b2..9f1193a 100644 --- a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj +++ b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj @@ -1,6 +1,5 @@  - Debug @@ -37,12 +36,6 @@ 4 - - ..\packages\OpenTK.3.0.0\lib\net20\OpenTK.dll - - - ..\packages\OpenTK.GLControl.3.0.0\lib\net20\OpenTK.GLControl.dll - @@ -57,21 +50,6 @@ - - ..\packages\WpfLightToolkit.1.0.3\lib\net45\WpfLightToolkit.dll - - - ..\packages\Xamarin.Forms.3.1.0.583944\lib\netstandard2.0\Xamarin.Forms.Core.dll - - - ..\packages\Xamarin.Forms.3.1.0.583944\lib\netstandard2.0\Xamarin.Forms.Platform.dll - - - ..\packages\Xamarin.Forms.Platform.WPF.3.1.0.583944\lib\net45\Xamarin.Forms.Platform.WPF.dll - - - ..\packages\Xamarin.Forms.3.1.0.583944\lib\netstandard2.0\Xamarin.Forms.Xaml.dll - @@ -109,8 +87,6 @@ ResXFileCodeGenerator Resources.Designer.cs - - SettingsSingleFileGenerator Settings.Designer.cs @@ -133,13 +109,22 @@ Samples + + + 3.0.1 + + + 3.0.1 + + + 1.0.3 + + + 3.1.0.583944 + + + 3.1.0.583944 + + - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file diff --git a/samples/Sample.Forms/Samples.WPF/packages.config b/samples/Sample.Forms/Samples.WPF/packages.config deleted file mode 100644 index 3ea8f8a..0000000 --- a/samples/Sample.Forms/Samples.WPF/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file From d2bfc09f670dc5dd08029f3433eb252e0fcbbfe3 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Wed, 11 Jul 2018 00:02:41 +0300 Subject: [PATCH 27/72] Update package version too 3.1 --- build.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.cake b/build.cake index 6a4b99e..7a5e3b9 100644 --- a/build.cake +++ b/build.cake @@ -2,7 +2,7 @@ // ARGUMENTS /////////////////////////////////////////////////////////////////////////////// -var CURRENT_PACKAGE_VERSION = "3.0.0"; +var CURRENT_PACKAGE_VERSION = "3.1.0"; var target = Argument("target", "Default"); var configuration = Argument("configuration", "Release"); From 9c00e06422a1f2614a23cc1ac334fe4e7f81c37e Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Wed, 11 Jul 2018 00:44:11 +0300 Subject: [PATCH 28/72] nuspec fix --- build.cake | 12 ++++++------ nuget/Xamarin.Controls.SignaturePad.Forms.nuspec | 13 ++++++++++--- nuget/Xamarin.Controls.SignaturePad.nuspec | 10 +++++++--- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/build.cake b/build.cake index 7a5e3b9..7927375 100644 --- a/build.cake +++ b/build.cake @@ -35,24 +35,24 @@ Task("libs") }); EnsureDirectoryExists("./output/android/"); - EnsureDirectoryExists("./output/netframework/"); - EnsureDirectoryExists("./output/macos/"); + EnsureDirectoryExists("./output/net/"); + EnsureDirectoryExists("./output/mac/"); EnsureDirectoryExists("./output/ios/"); EnsureDirectoryExists("./output/uwp/"); EnsureDirectoryExists("./output/uwp/Themes"); EnsureDirectoryExists("./output/netstandard/"); CopyFiles($"./src/SignaturePad.Android/bin/{configuration}/SignaturePad.*", "./output/android/"); - CopyFiles($"./src/SignaturePad.WPF/bin/{configuration}/SignaturePad.*", "./output/netframework/"); - CopyFiles($"./src/SignaturePad.MacOS/bin/{configuration}/SignaturePad.*", "./output/macos/"); CopyFiles($"./src/SignaturePad.iOS/bin/{configuration}/SignaturePad.*", "./output/ios/"); + CopyFiles($"./src/SignaturePad.MacOS/bin/{configuration}/SignaturePad.*", "./output/mac/"); + CopyFiles($"./src/SignaturePad.WPF/bin/{configuration}/SignaturePad.*", "./output/net/"); CopyFiles($"./src/SignaturePad.UWP/bin/{configuration}/SignaturePad.*", "./output/uwp/"); CopyFiles($"./src/SignaturePad.UWP/bin/{configuration}/Themes/*", "./output/uwp/Themes"); CopyFiles($"./src/SignaturePad.Forms.Droid/bin/{configuration}/SignaturePad.Forms.*", "./output/android/"); CopyFiles($"./src/SignaturePad.Forms.iOS/bin/{configuration}/SignaturePad.Forms.*", "./output/ios/"); - CopyFiles($"./src/SignaturePad.Forms.MacOS/bin/{configuration}/SignaturePad.Forms.*", "./output/macos/"); - CopyFiles($"./src/SignaturePad.Forms.WPF/bin/{configuration}/SignaturePad.Forms.*", "./output/netframework/"); + CopyFiles($"./src/SignaturePad.Forms.MacOS/bin/{configuration}/SignaturePad.Forms.*", "./output/mac/"); + CopyFiles($"./src/SignaturePad.Forms.WPF/bin/{configuration}/SignaturePad.Forms.*", "./output/net/"); CopyFiles($"./src/SignaturePad.Forms.UWP/bin/{configuration}/SignaturePad.Forms.*", "./output/uwp/"); CopyFiles($"./src/SignaturePad.Forms.UWP/bin/{configuration}/Themes/*", "./output/uwp/Themes"); CopyFiles($"./src/SignaturePad.Forms/bin/{configuration}/SignaturePad.Forms.*", "./output/netstandard/"); diff --git a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec index 6f85238..3a9a560 100644 --- a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec +++ b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec @@ -26,7 +26,11 @@ - + + + + + @@ -45,8 +49,11 @@ - - + + + + + diff --git a/nuget/Xamarin.Controls.SignaturePad.nuspec b/nuget/Xamarin.Controls.SignaturePad.nuspec index 4211405..35d5a0c 100644 --- a/nuget/Xamarin.Controls.SignaturePad.nuspec +++ b/nuget/Xamarin.Controls.SignaturePad.nuspec @@ -19,8 +19,9 @@ - + + @@ -32,11 +33,14 @@ - - + + + + + From 75eacec92f59a2be248c248e16cbd045e324eca5 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Wed, 11 Jul 2018 00:51:21 +0300 Subject: [PATCH 29/72] MacOs change version --- samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj index 8b119b1..114f3aa 100644 --- a/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj +++ b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj @@ -58,7 +58,6 @@ - From 5519ed4e4b7c4ceda9318685fe53366dce658911 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Wed, 11 Jul 2018 02:17:21 +0300 Subject: [PATCH 30/72] Fix Drawing line --- .../InkPresenter.cs | 2 +- .../InkStroke.cs | 2 +- src/SignaturePad.MacOS/InkPresenter.cs | 51 ++++++++----------- src/SignaturePad.Shared/Extensions.cs | 8 +-- src/SignaturePad.Shared/PathSmoothing.cs | 2 +- 5 files changed, 28 insertions(+), 37 deletions(-) diff --git a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs index a2e9192..09d6c13 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs @@ -29,7 +29,7 @@ using NativePoint = CoreGraphics.CGPoint; using NativeColor = AppKit.NSColor; using NativeImage = AppKit.NSImage; -using NativePath = AppKit.NSBezierPath; +using NativePath = CoreGraphics.CGPath; #elif WINDOWS_PHONE_APP using NativeRect = Windows.Foundation.Rect; using NativeSize = Windows.Foundation.Size; diff --git a/src/SignaturePad.InkPresenter.Shared/InkStroke.cs b/src/SignaturePad.InkPresenter.Shared/InkStroke.cs index 93b3aca..ebaf624 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkStroke.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkStroke.cs @@ -15,7 +15,7 @@ #elif __MACOS__ using NativePoint = CoreGraphics.CGPoint; using NativeColor = AppKit.NSColor; -using NativePath = AppKit.NSBezierPath; +using NativePath = CoreGraphics.CGPath; #elif WINDOWS_PHONE_APP using NativePoint = Windows.Foundation.Point; using NativeColor = Windows.UI.Color; diff --git a/src/SignaturePad.MacOS/InkPresenter.cs b/src/SignaturePad.MacOS/InkPresenter.cs index 648dc85..31ec9c1 100644 --- a/src/SignaturePad.MacOS/InkPresenter.cs +++ b/src/SignaturePad.MacOS/InkPresenter.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using CoreGraphics; -using Foundation; using AppKit; namespace Xamarin.Controls @@ -27,31 +26,30 @@ public InkPresenter (CGRect frame) private void Initialize () { - //IsOpaque = false; + //Opaque = false; } // If you put SignaturePad inside a ScrollView, this line of code prevent that the gesture inside // an InkPresenter are dispatched to the ScrollView below //public override bool GestureRecognizerShouldBegin (NSGestureRecognizer gestureRecognizer) => false; - public override void TouchesBeganWithEvent (NSEvent evt) + public override void MouseDown (NSEvent evt) { // create a new path and set the options - currentPath = new InkStroke (new NSBezierPath(), new List (), StrokeColor, StrokeWidth); + currentPath = new InkStroke (new CGPath(), new List (), StrokeColor, StrokeWidth); // obtain the location of the touch - var touch = evt.AllTouches.AnyObject as NSTouch; - var touchLocation = touch.GetLocation (this); + var touchLocation = evt.LocationInWindow; // move the path to that position - currentPath.Path.MoveTo (touchLocation); + currentPath.Path.MoveTo (touchLocation.X, touchLocation.Y); currentPath.GetPoints ().Add (touchLocation); // update the dirty rectangle ResetBounds (touchLocation); } - public override void TouchesMovedWithEvent (NSEvent evt) + public override void MouseDragged (NSEvent evt) { // something may have happened (clear) so start the stroke again if (currentPath == null) @@ -60,13 +58,12 @@ public override void TouchesMovedWithEvent (NSEvent evt) } // obtain the location of the touch - var touch = evt.AllTouches.AnyObject as NSTouch; - var touchLocation = touch.GetLocation (this); + var touchLocation = evt.LocationInWindow; if (HasMovedFarEnough (currentPath, touchLocation.X, touchLocation.Y)) { // add it to the current path - currentPath.Path.LineTo (touchLocation); + currentPath.Path.LineTo (touchLocation.X, touchLocation.Y); currentPath.GetPoints ().Add (touchLocation); // update the dirty rectangle @@ -75,16 +72,10 @@ public override void TouchesMovedWithEvent (NSEvent evt) } } - public override void TouchesCancelledWithEvent (NSEvent evt) - { - TouchesEndedWithEvent(evt); - } - - public override void TouchesEndedWithEvent (NSEvent evt) + public override void MouseUp (NSEvent evt) { // obtain the location of the touch - var touch = evt.AllTouches.AnyObject as NSTouch; - var touchLocation = touch.GetLocation(this); + var touchLocation = evt.LocationInWindow; // something may have happened (clear) during the stroke if (currentPath != null) @@ -92,7 +83,7 @@ public override void TouchesEndedWithEvent (NSEvent evt) if (HasMovedFarEnough (currentPath, touchLocation.X, touchLocation.Y)) { // add it to the current path - currentPath.Path.LineTo (touchLocation); + currentPath.Path.LineTo (touchLocation.X, touchLocation.Y); currentPath.GetPoints ().Add (touchLocation); } @@ -102,7 +93,7 @@ public override void TouchesEndedWithEvent (NSEvent evt) } // clear the current path - currentPath = null; + //currentPath = null; // update the dirty rectangle UpdateBounds (touchLocation); @@ -137,20 +128,20 @@ public override void DrawRect (CGRect rect) // if there are no lines, the the bitmap will be null if (bitmapBuffer != null) { - bitmapBuffer.Draw (CGPoint.Empty, rect, NSCompositingOperation.Copy, 0); + bitmapBuffer.Draw (CGPoint.Empty, rect, NSCompositingOperation.Screen, 0); } // draw the current path over the old paths if (currentPath != null) { - //var context = this.InputContext;..GetCurrentContext (); - //context.SetLineCap (CGLineCap.Round); - //context.SetLineJoin (CGLineJoin.Round); - //context.SetStrokeColor (currentPath.Color.CGColor); - //context.SetLineWidth (currentPath.Width); - - //context.AddPath (currentPath.Path); - //context.StrokePath (); + var context = NSGraphicsContext.CurrentContext.CGContext; + context.SetLineCap (CGLineCap.Round); + context.SetLineJoin (CGLineJoin.Round); + context.SetStrokeColor (currentPath.Color.CGColor); + context.SetLineWidth (currentPath.Width); + + context.AddPath (currentPath.Path); + context.StrokePath (); } } diff --git a/src/SignaturePad.Shared/Extensions.cs b/src/SignaturePad.Shared/Extensions.cs index 8747c8a..6ddc22c 100644 --- a/src/SignaturePad.Shared/Extensions.cs +++ b/src/SignaturePad.Shared/Extensions.cs @@ -95,14 +95,14 @@ public static void Invalidate (this NSView view) view.NeedsDisplay = true; } - public static void MoveTo (this NSBezierPath path, nfloat x, nfloat y) + public static void MoveTo (this CGPath path, nfloat x, nfloat y) { - path.MoveTo (new CGPoint (x, y)); + path.MoveToPoint (new CGPoint (x, y)); } - public static void LineTo (this NSBezierPath path, nfloat x, nfloat y) + public static void LineTo (this CGPath path, nfloat x, nfloat y) { - path.LineTo(new CGPoint (x, y)); + path.AddLineToPoint(new CGPoint (x, y)); } public static CGSize GetSize (this NSView view) diff --git a/src/SignaturePad.Shared/PathSmoothing.cs b/src/SignaturePad.Shared/PathSmoothing.cs index e9242ac..ced36f9 100644 --- a/src/SignaturePad.Shared/PathSmoothing.cs +++ b/src/SignaturePad.Shared/PathSmoothing.cs @@ -9,7 +9,7 @@ using NativePath = UIKit.UIBezierPath; #elif __MACOS__ using NativePoint = CoreGraphics.CGPoint; -using NativePath = AppKit.NSBezierPath; +using NativePath = CoreGraphics.CGPath; #elif WINDOWS_PHONE using System.Windows.Ink; using NativePoint = System.Windows.Point; From 3ddbbbd62650660a22a3ba324c3dcab410703382 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Wed, 18 Jul 2018 22:12:04 +0300 Subject: [PATCH 31/72] Fix WPF and MacOS Build references --- .../SignaturePad.Forms.Droid.csproj | 2 +- .../SignaturePad.Forms.MacOS.csproj | 2 +- src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj | 2 +- src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj | 6 +++--- src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj | 2 +- src/SignaturePad.Forms/SignaturePad.Forms.csproj | 2 +- src/SignaturePad.WPF/SignaturePad.WPF.csproj | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj index 0721370..a735faa 100644 --- a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj +++ b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj b/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj index b1918f5..6318495 100644 --- a/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj +++ b/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj @@ -33,7 +33,7 @@ - + diff --git a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj index b2cb067..4504e47 100644 --- a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj +++ b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj index 1d607e8..557dfae 100644 --- a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj +++ b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj @@ -1,7 +1,7 @@  - net461 + net471 SignaturePad.Forms SignaturePad.Forms False @@ -31,8 +31,8 @@ - - + + diff --git a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj index 257b6c2..9a64dc0 100644 --- a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj +++ b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms/SignaturePad.Forms.csproj b/src/SignaturePad.Forms/SignaturePad.Forms.csproj index 3bdff12..6308ce5 100644 --- a/src/SignaturePad.Forms/SignaturePad.Forms.csproj +++ b/src/SignaturePad.Forms/SignaturePad.Forms.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/SignaturePad.WPF/SignaturePad.WPF.csproj b/src/SignaturePad.WPF/SignaturePad.WPF.csproj index 020b160..8f85b6a 100644 --- a/src/SignaturePad.WPF/SignaturePad.WPF.csproj +++ b/src/SignaturePad.WPF/SignaturePad.WPF.csproj @@ -1,7 +1,7 @@  - net461 + net471 Xamarin.Controls SignaturePad From a1f4c1ad9ca4b9eb2ced46e7b2d85a5d15baec37 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Wed, 18 Jul 2018 23:14:04 +0300 Subject: [PATCH 32/72] Fix WPF and MacOS builds --- src/SignaturePad.Android/SignaturePad.Android.csproj | 2 +- src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj | 2 +- src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj | 2 +- src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj | 2 +- src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj | 5 ++++- src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj | 2 +- src/SignaturePad.Forms/SignaturePad.Forms.csproj | 2 +- src/SignaturePad.MacOS/SignaturePad.MacOS.csproj | 2 +- src/SignaturePad.UWP/SignaturePad.UWP.csproj | 2 +- src/SignaturePad.WPF/SignaturePad.WPF.csproj | 5 ++++- src/SignaturePad.iOS/SignaturePad.iOS.csproj | 2 +- 11 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/SignaturePad.Android/SignaturePad.Android.csproj b/src/SignaturePad.Android/SignaturePad.Android.csproj index d958519..f443c9d 100644 --- a/src/SignaturePad.Android/SignaturePad.Android.csproj +++ b/src/SignaturePad.Android/SignaturePad.Android.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj index a735faa..47efba3 100644 --- a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj +++ b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj b/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj index 6318495..72fe75b 100644 --- a/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj +++ b/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj index 4504e47..da4629e 100644 --- a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj +++ b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj @@ -30,7 +30,7 @@ - + diff --git a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj index 557dfae..b5cd11e 100644 --- a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj +++ b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj @@ -30,10 +30,13 @@ - + + + + diff --git a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj index 9a64dc0..2755a56 100644 --- a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj +++ b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/SignaturePad.Forms/SignaturePad.Forms.csproj b/src/SignaturePad.Forms/SignaturePad.Forms.csproj index 6308ce5..e6ff3ec 100644 --- a/src/SignaturePad.Forms/SignaturePad.Forms.csproj +++ b/src/SignaturePad.Forms/SignaturePad.Forms.csproj @@ -30,7 +30,7 @@ - + diff --git a/src/SignaturePad.MacOS/SignaturePad.MacOS.csproj b/src/SignaturePad.MacOS/SignaturePad.MacOS.csproj index a1a33e7..6d2d46a 100644 --- a/src/SignaturePad.MacOS/SignaturePad.MacOS.csproj +++ b/src/SignaturePad.MacOS/SignaturePad.MacOS.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/SignaturePad.UWP/SignaturePad.UWP.csproj b/src/SignaturePad.UWP/SignaturePad.UWP.csproj index 103cf39..948c28a 100644 --- a/src/SignaturePad.UWP/SignaturePad.UWP.csproj +++ b/src/SignaturePad.UWP/SignaturePad.UWP.csproj @@ -30,7 +30,7 @@ - + diff --git a/src/SignaturePad.WPF/SignaturePad.WPF.csproj b/src/SignaturePad.WPF/SignaturePad.WPF.csproj index 8f85b6a..46b4687 100644 --- a/src/SignaturePad.WPF/SignaturePad.WPF.csproj +++ b/src/SignaturePad.WPF/SignaturePad.WPF.csproj @@ -33,7 +33,10 @@ - + + + + diff --git a/src/SignaturePad.iOS/SignaturePad.iOS.csproj b/src/SignaturePad.iOS/SignaturePad.iOS.csproj index 4edde68..be5cec0 100644 --- a/src/SignaturePad.iOS/SignaturePad.iOS.csproj +++ b/src/SignaturePad.iOS/SignaturePad.iOS.csproj @@ -31,7 +31,7 @@ - + From 984557ae7106986770ff39b5ea6f3328175514bd Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Wed, 18 Jul 2018 23:25:23 +0300 Subject: [PATCH 33/72] Samples fix --- ISSUE_TEMPLATE.md | 2 +- nuget/Xamarin.Controls.SignaturePad.Forms.nuspec | 14 +++++++------- .../Samples.Android/Samples.Android.csproj | 2 +- .../Samples.MacOS/Samples.MacOS.csproj | 2 +- .../Sample.Forms/Samples.UWP/Samples.UWP.csproj | 2 +- .../Sample.Forms/Samples.WPF/Samples.WPF.csproj | 4 ++-- .../Sample.Forms/Samples.iOS/Samples.iOS.csproj | 2 +- samples/Sample.Forms/Samples/Samples.csproj | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index b2ddec4..536a520 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -23,7 +23,7 @@ - Android: - iOS: - UWP: - - Xamarin.Forms: + - Xamarin.Forms: - Target Devices: - diff --git a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec index 3a9a560..2b9a283 100644 --- a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec +++ b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec @@ -20,27 +20,27 @@ - + - + - + - - + + - + - + diff --git a/samples/Sample.Forms/Samples.Android/Samples.Android.csproj b/samples/Sample.Forms/Samples.Android/Samples.Android.csproj index 032291e..6f34816 100644 --- a/samples/Sample.Forms/Samples.Android/Samples.Android.csproj +++ b/samples/Sample.Forms/Samples.Android/Samples.Android.csproj @@ -47,7 +47,7 @@ - + diff --git a/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj index 114f3aa..cf59e32 100644 --- a/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj +++ b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj @@ -98,7 +98,7 @@ - 3.1.0.583944 + 3.2.0.637442-pre1 diff --git a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj index 3236bf0..83a0ee4 100644 --- a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj +++ b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj @@ -91,7 +91,7 @@ - + diff --git a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj index 9f1193a..9ee305f 100644 --- a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj +++ b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj @@ -120,10 +120,10 @@ 1.0.3 - 3.1.0.583944 + 3.2.0.637442-pre1 - 3.1.0.583944 + 3.2.0.637442-pre1 diff --git a/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj b/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj index 99d0024..ee1fc4d 100644 --- a/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj +++ b/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj @@ -68,7 +68,7 @@ - + diff --git a/samples/Sample.Forms/Samples/Samples.csproj b/samples/Sample.Forms/Samples/Samples.csproj index 32adc3d..f9da262 100644 --- a/samples/Sample.Forms/Samples/Samples.csproj +++ b/samples/Sample.Forms/Samples/Samples.csproj @@ -15,7 +15,7 @@ - + \ No newline at end of file From 500ee39966d909d2b8cac35642ecd9dac81926c6 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Thu, 19 Jul 2018 00:44:37 +0300 Subject: [PATCH 34/72] Fix Clear button WPF --- .../SignaturePadCanvasRenderer.cs | 5 +---- src/SignaturePad.MacOS/SignaturePadCanvasView.cs | 11 +++++------ src/SignaturePad.Shared/SignaturePadCanvasView.cs | 2 +- src/SignaturePad.WPF/SignaturePadCanvasView.cs | 3 +-- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs index 7ad3b62..79c2eda 100644 --- a/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs +++ b/src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs @@ -199,10 +199,7 @@ private void OnStrokesSpecified (object sender, SignaturePadCanvasView.StrokesEv private void OnClearRequested (object sender, EventArgs e) { var ctrl = Control; - if (ctrl != null) - { - ctrl.Clear (); - } + ctrl?.Clear (); } /// diff --git a/src/SignaturePad.MacOS/SignaturePadCanvasView.cs b/src/SignaturePad.MacOS/SignaturePadCanvasView.cs index d495cd5..bd91021 100644 --- a/src/SignaturePad.MacOS/SignaturePadCanvasView.cs +++ b/src/SignaturePad.MacOS/SignaturePadCanvasView.cs @@ -99,13 +99,12 @@ private Task GetImageStreamInternal (SignatureImageFormat format, CGSize var image = GetImageInternal (scale, signatureBounds, imageSize, strokeWidth, strokeColor, backgroundColor); if (image != null) { - if (format == SignatureImageFormat.Jpeg) + switch (format) { - return Task.Run (() => image.AsTiff ().AsStream ()); - } - else if (format == SignatureImageFormat.Png) - { - return Task.Run (() => image.AsTiff ().AsStream ()); + case SignatureImageFormat.Jpeg: + return Task.Run (() => image.AsTiff ().AsStream ()); + case SignatureImageFormat.Png: + return Task.Run (() => image.AsTiff ().AsStream ()); } } return Task.FromResult (null); diff --git a/src/SignaturePad.Shared/SignaturePadCanvasView.cs b/src/SignaturePad.Shared/SignaturePadCanvasView.cs index 73f0af7..14397c8 100644 --- a/src/SignaturePad.Shared/SignaturePadCanvasView.cs +++ b/src/SignaturePad.Shared/SignaturePadCanvasView.cs @@ -78,7 +78,7 @@ public NativePoint[] Points } #if NETFRAMEWORK - public StrokeCollection Strokes + public new StrokeCollection Strokes { get { diff --git a/src/SignaturePad.WPF/SignaturePadCanvasView.cs b/src/SignaturePad.WPF/SignaturePadCanvasView.cs index defec0c..98babfe 100644 --- a/src/SignaturePad.WPF/SignaturePadCanvasView.cs +++ b/src/SignaturePad.WPF/SignaturePadCanvasView.cs @@ -59,8 +59,7 @@ public void Clear () { if (Strokes != null) { - Strokes.Clear (); - + inkPresenter.Strokes.Clear(); OnCleared (); } } From becdbfa3ba84077746610763deb199bb827dc3fc Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Thu, 19 Jul 2018 00:59:57 +0300 Subject: [PATCH 35/72] Fix Crash on image save --- samples/Sample.Forms/Samples.MacOS/AppDelegate.cs | 2 +- samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj | 1 + samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs | 4 ++-- src/SignaturePad.WPF/SignaturePadCanvasView.cs | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/samples/Sample.Forms/Samples.MacOS/AppDelegate.cs b/samples/Sample.Forms/Samples.MacOS/AppDelegate.cs index 01690dd..a48aa3f 100644 --- a/samples/Sample.Forms/Samples.MacOS/AppDelegate.cs +++ b/samples/Sample.Forms/Samples.MacOS/AppDelegate.cs @@ -26,7 +26,7 @@ public AppDelegate() public override void DidFinishLaunching(NSNotification notification) { Forms.Init(); - LoadApplication(new App(OnSaveSignature)); + LoadApplication(new App (OnSaveSignature)); base.DidFinishLaunching(notification); } private async Task OnSaveSignature (Stream bitmap, string filename) diff --git a/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj index cf59e32..51fd251 100644 --- a/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj +++ b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj @@ -55,6 +55,7 @@ None + diff --git a/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs index 84d4a9f..9e3e3fe 100644 --- a/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs +++ b/samples/Sample.Forms/Samples.WPF/MainWindow.xaml.cs @@ -27,8 +27,8 @@ public MainWindow () private async Task OnSaveSignature (Stream bitmap, string filename) { var file = File.Create (filename); - - await bitmap.CopyToAsync (file); + if (bitmap != null) + await bitmap.CopyToAsync (file); return true; } diff --git a/src/SignaturePad.WPF/SignaturePadCanvasView.cs b/src/SignaturePad.WPF/SignaturePadCanvasView.cs index 98babfe..6de7068 100644 --- a/src/SignaturePad.WPF/SignaturePadCanvasView.cs +++ b/src/SignaturePad.WPF/SignaturePadCanvasView.cs @@ -67,7 +67,7 @@ public void Clear () private Task GetImageStreamInternal (SignatureImageFormat format, System.Drawing.SizeF scale, RectangleF signatureBounds, System.Drawing.SizeF imageSize, float strokeWidth, System.Windows.Media.Color strokeColor, System.Windows.Media.Color backgroundColor) { - return null; + return Task.FromResult(null); } From a072a6f3585d2002796f9179714cb029e9770e13 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Thu, 19 Jul 2018 01:32:03 +0300 Subject: [PATCH 36/72] use packages stable versions --- ISSUE_TEMPLATE.md | 2 +- nuget/Xamarin.Controls.SignaturePad.Forms.nuspec | 14 +++++++------- .../Samples.Android/Samples.Android.csproj | 2 +- .../Samples.MacOS/Samples.MacOS.csproj | 2 +- .../Sample.Forms/Samples.UWP/Samples.UWP.csproj | 2 +- .../Sample.Forms/Samples.WPF/Samples.WPF.csproj | 4 ++-- .../Sample.Forms/Samples.iOS/Samples.iOS.csproj | 2 +- samples/Sample.Forms/Samples/Samples.csproj | 2 +- .../SignaturePad.Forms.Droid.csproj | 2 +- .../SignaturePad.Forms.MacOS.csproj | 2 +- .../SignaturePad.Forms.UWP.csproj | 2 +- .../SignaturePad.Forms.WPF.csproj | 4 ++-- .../SignaturePad.Forms.iOS.csproj | 2 +- src/SignaturePad.Forms/SignaturePad.Forms.csproj | 2 +- 14 files changed, 22 insertions(+), 22 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 536a520..9183536 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -23,7 +23,7 @@ - Android: - iOS: - UWP: - - Xamarin.Forms: + - Xamarin.Forms: - Target Devices: - diff --git a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec index 2b9a283..903b73a 100644 --- a/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec +++ b/nuget/Xamarin.Controls.SignaturePad.Forms.nuspec @@ -20,27 +20,27 @@ - + - + - + - - + + - + - + diff --git a/samples/Sample.Forms/Samples.Android/Samples.Android.csproj b/samples/Sample.Forms/Samples.Android/Samples.Android.csproj index 6f34816..9259397 100644 --- a/samples/Sample.Forms/Samples.Android/Samples.Android.csproj +++ b/samples/Sample.Forms/Samples.Android/Samples.Android.csproj @@ -47,7 +47,7 @@ - + diff --git a/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj index 51fd251..d2837bf 100644 --- a/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj +++ b/samples/Sample.Forms/Samples.MacOS/Samples.MacOS.csproj @@ -99,7 +99,7 @@ - 3.2.0.637442-pre1 + 3.1.0.637273 diff --git a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj index 83a0ee4..3fd9786 100644 --- a/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj +++ b/samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj @@ -91,7 +91,7 @@ - + diff --git a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj index 9ee305f..5539f73 100644 --- a/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj +++ b/samples/Sample.Forms/Samples.WPF/Samples.WPF.csproj @@ -120,10 +120,10 @@ 1.0.3 - 3.2.0.637442-pre1 + 3.1.0.637273 - 3.2.0.637442-pre1 + 3.1.0.637273 diff --git a/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj b/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj index ee1fc4d..fde8963 100644 --- a/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj +++ b/samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj @@ -68,7 +68,7 @@ - + diff --git a/samples/Sample.Forms/Samples/Samples.csproj b/samples/Sample.Forms/Samples/Samples.csproj index f9da262..3a4ad20 100644 --- a/samples/Sample.Forms/Samples/Samples.csproj +++ b/samples/Sample.Forms/Samples/Samples.csproj @@ -15,7 +15,7 @@ - + \ No newline at end of file diff --git a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj index 47efba3..722f3ee 100644 --- a/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj +++ b/src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj b/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj index 72fe75b..d3b4697 100644 --- a/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj +++ b/src/SignaturePad.Forms.MacOS/SignaturePad.Forms.MacOS.csproj @@ -33,7 +33,7 @@ - + diff --git a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj index da4629e..412e947 100644 --- a/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj +++ b/src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj index b5cd11e..bdbb461 100644 --- a/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj +++ b/src/SignaturePad.Forms.WPF/SignaturePad.Forms.WPF.csproj @@ -31,8 +31,8 @@ - - + + diff --git a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj index 2755a56..bf02021 100644 --- a/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj +++ b/src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/SignaturePad.Forms/SignaturePad.Forms.csproj b/src/SignaturePad.Forms/SignaturePad.Forms.csproj index e6ff3ec..1da4a36 100644 --- a/src/SignaturePad.Forms/SignaturePad.Forms.csproj +++ b/src/SignaturePad.Forms/SignaturePad.Forms.csproj @@ -31,7 +31,7 @@ - + From 5483a1a7028e7d4d66d6d16b2e8b7e43fada2add Mon Sep 17 00:00:00 2001 From: Vladislav Date: Thu, 19 Jul 2018 23:31:14 +0300 Subject: [PATCH 37/72] LoadSaveVector, save image --- .../Sample.Forms/Samples.MacOS/AppDelegate.cs | 3 +- src/SignaturePad.MacOS/InkPresenter.cs | 34 +++++++++++++------ .../SignaturePadCanvasView.cs | 6 ++-- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/samples/Sample.Forms/Samples.MacOS/AppDelegate.cs b/samples/Sample.Forms/Samples.MacOS/AppDelegate.cs index a48aa3f..546191e 100644 --- a/samples/Sample.Forms/Samples.MacOS/AppDelegate.cs +++ b/samples/Sample.Forms/Samples.MacOS/AppDelegate.cs @@ -33,7 +33,7 @@ private async Task OnSaveSignature (Stream bitmap, string filename) { var tcs = new TaskCompletionSource (); - NSImage image = NSImage.FromStream(bitmap); + NSImage image = bitmap == null ? null : NSImage.FromStream(bitmap); var status = await PHPhotoLibrary.RequestAuthorizationAsync (); if (status == PHAuthorizationStatus.Authorized) @@ -44,6 +44,7 @@ private async Task OnSaveSignature (Stream bitmap, string filename) // tcs.TrySetResult (error == null); //}); + tcs.TrySetResult (true); } else { diff --git a/src/SignaturePad.MacOS/InkPresenter.cs b/src/SignaturePad.MacOS/InkPresenter.cs index 31ec9c1..230f8a8 100644 --- a/src/SignaturePad.MacOS/InkPresenter.cs +++ b/src/SignaturePad.MacOS/InkPresenter.cs @@ -93,18 +93,16 @@ public override void MouseUp (NSEvent evt) } // clear the current path - //currentPath = null; + currentPath = null; // update the dirty rectangle UpdateBounds (touchLocation); - NeedsDisplay = true; // we are done with drawing OnStrokeCompleted (); } - public override void DrawRect (CGRect rect) { base.DrawRect (rect); @@ -125,12 +123,6 @@ public override void DrawRect (CGRect rect) bitmapBuffer = CreateBufferImage (); } - // if there are no lines, the the bitmap will be null - if (bitmapBuffer != null) - { - bitmapBuffer.Draw (CGPoint.Empty, rect, NSCompositingOperation.Screen, 0); - } - // draw the current path over the old paths if (currentPath != null) { @@ -152,9 +144,29 @@ private NSImage CreateBufferImage () return null; } + var context = NSGraphicsContext.CurrentContext.CGContext; + + context.SetLineCap(CGLineCap.Round); + context.SetLineJoin(CGLineJoin.Round); + + foreach (var path in paths) + { + context.SetStrokeColor(path.Color.CGColor); + context.SetLineWidth(path.Width); + + context.AddPath(path.Path); + context.StrokePath(); + + path.IsDirty = false; + } + var size = Bounds.Size; - - return null; + var image = new NSImage(size); + image.LockFocus(); + image.Draw(new CGRect(CGPoint.Empty, size), CGRect.Empty, NSCompositingOperation.SourceOver, 1.0f); + image.UnlockFocus(); + + return image; } public override void Layout () diff --git a/src/SignaturePad.MacOS/SignaturePadCanvasView.cs b/src/SignaturePad.MacOS/SignaturePadCanvasView.cs index bd91021..7fbe6fb 100644 --- a/src/SignaturePad.MacOS/SignaturePadCanvasView.cs +++ b/src/SignaturePad.MacOS/SignaturePadCanvasView.cs @@ -91,7 +91,7 @@ public void Clear () private NSImage GetImageInternal (CGSize scale, CGRect signatureBounds, CGSize imageSize, float strokeWidth, NSColor strokeColor, NSColor backgroundColor) { - return null; + return new NSImage(imageSize); } private Task GetImageStreamInternal (SignatureImageFormat format, CGSize scale, CGRect signatureBounds, CGSize imageSize, float strokeWidth, NSColor strokeColor, NSColor backgroundColor) @@ -102,9 +102,9 @@ private Task GetImageStreamInternal (SignatureImageFormat format, CGSize switch (format) { case SignatureImageFormat.Jpeg: - return Task.Run (() => image.AsTiff ().AsStream ()); + return Task.Run (() => image.AsTiff ()?.AsStream ()); case SignatureImageFormat.Png: - return Task.Run (() => image.AsTiff ().AsStream ()); + return Task.Run (() => image.AsTiff ()?.AsStream ()); } } return Task.FromResult (null); From 3328fd52e2bacf8327a42f90e8504217d30516b6 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Fri, 20 Jul 2018 00:59:50 +0300 Subject: [PATCH 38/72] SingleLine mode --- src/SignaturePad.Android/InkPresenter.cs | 5 +++++ src/SignaturePad.InkPresenter.Shared/InkPresenter.cs | 1 + src/SignaturePad.MacOS/InkPresenter.cs | 5 +++++ src/SignaturePad.iOS/InkPresenter.cs | 5 +++++ 4 files changed, 16 insertions(+) diff --git a/src/SignaturePad.Android/InkPresenter.cs b/src/SignaturePad.Android/InkPresenter.cs index d0960f0..7c4d8ec 100644 --- a/src/SignaturePad.Android/InkPresenter.cs +++ b/src/SignaturePad.Android/InkPresenter.cs @@ -56,6 +56,11 @@ public override bool OnTouchEvent (MotionEvent e) private void TouchesBegan (MotionEvent e) { + if (IsSingleLine) + { + Clear(); + } + // don't allow the event to propagate because we're handling it here Parent?.RequestDisallowInterceptTouchEvent (true); diff --git a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs index 09d6c13..9e2bb97 100644 --- a/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs +++ b/src/SignaturePad.InkPresenter.Shared/InkPresenter.cs @@ -64,6 +64,7 @@ internal partial class InkPresenter public float StrokeWidth { get; set; } = 1f; + public bool IsSingleLine { get; set; } // private properties #if __IOS__ || __MACOS__ diff --git a/src/SignaturePad.MacOS/InkPresenter.cs b/src/SignaturePad.MacOS/InkPresenter.cs index 230f8a8..eb6b1ea 100644 --- a/src/SignaturePad.MacOS/InkPresenter.cs +++ b/src/SignaturePad.MacOS/InkPresenter.cs @@ -35,6 +35,11 @@ private void Initialize () public override void MouseDown (NSEvent evt) { + if (IsSingleLine) + { + Clear(); + } + // create a new path and set the options currentPath = new InkStroke (new CGPath(), new List (), StrokeColor, StrokeWidth); diff --git a/src/SignaturePad.iOS/InkPresenter.cs b/src/SignaturePad.iOS/InkPresenter.cs index 9f70199..a56ce86 100644 --- a/src/SignaturePad.iOS/InkPresenter.cs +++ b/src/SignaturePad.iOS/InkPresenter.cs @@ -35,6 +35,11 @@ private void Initialize () public override void TouchesBegan (NSSet touches, UIEvent evt) { + if (IsSingleLine) + { + Clear (); + } + // create a new path and set the options currentPath = new InkStroke (UIBezierPath.Create (), new List (), StrokeColor, StrokeWidth); From dedc9283712b5d36ad567983a3bc39f34d6ef992 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Fri, 20 Jul 2018 01:39:54 +0300 Subject: [PATCH 39/72] IsSingleLine property with example --- samples/Sample.Forms/Samples/EventsPage.xaml | 5 +++-- .../SignaturePadCanvasRenderer.cs | 1 + .../SignaturePadCanvasView.cs | 12 ++++++++++++ src/SignaturePad.Forms.Shared/SignaturePadView.cs | 14 ++++++++++++++ src/SignaturePad.Shared/SignaturePadCanvasView.cs | 6 ++++++ 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/samples/Sample.Forms/Samples/EventsPage.xaml b/samples/Sample.Forms/Samples/EventsPage.xaml index 1958eeb..7a47100 100644 --- a/samples/Sample.Forms/Samples/EventsPage.xaml +++ b/samples/Sample.Forms/Samples/EventsPage.xaml @@ -1,4 +1,4 @@ - + SignatureLineColor="#B8860B" BackgroundColor="#FAFAD2" + IsSingleLine="true"/>