| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using Xamarin.Forms;using Xamarin.Forms.Xaml;namespace comal.timesheets{    public class SignatureEditorChangedEventArgs : EventArgs    {    }    public delegate void SignatureEditorChangedEvent(object sender, SignatureEditorChangedEventArgs args);        [XamlCompilation(XamlCompilationOptions.Compile)]    public partial class SignatureEditor    {        public event SignatureEditorChangedEvent Changed;        public void Load(byte[] data)        {            if (data?.Any() == true)            {                signaturePad.IsVisible = false;                _preview.Source = ImageSource.FromStream(() => { return new MemoryStream(data); });                _preview.IsVisible = true;            }            else            {                _preview.IsVisible = false;                _preview.Source = null;                signaturePad.IsVisible = true;                signaturePad.Clear();            }        }        public byte[] Save()        {            signaturePad.Save();            if (signaturePad.ImageSource is StreamImageSource source)            {                Task<Stream> task = source.Stream(System.Threading.CancellationToken.None);                Stream stream = task.Result;                byte[] bytes = new byte[stream.Length];                stream.Read(bytes, 0, bytes.Length);                return bytes;            }            return new byte[] { };        }                public SignatureEditor()        {            InitializeComponent();            Load(null);        }        private void SignaturePad_OnStrokeCompleted(object sender, EventArgs e)        {            Changed?.Invoke(this,new SignatureEditorChangedEventArgs());        }            }}
 |