Showing preview only (404K chars total). Download the full file or copy to clipboard to get everything.
Repository: xamarin/SignaturePad
Branch: master
Commit: b32285178014
Files: 122
Total size: 369.9 KB
Directory structure:
gitextract_9f8fffgb/
├── .editorconfig
├── .gitignore
├── ISSUE_TEMPLATE.md
├── LICENSE
├── README.md
├── build.cake
├── build.ps1
├── build.sh
├── nuget/
│ ├── Xamarin.Controls.SignaturePad.Forms.nuspec
│ └── Xamarin.Controls.SignaturePad.nuspec
├── samples/
│ ├── Sample.Android/
│ │ ├── MainActivity.cs
│ │ ├── Properties/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── AssemblyInfo.cs
│ │ ├── Resources/
│ │ │ ├── drawable/
│ │ │ │ └── background.xml
│ │ │ ├── layout/
│ │ │ │ └── main.axml
│ │ │ └── values/
│ │ │ └── strings.xml
│ │ ├── Sample.Android.csproj
│ │ └── Sample.Android.sln
│ ├── Sample.Forms/
│ │ ├── Sample.Forms.Mac.sln
│ │ ├── Sample.Forms.sln
│ │ ├── Samples/
│ │ │ ├── App.xaml
│ │ │ ├── App.xaml.cs
│ │ │ ├── BindingPage.xaml
│ │ │ ├── BindingPage.xaml.cs
│ │ │ ├── BindingPageViewModel.cs
│ │ │ ├── EventsPage.xaml
│ │ │ ├── EventsPage.xaml.cs
│ │ │ ├── Helpers/
│ │ │ │ ├── CaptureSignatureBehaviorBase.cs
│ │ │ │ ├── CaptureSignaturePointsBehavior.cs
│ │ │ │ ├── CaptureSignatureStrokesBehavior.cs
│ │ │ │ └── NotConverter.cs
│ │ │ ├── MainPage.xaml
│ │ │ ├── MainPage.xaml.cs
│ │ │ └── Samples.csproj
│ │ ├── Samples.Android/
│ │ │ ├── MainActivity.cs
│ │ │ ├── Properties/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── Resources/
│ │ │ │ ├── layout/
│ │ │ │ │ ├── tabs.xml
│ │ │ │ │ └── toolbar.xml
│ │ │ │ ├── values/
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ └── style.xml
│ │ │ │ └── values-v21/
│ │ │ │ └── style.xml
│ │ │ └── Samples.Android.csproj
│ │ ├── Samples.UWP/
│ │ │ ├── App.xaml
│ │ │ ├── App.xaml.cs
│ │ │ ├── MainPage.xaml
│ │ │ ├── MainPage.xaml.cs
│ │ │ ├── Package.appxmanifest
│ │ │ ├── Properties/
│ │ │ │ ├── AssemblyInfo.cs
│ │ │ │ └── Default.rd.xml
│ │ │ ├── Samples.UWP.csproj
│ │ │ └── Samples.UWP_TemporaryKey.pfx
│ │ └── Samples.iOS/
│ │ ├── AppDelegate.cs
│ │ ├── Entitlements.plist
│ │ ├── Info.plist
│ │ ├── LaunchScreen.storyboard
│ │ ├── Main.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Resources/
│ │ │ └── Assets.xcassets/
│ │ │ └── AppIcons.appiconset/
│ │ │ └── Contents.json
│ │ └── Samples.iOS.csproj
│ ├── Sample.UWP/
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── MainPage.xaml
│ │ ├── MainPage.xaml.cs
│ │ ├── Package.appxmanifest
│ │ ├── Properties/
│ │ │ ├── AssemblyInfo.cs
│ │ │ └── Default.rd.xml
│ │ ├── Sample.UWP.csproj
│ │ ├── Sample.UWP.sln
│ │ └── Sample.UWP_TemporaryKey.pfx
│ └── Sample.iOS/
│ ├── AppDelegate.cs
│ ├── Entitlements.plist
│ ├── Info.plist
│ ├── LaunchScreen.storyboard
│ ├── Main.cs
│ ├── Main.storyboard
│ ├── Resources/
│ │ └── Assets.xcassets/
│ │ └── AppIcons.appiconset/
│ │ └── Contents.json
│ ├── Sample.iOS.csproj
│ ├── Sample.iOS.sln
│ ├── ViewController.cs
│ ├── ViewController.designer.cs
│ ├── iTunesArtwork
│ └── iTunesArtwork@2x
└── src/
├── SignaturePad.Android/
│ ├── InkPresenter.cs
│ ├── Resources/
│ │ ├── drawable/
│ │ │ └── signature_pad_background.xml
│ │ ├── layout/
│ │ │ └── signature_pad_layout.axml
│ │ └── values/
│ │ ├── attrs.xml
│ │ └── signature_pad_defaults.xml
│ ├── SignaturePad.Android.csproj
│ ├── SignaturePadCanvasView.cs
│ └── SignaturePadView.cs
├── SignaturePad.Forms/
│ ├── SignaturePad.Forms.csproj
│ └── SignaturePadCanvasRenderer.cs
├── SignaturePad.Forms.Droid/
│ ├── SignaturePad.Forms.Droid.csproj
│ └── SignaturePadViewRenderer.cs
├── SignaturePad.Forms.Platform.Shared/
│ ├── ColorExtensions.cs
│ └── SignaturePadCanvasRenderer.cs
├── SignaturePad.Forms.Shared/
│ ├── ImageConstructionSettings.cs
│ ├── SignatureImageFormat.cs
│ ├── SignaturePadCanvasView.cs
│ └── SignaturePadView.cs
├── SignaturePad.Forms.UWP/
│ └── SignaturePad.Forms.UWP.csproj
├── SignaturePad.Forms.iOS/
│ └── SignaturePad.Forms.iOS.csproj
├── SignaturePad.InkPresenter.Shared/
│ ├── InkPresenter.cs
│ └── InkStroke.cs
├── SignaturePad.Mac.sln
├── SignaturePad.Shared/
│ ├── Extensions.cs
│ ├── ImageConstructionSettings.cs
│ ├── PathSmoothing.cs
│ ├── SignatureImageFormat.cs
│ ├── SignaturePadCanvasView.cs
│ └── SignaturePadView.cs
├── SignaturePad.UWP/
│ ├── SignaturePad.UWP.csproj
│ ├── SignaturePad.cs
│ ├── SignaturePadCanvasView.cs
│ └── Themes/
│ └── Generic.xaml
├── SignaturePad.iOS/
│ ├── InkPresenter.cs
│ ├── SignaturePad.iOS.csproj
│ ├── SignaturePadCanvasView.cs
│ └── SignaturePadView.cs
└── SignaturePad.sln
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
# Don't use tabs for indentation.
[*]
indent_style = space
# (Please don't specify an indent_size here; that has too many unintended consequences.)
# Code files
[*.{cs,csx,vb,vbx}]
indent_style = tab
indent_size = 4
insert_final_newline = true
charset = utf-8-bom
trim_trailing_whitespace = true
# Xml project files
[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}]
indent_size = 2
# Xml config files
[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]
indent_size = 2
# JSON files
[*.json]
indent_size = 2
# .NET code style settings:
[*.{cs,vb}]
# Sort using and Import directives with System.* appearing first
dotnet_sort_system_directives_first = true
# Avoid "this." and "Me." if not necessary
dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_event = false:suggestion
# Use language keywords instead of framework type names for type references
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
dotnet_style_predefined_type_for_member_access = true:suggestion
# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
# Expression-level preferences
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
# Null-checking preferences
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion
# C# code style settings:
[*.cs]
# Modifier preferences
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async
# Prefer "var" everywhere
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = true:suggestion
# Prefer method-like constructs to have a block body
csharp_style_expression_bodied_methods = false:suggestion
csharp_style_expression_bodied_constructors = false:suggestion
csharp_style_expression_bodied_operators = false:suggestion
# Prefer property-like constructs to have an expression-body
csharp_style_expression_bodied_properties = true:suggestion
csharp_style_expression_bodied_indexers = true:suggestion
csharp_style_expression_bodied_accessors = true:suggestion
# Pattern matching
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
# Inlined variable declarations
csharp_style_inlined_variable_declaration = true:suggestion
# Expression-level preferences
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion
# "Null" checking preferences
csharp_style_throw_expression = true:suggestion
csharp_style_conditional_delegate_call = true:suggestion
# Code block preferences
csharp_prefer_braces = true:suggestion
# Newline settings
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
# Indentation options
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = one_less_than_current
# Spacing options
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = do_not_ignore
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = true
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = true
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false
# Wrapping options
csharp_preserve_single_line_statements = false
csharp_preserve_single_line_blocks = true
# C# naming rules:
[*.cs]
# symbols
# const fields
dotnet_naming_symbols.constant_fields.required_modifiers = const
dotnet_naming_symbols.constant_fields.applicable_kinds = field
# methods|properties
dotnet_naming_symbols.methods_and_properties.applicable_kinds = delegate,event,enum,interface,struct,class,method,property
# parameters|fields
dotnet_naming_symbols.parameters_and_fields.applicable_kinds = field,parameter
# private|internal fields
dotnet_naming_symbols.private_internal_fields.applicable_kinds = field
dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private,internal
# rules
# name all constant fields using PascalCase
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case
# name all methods and properties using PascalCase
dotnet_naming_rule.methods_and_properties_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.methods_and_properties_should_be_pascal_case.symbols = methods_and_properties
dotnet_naming_rule.methods_and_properties_should_be_pascal_case.style = pascal_case
# name all parameters and fields using camelCase
dotnet_naming_rule.parameters_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.parameters_should_be_pascal_case.symbols = parameters_and_fields
dotnet_naming_rule.parameters_should_be_pascal_case.style = camel_case
# internal and private fields should be camelCase
dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion
dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields
dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# Repo-specific files
tools/
output/
**/Resources/Resource.Designer.cs
component/*.xam
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.publishsettings
node_modules/
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
================================================
FILE: ISSUE_TEMPLATE.md
================================================
### Description
<!-- a general description goes here -->
### Code
<!-- a snippet of code that demonstrates the issue -->
### Expected Behavior
<!-- a general description of what was the expected behavior or result -->
### Actual Behavior
<!-- a general description of what really happened -->
### Basic Information
- Version with issue: <!-- the version of SkiaSharp that has the issue -->
- Last known good version: <!-- the version of SkiaSharp that still working -->
- IDE: <!-- Visual Studio / Visual Studio for Mac / MonoDevelop / Visual Studio Code -->
- Platform Target Frameworks: <!-- all that apply, remove the platforms that aren't broken or haven't had any testing -->
- Android: <!-- the version of the Android SDK you are compiling against, e.g. 7.1 -->
- iOS: <!-- the version of the iOS SDK you are compiling against, e.g. 11.1 -->
- UWP: <!-- the version of the UWP SDK you are compiling against, e.g. 16299 -->
- Xamarin.Forms: <!-- the version of Xamarin.Forms you are building for, e.g. 2.5.0.280555 -->
- Target Devices:
- <!-- the devices that you noticed this on, e.g. iPhone X -->
### Screenshots
<!-- if the issue is a visual issue, please include screenshots showing the problem if possible -->
### Reproduction Link
<!-- please upload or provide a link to a reproduction case -->
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2017 Xamarin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Signature Pad
[](https://jenkins.mono-project.com/view/Components/job/Components-SignaturePad-Windows/) [](https://jenkins.mono-project.com/view/Components/job/Components-SignaturePad/)
[](https://www.nuget.org/packages/Xamarin.Controls.SignaturePad) [](https://www.nuget.org/packages/Xamarin.Controls.SignaturePad.Forms)
Signature Pad makes capturing, saving, exporting, and displaying signatures extremely simple on
Xamarin.iOS, Xamarin.Android and Windows.
Not only is Signature Pad available for native apps, but also available in Xamarin.Forms apps.

---
## Using Signature Pad
Signature Pad can be installed from [NuGet.org][nuget-link] for native Xamarin and Windows apps:
```
nuget install Xamarin.Controls.SignaturePad
```
And also for Xamarin.Forms apps:
```
nuget install Xamarin.Controls.SignaturePad.Forms
```
### Using Signature Pad on iOS
```csharp
using Xamarin.Controls;
var signatureView = new SignaturePadView (View.Frame) {
StrokeWidth = 3f,
StrokeColor = UIColor.Black,
BackgroundColor = UIColor.White,
};
```
### Using Signature Pad on Android
```csharp
using Xamarin.Controls;
var signatureView = new SignaturePadView (this) {
StrokeWidth = 3f,
StrokeColor = Color.White,
BackgroundColor = Color.Black
};
```
### Using Signature Pad on Windows
```xml
<!-- xmlns:controls="using:Xamarin.Controls" -->
<controls:SignaturePad
x:Name="signatureView"
StrokeWidth="3"
StrokeColor="White"
Background="Black" />
```
### Using Signature Pad on Xamarin.Forms
```xml
<!-- xmlns:controls="clr-namespace:SignaturePad.Forms;assembly=SignaturePad.Forms" -->
<controls:SignaturePadView
x:Name="signatureView"
StrokeWidth="3"
StrokeColor="BlackWhite"
BackgroundColor="Black" />
```
### Obtaining a Signature Image
The signature that was drawn on the canvas can be obtained as a image using the `GetImage(...)`
method overloads. The resulting image will be in the native platform image type:
```csharp
// iOS
UIImage image = signatureView.GetImage ();
// Android
Bitmap image = signatureView.GetImage ();
// Windows
WriteableBitmap bitmap = signatureView.GetImage ();
```
For Xamarin.Forms, there is no "native" image format, but `GetImageStreamAsync` can be used instead
to retrieve an encoded (jpeg or png) image stream:
```csharp
Stream bitmap = await signatureView.GetImageStreamAsync (SignatureImageFormat.Png);
```
### Obtaining the Signature Points
In addition to retrieving the signature as an image, the signature can also be retrieved as
as an array of points:
```csharp
var strokes = signatureView.Strokes;
```
These strokes can be used to save and restore a signature:
```csharp
// restore strokes (iOS, Android, Windows)
signatureView.LoadStrokes (newStrokes);
// restore strokes (Xamarin.Forms)
signatureView.Strokes = newStrokes;
```
---
## License
The license for this repository is specified in [LICENSE](LICENSE).
## .NET Foundation
This project is part of the [.NET Foundation](http://www.dotnetfoundation.org/projects).
[nuget-link]: https://www.nuget.org/packages/Xamarin.Controls.SignaturePad
================================================
FILE: build.cake
================================================
///////////////////////////////////////////////////////////////////////////////
// ARGUMENTS
///////////////////////////////////////////////////////////////////////////////
var CURRENT_PACKAGE_VERSION = "3.0.0";
var target = Argument("target", "Default");
var configuration = Argument("configuration", "Release");
var packageVersion = Argument("packageVersion", CURRENT_PACKAGE_VERSION);
var majorVersion = $"{packageVersion.Substring(0, packageVersion.IndexOf("."))}.0.0.0";
var buildVersion = Argument("buildVersion", EnvironmentVariable("BUILD_NUMBER") ?? "");
if (!string.IsNullOrEmpty(buildVersion)) {
buildVersion = $"-{buildVersion}";
}
///////////////////////////////////////////////////////////////////////////////
// TASKS
///////////////////////////////////////////////////////////////////////////////
Task("libs")
.Does(() =>
{
var sln = IsRunningOnWindows() ? "./src/SignaturePad.sln" : "./src/SignaturePad.Mac.sln";
MSBuild(sln, new MSBuildSettings {
Verbosity = Verbosity.Minimal,
Configuration = configuration,
PlatformTarget = PlatformTarget.MSIL,
MSBuildPlatform = MSBuildPlatform.x86,
ArgumentCustomization = args => args.Append("/restore"),
Properties = {
{ "AssemblyVersion", new [] { majorVersion } },
{ "Version", new [] { packageVersion } },
},
});
EnsureDirectoryExists("./output/android/");
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.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.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/");
});
Task("nuget")
.IsDependentOn("libs")
.WithCriteria(IsRunningOnWindows())
.Does(() =>
{
var nuget = Context.Tools.Resolve("nuget.exe");
var nuspecs = GetFiles("./nuget/*.nuspec");
var settings = new NuGetPackSettings {
BasePath = ".",
OutputDirectory = "./output",
Properties = new Dictionary<string, string> {
{ "configuration", configuration },
{ "version", packageVersion },
},
};
EnsureDirectoryExists("./output");
NuGetPack(nuspecs, settings);
settings.Properties["version"] = $"{packageVersion}-preview{buildVersion}";
NuGetPack(nuspecs, settings);
});
Task("samples")
.IsDependentOn("libs")
.Does(() =>
{
var settings = new MSBuildSettings {
Verbosity = Verbosity.Minimal,
Configuration = configuration,
PlatformTarget = PlatformTarget.MSIL,
MSBuildPlatform = MSBuildPlatform.x86,
ArgumentCustomization = args => args.Append("/restore"),
};
if (IsRunningOnWindows()) {
MSBuild("./samples/Sample.Android/Sample.Android.sln", settings);
MSBuild("./samples/Sample.iOS/Sample.iOS.sln", settings);
MSBuild("./samples/Sample.UWP/Sample.UWP.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.Forms/Sample.Forms.Mac.sln", settings);
}
});
Task("Default")
.IsDependentOn("libs")
.IsDependentOn("nuget")
.IsDependentOn("samples");
Task("CI")
.IsDependentOn("Default");
RunTarget(target);
================================================
FILE: build.ps1
================================================
##########################################################################
# This is the Cake bootstrapper script for PowerShell.
# This file was downloaded from https://github.com/cake-build/resources
# Feel free to change this file to fit your needs.
##########################################################################
<#
.SYNOPSIS
This is a Powershell script to bootstrap a Cake build.
.DESCRIPTION
This Powershell script will download NuGet if missing, restore NuGet tools (including Cake)
and execute your Cake build script with the parameters you provide.
.PARAMETER Script
The build script to execute.
.PARAMETER Target
The build script target to run.
.PARAMETER Configuration
The build configuration to use.
.PARAMETER Verbosity
Specifies the amount of information to be displayed.
.PARAMETER ShowDescription
Shows description about tasks.
.PARAMETER DryRun
Performs a dry run.
.PARAMETER Experimental
Uses the nightly builds of the Roslyn script engine.
.PARAMETER Mono
Uses the Mono Compiler rather than the Roslyn script engine.
.PARAMETER SkipToolPackageRestore
Skips restoring of packages.
.PARAMETER ScriptArgs
Remaining arguments are added here.
.LINK
https://cakebuild.net
#>
[CmdletBinding()]
Param(
[string]$Script = "build.cake",
[string]$Target,
[string]$Configuration,
[ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")]
[string]$Verbosity,
[switch]$ShowDescription,
[Alias("WhatIf", "Noop")]
[switch]$DryRun,
[switch]$Experimental,
[switch]$Mono,
[switch]$SkipToolPackageRestore,
[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
[string[]]$ScriptArgs
)
[Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null
function MD5HashFile([string] $filePath)
{
if ([string]::IsNullOrEmpty($filePath) -or !(Test-Path $filePath -PathType Leaf))
{
return $null
}
[System.IO.Stream] $file = $null;
[System.Security.Cryptography.MD5] $md5 = $null;
try
{
$md5 = [System.Security.Cryptography.MD5]::Create()
$file = [System.IO.File]::OpenRead($filePath)
return [System.BitConverter]::ToString($md5.ComputeHash($file))
}
finally
{
if ($file -ne $null)
{
$file.Dispose()
}
}
}
function GetProxyEnabledWebClient
{
$wc = New-Object System.Net.WebClient
$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
$wc.Proxy = $proxy
return $wc
}
Write-Host "Preparing to run build script..."
if(!$PSScriptRoot){
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
}
$TOOLS_DIR = Join-Path $PSScriptRoot "tools"
$ADDINS_DIR = Join-Path $TOOLS_DIR "Addins"
$MODULES_DIR = Join-Path $TOOLS_DIR "Modules"
$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe"
$CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe"
$NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
$PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config"
$PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR "packages.config.md5sum"
$ADDINS_PACKAGES_CONFIG = Join-Path $ADDINS_DIR "packages.config"
$MODULES_PACKAGES_CONFIG = Join-Path $MODULES_DIR "packages.config"
# Make sure tools folder exists
if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) {
Write-Verbose -Message "Creating tools directory..."
New-Item -Path $TOOLS_DIR -Type directory | out-null
}
# Make sure that packages.config exist.
if (!(Test-Path $PACKAGES_CONFIG)) {
Write-Verbose -Message "Downloading packages.config..."
try {
$wc = GetProxyEnabledWebClient
$wc.DownloadFile("https://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch {
Throw "Could not download packages.config."
}
}
# Try find NuGet.exe in path if not exists
if (!(Test-Path $NUGET_EXE)) {
Write-Verbose -Message "Trying to find nuget.exe in PATH..."
$existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_ -PathType Container) }
$NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1
if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) {
Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)."
$NUGET_EXE = $NUGET_EXE_IN_PATH.FullName
}
}
# Try download NuGet.exe if not exists
if (!(Test-Path $NUGET_EXE)) {
Write-Verbose -Message "Downloading NuGet.exe..."
try {
$wc = GetProxyEnabledWebClient
$wc.DownloadFile($NUGET_URL, $NUGET_EXE)
} catch {
Throw "Could not download NuGet.exe."
}
}
# Save nuget.exe path to environment to be available to child processed
$ENV:NUGET_EXE = $NUGET_EXE
# Restore tools from NuGet?
if(-Not $SkipToolPackageRestore.IsPresent) {
Push-Location
Set-Location $TOOLS_DIR
# Check for changes in packages.config and remove installed tools if true.
[string] $md5Hash = MD5HashFile($PACKAGES_CONFIG)
if((!(Test-Path $PACKAGES_CONFIG_MD5)) -Or
($md5Hash -ne (Get-Content $PACKAGES_CONFIG_MD5 ))) {
Write-Verbose -Message "Missing or changed package.config hash..."
Get-ChildItem -Exclude packages.config,nuget.exe,Cake.Bakery |
Remove-Item -Recurse
}
Write-Verbose -Message "Restoring tools from NuGet..."
$NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$TOOLS_DIR`""
if ($LASTEXITCODE -ne 0) {
Throw "An error occurred while restoring NuGet tools."
}
else
{
$md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII"
}
Write-Verbose -Message ($NuGetOutput | out-string)
Pop-Location
}
# Restore addins from NuGet
if (Test-Path $ADDINS_PACKAGES_CONFIG) {
Push-Location
Set-Location $ADDINS_DIR
Write-Verbose -Message "Restoring addins from NuGet..."
$NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$ADDINS_DIR`""
if ($LASTEXITCODE -ne 0) {
Throw "An error occurred while restoring NuGet addins."
}
Write-Verbose -Message ($NuGetOutput | out-string)
Pop-Location
}
# Restore modules from NuGet
if (Test-Path $MODULES_PACKAGES_CONFIG) {
Push-Location
Set-Location $MODULES_DIR
Write-Verbose -Message "Restoring modules from NuGet..."
$NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$MODULES_DIR`""
if ($LASTEXITCODE -ne 0) {
Throw "An error occurred while restoring NuGet modules."
}
Write-Verbose -Message ($NuGetOutput | out-string)
Pop-Location
}
# Make sure that Cake has been installed.
if (!(Test-Path $CAKE_EXE)) {
Throw "Could not find Cake.exe at $CAKE_EXE"
}
# Build Cake arguments
$cakeArguments = @("$Script");
if ($Target) { $cakeArguments += "-target=$Target" }
if ($Configuration) { $cakeArguments += "-configuration=$Configuration" }
if ($Verbosity) { $cakeArguments += "-verbosity=$Verbosity" }
if ($ShowDescription) { $cakeArguments += "-showdescription" }
if ($DryRun) { $cakeArguments += "-dryrun" }
if ($Experimental) { $cakeArguments += "-experimental" }
if ($Mono) { $cakeArguments += "-mono" }
$cakeArguments += $ScriptArgs
# Start Cake
Write-Host "Running build script..."
&$CAKE_EXE $cakeArguments
exit $LASTEXITCODE
================================================
FILE: build.sh
================================================
#!/usr/bin/env bash
##########################################################################
# This is the Cake bootstrapper script for Linux and OS X.
# This file was downloaded from https://github.com/cake-build/resources
# Feel free to change this file to fit your needs.
##########################################################################
# Define directories.
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
TOOLS_DIR=$SCRIPT_DIR/tools
ADDINS_DIR=$TOOLS_DIR/Addins
MODULES_DIR=$TOOLS_DIR/Modules
NUGET_EXE=$TOOLS_DIR/nuget.exe
CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe
PACKAGES_CONFIG=$TOOLS_DIR/packages.config
PACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum
ADDINS_PACKAGES_CONFIG=$ADDINS_DIR/packages.config
MODULES_PACKAGES_CONFIG=$MODULES_DIR/packages.config
# Define md5sum or md5 depending on Linux/OSX
MD5_EXE=
if [[ "$(uname -s)" == "Darwin" ]]; then
MD5_EXE="md5 -r"
else
MD5_EXE="md5sum"
fi
# Define default arguments.
SCRIPT="build.cake"
CAKE_ARGUMENTS=()
# Parse arguments.
for i in "$@"; do
case $1 in
-s|--script) SCRIPT="$2"; shift ;;
--) shift; CAKE_ARGUMENTS+=("$@"); break ;;
*) CAKE_ARGUMENTS+=("$1") ;;
esac
shift
done
# Make sure the tools folder exist.
if [ ! -d "$TOOLS_DIR" ]; then
mkdir "$TOOLS_DIR"
fi
# Make sure that packages.config exist.
if [ ! -f "$TOOLS_DIR/packages.config" ]; then
echo "Downloading packages.config..."
curl -Lsfo "$TOOLS_DIR/packages.config" https://cakebuild.net/download/bootstrapper/packages
if [ $? -ne 0 ]; then
echo "An error occurred while downloading packages.config."
exit 1
fi
fi
# Download NuGet if it does not exist.
if [ ! -f "$NUGET_EXE" ]; then
echo "Downloading NuGet..."
curl -Lsfo "$NUGET_EXE" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
if [ $? -ne 0 ]; then
echo "An error occurred while downloading nuget.exe."
exit 1
fi
fi
# Restore tools from NuGet.
pushd "$TOOLS_DIR" >/dev/null
if [ ! -f "$PACKAGES_CONFIG_MD5" ] || [ "$( cat "$PACKAGES_CONFIG_MD5" | sed 's/\r$//' )" != "$( $MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' )" ]; then
find . -type d ! -name . ! -name 'Cake.Bakery' | xargs rm -rf
fi
mono "$NUGET_EXE" install -ExcludeVersion
if [ $? -ne 0 ]; then
echo "Could not restore NuGet tools."
exit 1
fi
$MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' >| "$PACKAGES_CONFIG_MD5"
popd >/dev/null
# Restore addins from NuGet.
if [ -f "$ADDINS_PACKAGES_CONFIG" ]; then
pushd "$ADDINS_DIR" >/dev/null
mono "$NUGET_EXE" install -ExcludeVersion
if [ $? -ne 0 ]; then
echo "Could not restore NuGet addins."
exit 1
fi
popd >/dev/null
fi
# Restore modules from NuGet.
if [ -f "$MODULES_PACKAGES_CONFIG" ]; then
pushd "$MODULES_DIR" >/dev/null
mono "$NUGET_EXE" install -ExcludeVersion
if [ $? -ne 0 ]; then
echo "Could not restore NuGet modules."
exit 1
fi
popd >/dev/null
fi
# Make sure that Cake has been installed.
if [ ! -f "$CAKE_EXE" ]; then
echo "Could not find Cake.exe at '$CAKE_EXE'."
exit 1
fi
# Start Cake
exec mono "$CAKE_EXE" $SCRIPT "${CAKE_ARGUMENTS[@]}"
================================================
FILE: nuget/Xamarin.Controls.SignaturePad.Forms.nuspec
================================================
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Xamarin.Controls.SignaturePad.Forms</id>
<title>SignaturePad for Xamarin.Forms</title>
<version>$version$</version>
<authors>Microsoft</authors>
<owners>Microsoft</owners>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<licenseUrl>https://go.microsoft.com/fwlink/?linkid=874508</licenseUrl>
<projectUrl>https://go.microsoft.com/fwlink/?linkid=874507</projectUrl>
<iconUrl>https://go.microsoft.com/fwlink/?linkid=874510</iconUrl>
<description>Makes capturing, saving, and displaying signatures extremely simple.</description>
<releaseNotes>https://go.microsoft.com/fwlink/?linkid=874509</releaseNotes>
<copyright>© Microsoft Corporation. All rights reserved.</copyright>
<tags>xamarin,signature,handwriting,windows,ios,android,uwp,xamarin.forms</tags>
<repository url="https://go.microsoft.com/fwlink/?linkid=874507" />
<dependencies>
<group targetFramework="MonoAndroid">
<dependency id="Xamarin.Controls.SignaturePad" version="$version$" exclude="Build,Analyzers" />
<dependency id="Xamarin.Forms" version="2.5.0.280555" exclude="Build,Analyzers" />
</group>
<group targetFramework="Xamarin.iOS">
<dependency id="Xamarin.Controls.SignaturePad" version="$version$" exclude="Build,Analyzers" />
<dependency id="Xamarin.Forms" version="2.5.0.280555" exclude="Build,Analyzers" />
</group>
<group targetFramework="uap10.0">
<dependency id="Xamarin.Controls.SignaturePad" version="$version$" exclude="Build,Analyzers" />
<dependency id="Xamarin.Forms" version="2.5.0.280555" exclude="Build,Analyzers" />
</group>
<group targetFramework="netstandard1.0">
<dependency id="Xamarin.Forms" version="2.5.0.280555" exclude="Build,Analyzers" />
</group>
</dependencies>
</metadata>
<files>
<file src="output/android/SignaturePad.Forms.dll" target="lib/MonoAndroid/SignaturePad.Forms.dll" />
<file src="output/android/SignaturePad.Forms.xml" target="lib/MonoAndroid/SignaturePad.Forms.xml" />
<file src="output/ios/SignaturePad.Forms.dll" target="lib/Xamarin.iOS/SignaturePad.Forms.dll" />
<file src="output/ios/SignaturePad.Forms.xml" target="lib/Xamarin.iOS/SignaturePad.Forms.xml" />
<file src="output/uwp/SignaturePad.Forms.dll" target="lib/uap10.0/SignaturePad.Forms.dll" />
<file src="output/uwp/SignaturePad.Forms.xml" target="lib/uap10.0/SignaturePad.Forms.xml" />
<file src="output/uwp/SignaturePad.Forms.pri" target="lib/uap10.0/SignaturePad.Forms.pri" />
<file src="output/netstandard/SignaturePad.Forms.dll" target="lib/netstandard1.0/SignaturePad.Forms.dll" />
<file src="output/netstandard/SignaturePad.Forms.xml" target="lib/netstandard1.0/SignaturePad.Forms.xml" />
</files>
</package>
================================================
FILE: nuget/Xamarin.Controls.SignaturePad.nuspec
================================================
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Xamarin.Controls.SignaturePad</id>
<title>SignaturePad for Xamarin and Windows</title>
<version>$version$</version>
<authors>Microsoft</authors>
<owners>Microsoft</owners>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<licenseUrl>https://go.microsoft.com/fwlink/?linkid=874508</licenseUrl>
<projectUrl>https://go.microsoft.com/fwlink/?linkid=874507</projectUrl>
<iconUrl>https://go.microsoft.com/fwlink/?linkid=874510</iconUrl>
<description>Makes capturing, saving, and displaying signatures extremely simple.</description>
<releaseNotes>https://go.microsoft.com/fwlink/?linkid=874509</releaseNotes>
<copyright>© Microsoft Corporation. All rights reserved.</copyright>
<tags>xamarin,signature,handwriting,windows,ios,android,uwp</tags>
<repository url="https://go.microsoft.com/fwlink/?linkid=874507" />
<dependencies>
<group targetFramework="MonoAndroid" />
<group targetFramework="Xamarin.iOS" />
<group targetFramework="uap10.0">
<dependency id="Microsoft.NETCore.UniversalWindowsPlatform" version="6.0.8" exclude="Build,Analyzers" />
<dependency id="Win2D.uwp" version="1.21.0" exclude="Build,Analyzers" />
</group>
</dependencies>
</metadata>
<files>
<file src="output/android/SignaturePad.dll" target="lib/MonoAndroid/SignaturePad.dll" />
<file src="output/android/SignaturePad.xml" target="lib/MonoAndroid/SignaturePad.xml" />
<file src="output/ios/SignaturePad.dll" target="lib/Xamarin.iOS/SignaturePad.dll" />
<file src="output/ios/SignaturePad.xml" target="lib/Xamarin.iOS/SignaturePad.xml" />
<file src="output/uwp/SignaturePad.dll" target="lib/uap10.0/SignaturePad.dll" />
<file src="output/uwp/SignaturePad.xml" target="lib/uap10.0/SignaturePad.xml" />
<file src="output/uwp/SignaturePad.pri" target="lib/uap10.0/SignaturePad.pri" />
<file src="output/uwp/Themes/Generic.xbf" target="lib/uap10.0/SignaturePad/Themes/Generic.xbf" />
<file src="output/uwp/SignaturePad.xr.xml" target="lib/uap10.0/SignaturePad/SignaturePad.xr.xml" />
</files>
</package>
================================================
FILE: samples/Sample.Android/MainActivity.cs
================================================
using System.IO;
using Android.App;
using Android.Graphics;
using Android.OS;
using Android.Support.V7.App;
using Android.Widget;
using Xamarin.Controls;
namespace Sample.Android
{
[Activity (MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
private System.Drawing.PointF[] points;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.main);
var signatureView = FindViewById<SignaturePadView> (Resource.Id.signatureView);
var btnSave = FindViewById<Button> (Resource.Id.btnSave);
var btnLoad = FindViewById<Button> (Resource.Id.btnLoad);
var btnSaveImage = FindViewById<Button> (Resource.Id.btnSaveImage);
btnSave.Click += delegate
{
points = signatureView.Points;
Toast.MakeText (this, "Vector signature saved to memory.", ToastLength.Short).Show ();
};
btnLoad.Click += delegate
{
if (points != null)
signatureView.LoadPoints (points);
};
btnSaveImage.Click += async delegate
{
var path = Environment.GetExternalStoragePublicDirectory (Environment.DirectoryPictures).AbsolutePath;
var file = System.IO.Path.Combine (path, "signature.png");
using (var bitmap = await signatureView.GetImageStreamAsync (SignatureImageFormat.Png, Color.Black, Color.White, 1f))
using (var dest = File.OpenWrite (file))
{
await bitmap.CopyToAsync (dest);
}
Toast.MakeText (this, "Raster signature saved to the photo gallery.", ToastLength.Short).Show ();
};
}
}
}
================================================
FILE: samples/Sample.Android/Properties/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.xamarin.signaturepad" android:installLocation="auto">
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:theme="@style/Theme.AppCompat.Light.DarkActionBar"></application>
</manifest>
================================================
FILE: samples/Sample.Android/Properties/AssemblyInfo.cs
================================================
using System.Reflection;
using System.Runtime.CompilerServices;
using Android.App;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("Sample.Android")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("Tim")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.0")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]
================================================
FILE: samples/Sample.Android/Resources/drawable/background.xml
================================================
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FAFAD2"/>
<stroke android:width="1dip" android:color="#B8860B" />
</shape>
================================================
FILE: samples/Sample.Android/Resources/layout/main.axml
================================================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="12dp">
<xamarin.controls.SignaturePadView
android:id="@+id/signatureView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="12dp"
android:layout_above="@+id/btnSave"
android:background="@drawable/background"
app:signatureLineColor="#B8860B"
app:captionTextColor="#B8860B"
app:signaturePromptTextColor="#B8860B"
app:clearLabelTextColor="#B8860B" />
<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true" />
<Button
android:id="@+id/btnLoad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Load"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/btnSaveImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Export"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true" />
</RelativeLayout>
================================================
FILE: samples/Sample.Android/Resources/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Signature Pad</string>
</resources>
================================================
FILE: samples/Sample.Android/Sample.Android.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{B07C8650-5086-4650-AC6F-ACCF1291A952}</ProjectGuid>
<ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<RootNamespace>Sample.Android</RootNamespace>
<MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
<MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
<AndroidResgenClass>Resource</AndroidResgenClass>
<AndroidApplication>True</AndroidApplication>
<AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
<AssemblyName>Sample.Android</AssemblyName>
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
<TargetFrameworkVersion>v7.1</TargetFrameworkVersion>
<AndroidUseLatestPlatformSdk>False</AndroidUseLatestPlatformSdk>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>True</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>False</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>False</ConsolePause>
<AndroidLinkMode>None</AndroidLinkMode>
<EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>
<AndroidUseSharedRuntime>True</AndroidUseSharedRuntime>
<Debugger>.Net (Xamarin)</Debugger>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>True</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>False</ConsolePause>
<AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>
<AndroidSupportedAbis>armeabi,armeabi-v7a,x86,x86_64,arm64-v8a</AndroidSupportedAbis>
<AndroidLinkMode>Full</AndroidLinkMode>
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
<Debugger>Xamarin</Debugger>
<DebugSymbols>False</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="Mono.Android" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Android.Support.Animated.Vector.Drawable" Version="25.4.0.2" />
<PackageReference Include="Xamarin.Android.Support.v4" Version="25.4.0.2" />
<PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="25.4.0.2" />
<PackageReference Include="Xamarin.Android.Support.Vector.Drawable" Version="25.4.0.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\SignaturePad.Android\SignaturePad.Android.csproj">
<Project>{f1a16cb9-a759-42c8-8f0b-3c9698a55336}</Project>
<Name>SignaturePad.Android</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Compile Include="MainActivity.cs" />
<Compile Include="Resources\Resource.designer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Properties\AndroidManifest.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\background.xml" />
<AndroidResource Include="Resources\drawable\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-hdpi\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-ldpi\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-mdpi\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-xhdpi\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-xxxhdpi\ic_launcher.png" />
<AndroidResource Include="Resources\layout\main.axml" />
<AndroidResource Include="Resources\values\strings.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
</Project>
================================================
FILE: samples/Sample.Android/Sample.Android.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26228.10
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample.Android", "Sample.Android.csproj", "{B07C8650-5086-4650-AC6F-ACCF1291A952}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Android", "..\..\src\SignaturePad.Android\SignaturePad.Android.csproj", "{F1A16CB9-A759-42C8-8F0B-3C9698A55336}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B07C8650-5086-4650-AC6F-ACCF1291A952}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B07C8650-5086-4650-AC6F-ACCF1291A952}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B07C8650-5086-4650-AC6F-ACCF1291A952}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{B07C8650-5086-4650-AC6F-ACCF1291A952}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B07C8650-5086-4650-AC6F-ACCF1291A952}.Release|Any CPU.Build.0 = Release|Any CPU
{B07C8650-5086-4650-AC6F-ACCF1291A952}.Release|Any CPU.Deploy.0 = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0684DA9F-D626-4CEC-B4F2-0C49327E9F9F}
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = Sample.Android.csproj
EndGlobalSection
EndGlobal
================================================
FILE: samples/Sample.Forms/Sample.Forms.Mac.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26228.10
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.iOS", "..\..\src\SignaturePad.iOS\SignaturePad.iOS.csproj", "{BEF71536-787B-431F-AC7F-A6469710D11F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Android", "..\..\src\SignaturePad.Android\SignaturePad.Android.csproj", "{F1A16CB9-A759-42C8-8F0B-3C9698A55336}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms", "..\..\src\SignaturePad.Forms\SignaturePad.Forms.csproj", "{B2AF970D-D640-451C-95AF-92AF531B8C1E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.Droid", "..\..\src\SignaturePad.Forms.Droid\SignaturePad.Forms.Droid.csproj", "{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.iOS", "..\..\src\SignaturePad.Forms.iOS\SignaturePad.Forms.iOS.csproj", "{B12D20AA-0EDF-4903-B385-BB8090848532}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples", "Samples\Samples.csproj", "{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.Android", "Samples.Android\Samples.Android.csproj", "{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.iOS", "Samples.iOS\Samples.iOS.csproj", "{2142B859-21E9-484D-880A-26AD708569DB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|iPhone = Debug|iPhone
Debug|iPhoneSimulator = Debug|iPhoneSimulator
Release|Any CPU = Release|Any CPU
Release|iPhone = Release|iPhone
Release|iPhoneSimulator = Release|iPhoneSimulator
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|iPhone.Build.0 = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|Any CPU.Build.0 = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|iPhone.ActiveCfg = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|iPhone.Build.0 = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|iPhone.Build.0 = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|Any CPU.Build.0 = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|iPhone.ActiveCfg = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|iPhone.Build.0 = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|iPhone.Build.0 = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|Any CPU.Build.0 = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|iPhone.ActiveCfg = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|iPhone.Build.0 = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|iPhone.Build.0 = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|Any CPU.Build.0 = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|iPhone.ActiveCfg = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|iPhone.Build.0 = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|iPhone.Build.0 = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|iPhoneSimulator.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
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|iPhone.ActiveCfg = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|iPhone.Build.0 = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|iPhone.Build.0 = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|Any CPU.Build.0 = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|iPhone.ActiveCfg = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|iPhone.Build.0 = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhone.Build.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Any CPU.Build.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Any CPU.Deploy.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhone.ActiveCfg = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhone.Build.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhone.Deploy.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|Any CPU.ActiveCfg = Debug|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|Any CPU.Build.0 = Debug|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhone.ActiveCfg = Debug|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhone.Build.0 = Debug|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{2142B859-21E9-484D-880A-26AD708569DB}.Release|Any CPU.ActiveCfg = Release|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Release|Any CPU.Build.0 = Release|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Release|iPhone.ActiveCfg = Release|iPhone
{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
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6E5B2192-8C7B-4902-9EB8-51708EE9BBE1}
EndGlobalSection
EndGlobal
================================================
FILE: samples/Sample.Forms/Sample.Forms.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26228.10
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.iOS", "..\..\src\SignaturePad.iOS\SignaturePad.iOS.csproj", "{BEF71536-787B-431F-AC7F-A6469710D11F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Android", "..\..\src\SignaturePad.Android\SignaturePad.Android.csproj", "{F1A16CB9-A759-42C8-8F0B-3C9698A55336}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms", "..\..\src\SignaturePad.Forms\SignaturePad.Forms.csproj", "{B2AF970D-D640-451C-95AF-92AF531B8C1E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.Droid", "..\..\src\SignaturePad.Forms.Droid\SignaturePad.Forms.Droid.csproj", "{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.iOS", "..\..\src\SignaturePad.Forms.iOS\SignaturePad.Forms.iOS.csproj", "{B12D20AA-0EDF-4903-B385-BB8090848532}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples", "Samples\Samples.csproj", "{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.Android", "Samples.Android\Samples.Android.csproj", "{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.iOS", "Samples.iOS\Samples.iOS.csproj", "{2142B859-21E9-484D-880A-26AD708569DB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.UWP", "Samples.UWP\Samples.UWP.csproj", "{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.UWP", "..\..\src\SignaturePad.UWP\SignaturePad.UWP.csproj", "{16131FDC-D50B-4EF2-8ECC-661184FF80DB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.Forms.UWP", "..\..\src\SignaturePad.Forms.UWP\SignaturePad.Forms.UWP.csproj", "{6FC62387-6717-4577-A48B-D15848741F08}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|iPhone = Debug|iPhone
Debug|iPhoneSimulator = Debug|iPhoneSimulator
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|iPhone = Release|iPhone
Release|iPhoneSimulator = Release|iPhoneSimulator
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|ARM.Build.0 = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|iPhone.Build.0 = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|x64.ActiveCfg = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|x64.Build.0 = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|x86.ActiveCfg = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Debug|x86.Build.0 = Debug|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|Any CPU.Build.0 = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|ARM.ActiveCfg = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|ARM.Build.0 = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|iPhone.ActiveCfg = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|iPhone.Build.0 = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|x64.ActiveCfg = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|x64.Build.0 = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|x86.ActiveCfg = Release|Any CPU
{BEF71536-787B-431F-AC7F-A6469710D11F}.Release|x86.Build.0 = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|ARM.ActiveCfg = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|ARM.Build.0 = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|iPhone.Build.0 = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|x64.ActiveCfg = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|x64.Build.0 = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|x86.ActiveCfg = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Debug|x86.Build.0 = Debug|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|Any CPU.Build.0 = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|ARM.ActiveCfg = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|ARM.Build.0 = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|iPhone.ActiveCfg = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|iPhone.Build.0 = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|x64.ActiveCfg = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|x64.Build.0 = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|x86.ActiveCfg = Release|Any CPU
{F1A16CB9-A759-42C8-8F0B-3C9698A55336}.Release|x86.Build.0 = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|ARM.Build.0 = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|iPhone.Build.0 = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|x64.ActiveCfg = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|x64.Build.0 = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|x86.ActiveCfg = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Debug|x86.Build.0 = Debug|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|Any CPU.Build.0 = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|ARM.ActiveCfg = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|ARM.Build.0 = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|iPhone.ActiveCfg = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|iPhone.Build.0 = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|x64.ActiveCfg = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|x64.Build.0 = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|x86.ActiveCfg = Release|Any CPU
{B2AF970D-D640-451C-95AF-92AF531B8C1E}.Release|x86.Build.0 = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|ARM.ActiveCfg = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|ARM.Build.0 = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|iPhone.Build.0 = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|x64.ActiveCfg = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|x64.Build.0 = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|x86.ActiveCfg = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Debug|x86.Build.0 = Debug|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|Any CPU.Build.0 = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|ARM.ActiveCfg = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|ARM.Build.0 = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|iPhone.ActiveCfg = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|iPhone.Build.0 = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|x64.ActiveCfg = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|x64.Build.0 = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|x86.ActiveCfg = Release|Any CPU
{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}.Release|x86.Build.0 = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|ARM.Build.0 = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|iPhone.Build.0 = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|x64.ActiveCfg = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|x64.Build.0 = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|x86.ActiveCfg = Debug|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Debug|x86.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
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|ARM.ActiveCfg = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|ARM.Build.0 = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|iPhone.ActiveCfg = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|iPhone.Build.0 = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|x64.ActiveCfg = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|x64.Build.0 = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|x86.ActiveCfg = Release|Any CPU
{B12D20AA-0EDF-4903-B385-BB8090848532}.Release|x86.Build.0 = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|ARM.ActiveCfg = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|ARM.Build.0 = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|iPhone.Build.0 = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|x64.ActiveCfg = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|x64.Build.0 = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|x86.ActiveCfg = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Debug|x86.Build.0 = Debug|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|Any CPU.Build.0 = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|ARM.ActiveCfg = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|ARM.Build.0 = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|iPhone.ActiveCfg = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|iPhone.Build.0 = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|x64.ActiveCfg = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|x64.Build.0 = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|x86.ActiveCfg = Release|Any CPU
{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}.Release|x86.Build.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|ARM.ActiveCfg = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|ARM.Build.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|ARM.Deploy.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhone.Build.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|x64.ActiveCfg = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|x64.Build.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|x64.Deploy.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|x86.ActiveCfg = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|x86.Build.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Debug|x86.Deploy.0 = Debug|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Any CPU.Build.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|Any CPU.Deploy.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|ARM.ActiveCfg = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|ARM.Build.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|ARM.Deploy.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhone.ActiveCfg = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhone.Build.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhone.Deploy.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|x64.ActiveCfg = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|x64.Build.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|x64.Deploy.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|x86.ActiveCfg = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|x86.Build.0 = Release|Any CPU
{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}.Release|x86.Deploy.0 = Release|Any CPU
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|Any CPU.ActiveCfg = Debug|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|Any CPU.Build.0 = Debug|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|ARM.ActiveCfg = Debug|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|ARM.Build.0 = Debug|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhone.ActiveCfg = Debug|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhone.Build.0 = Debug|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|x64.Build.0 = Debug|iPhoneSimulator
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator
{2142B859-21E9-484D-880A-26AD708569DB}.Debug|x86.Build.0 = Debug|iPhoneSimulator
{2142B859-21E9-484D-880A-26AD708569DB}.Release|Any CPU.ActiveCfg = Release|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Release|Any CPU.Build.0 = Release|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Release|ARM.ActiveCfg = Release|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Release|ARM.Build.0 = Release|iPhone
{2142B859-21E9-484D-880A-26AD708569DB}.Release|iPhone.ActiveCfg = Release|iPhone
{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
{2142B859-21E9-484D-880A-26AD708569DB}.Release|x64.ActiveCfg = Release|iPhoneSimulator
{2142B859-21E9-484D-880A-26AD708569DB}.Release|x64.Build.0 = Release|iPhoneSimulator
{2142B859-21E9-484D-880A-26AD708569DB}.Release|x86.ActiveCfg = Release|iPhoneSimulator
{2142B859-21E9-484D-880A-26AD708569DB}.Release|x86.Build.0 = Release|iPhoneSimulator
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|Any CPU.ActiveCfg = Debug|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|Any CPU.Build.0 = Debug|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|Any CPU.Deploy.0 = Debug|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|ARM.ActiveCfg = Debug|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|ARM.Build.0 = Debug|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|ARM.Deploy.0 = Debug|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|iPhone.ActiveCfg = Debug|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|iPhone.Build.0 = Debug|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|iPhone.Deploy.0 = Debug|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|iPhoneSimulator.Build.0 = Debug|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|iPhoneSimulator.Deploy.0 = Debug|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|x64.ActiveCfg = Debug|x64
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|x64.Build.0 = Debug|x64
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|x64.Deploy.0 = Debug|x64
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|x86.ActiveCfg = Debug|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|x86.Build.0 = Debug|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Debug|x86.Deploy.0 = Debug|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|Any CPU.ActiveCfg = Release|x64
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|Any CPU.Build.0 = Release|x64
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|Any CPU.Deploy.0 = Release|x64
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|ARM.ActiveCfg = Release|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|ARM.Build.0 = Release|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|ARM.Deploy.0 = Release|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|iPhone.ActiveCfg = Release|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|iPhone.Build.0 = Release|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|iPhone.Deploy.0 = Release|ARM
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|iPhoneSimulator.ActiveCfg = Release|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|iPhoneSimulator.Build.0 = Release|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|iPhoneSimulator.Deploy.0 = Release|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|x64.ActiveCfg = Release|x64
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|x64.Build.0 = Release|x64
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|x64.Deploy.0 = Release|x64
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|x86.ActiveCfg = Release|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|x86.Build.0 = Release|x86
{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}.Release|x86.Deploy.0 = Release|x86
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|ARM.ActiveCfg = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|ARM.Build.0 = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|iPhone.Build.0 = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|x64.ActiveCfg = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|x64.Build.0 = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|x86.ActiveCfg = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|x86.Build.0 = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|Any CPU.Build.0 = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|ARM.ActiveCfg = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|ARM.Build.0 = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|iPhone.ActiveCfg = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|iPhone.Build.0 = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|x64.ActiveCfg = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|x64.Build.0 = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|x86.ActiveCfg = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|x86.Build.0 = Release|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|ARM.ActiveCfg = Debug|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|ARM.Build.0 = Debug|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|iPhone.Build.0 = Debug|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|x64.ActiveCfg = Debug|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|x64.Build.0 = Debug|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|x86.ActiveCfg = Debug|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Debug|x86.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
{6FC62387-6717-4577-A48B-D15848741F08}.Release|ARM.ActiveCfg = Release|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Release|ARM.Build.0 = Release|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Release|iPhone.ActiveCfg = Release|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Release|iPhone.Build.0 = Release|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{6FC62387-6717-4577-A48B-D15848741F08}.Release|x64.ActiveCfg = Release|Any CPU
{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
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6E5B2192-8C7B-4902-9EB8-51708EE9BBE1}
EndGlobalSection
EndGlobal
================================================
FILE: samples/Sample.Forms/Samples/App.xaml
================================================
<Application xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Samples.App">
<Application.Resources>
</Application.Resources>
</Application>
================================================
FILE: samples/Sample.Forms/Samples/App.xaml.cs
================================================
using System;
using System.IO;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
[assembly: XamlCompilation (XamlCompilationOptions.Compile)]
namespace Samples
{
public partial class App : Application
{
private readonly Func<Stream, string, Task<bool>> saveSignatureDelegate;
public App (Func<Stream, string, Task<bool>> saveSignature)
{
InitializeComponent ();
saveSignatureDelegate = saveSignature;
MainPage = new NavigationPage (new MainPage ());
}
public static Task<bool> SaveSignature (Stream bitmap, string filename)
{
return ((App)Application.Current).saveSignatureDelegate (bitmap, filename);
}
}
}
================================================
FILE: samples/Sample.Forms/Samples/BindingPage.xaml
================================================
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Samples"
xmlns:controls="clr-namespace:SignaturePad.Forms;assembly=SignaturePad.Forms"
x:Class="Samples.BindingPage"
Title="Data Binding">
<ContentPage.Resources>
<ResourceDictionary>
<local:NotConverter x:Key="NotConverter" />
</ResourceDictionary>
</ContentPage.Resources>
<Grid x:Name="LayoutRoot" Padding="12">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="12" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ContentView Padding="1" BackgroundColor="#B8860B">
<controls:SignaturePadView
x:Name="signaturePadView"
StrokeCompletedCommand="{Binding StrokeCompletedCommand}"
ClearedCommand="{Binding ClearedCommand}"
CaptionTextColor="#B8860B" ClearTextColor="#B8860B" PromptTextColor="#B8860B"
SignatureLineColor="#B8860B" BackgroundColor="#FAFAD2">
<controls:SignaturePadView.Behaviors>
<local:CaptureSignaturePointsBehavior Points="{Binding CurrentSignature}" />
</controls:SignaturePadView.Behaviors>
</controls:SignaturePadView>
</ContentView>
<Button
Text="Save Vector"
Command="{Binding SaveVectorCommand}"
IsEnabled="{Binding IsBlank, Source={Reference signaturePadView}, Converter={StaticResource NotConverter}}"
HorizontalOptions="Start" VerticalOptions="End" Grid.Row="2" />
<Button
Text="Load Vector"
Command="{Binding LoadVectorCommand}"
IsEnabled="{Binding HasSavedSignature}"
HorizontalOptions="Center" VerticalOptions="End" Grid.Row="2" />
<Button
Text="Save Image"
Command="{Binding SaveImageCommand}"
IsEnabled="{Binding IsBlank, Source={Reference signaturePadView}, Converter={StaticResource NotConverter}}"
HorizontalOptions="End" VerticalOptions="End" Grid.Row="2" />
</Grid>
</ContentPage>
================================================
FILE: samples/Sample.Forms/Samples/BindingPage.xaml.cs
================================================
using Xamarin.Forms;
namespace Samples
{
public partial class BindingPage : ContentPage
{
public BindingPage ()
{
InitializeComponent ();
BindingContext = new BindingViewModel (signaturePadView.GetImageStreamAsync);
}
}
}
================================================
FILE: samples/Sample.Forms/Samples/BindingPageViewModel.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;
using SignaturePad.Forms;
namespace Samples
{
public class BindingViewModel : BindableObject
{
private IEnumerable<Point> currentSignature;
private Point[] savedSignature;
public BindingViewModel (Func<SignatureImageFormat, ImageConstructionSettings, Task<Stream>> getImageDelegate)
{
GetImageStreamAsync = getImageDelegate;
SaveVectorCommand = new Command (OnSaveVector);
LoadVectorCommand = new Command (OnLoadVector);
SaveImageCommand = new Command (OnSaveImage);
}
public IEnumerable<Point> CurrentSignature
{
get => currentSignature;
set
{
currentSignature = value;
OnPropertyChanged ();
}
}
public Point[] SavedSignature
{
get => savedSignature;
set
{
savedSignature = value;
OnPropertyChanged ();
OnPropertyChanged (nameof (HasSavedSignature));
}
}
public bool HasSavedSignature => SavedSignature?.Length > 0;
public ICommand SaveVectorCommand { get; }
public ICommand LoadVectorCommand { get; }
public ICommand SaveImageCommand { get; }
private Func<SignatureImageFormat, ImageConstructionSettings, Task<Stream>> GetImageStreamAsync { get; }
private void OnSaveVector ()
{
SavedSignature = CurrentSignature.ToArray ();
DisplayAlert ("Vector signature saved to memory.");
}
private void OnLoadVector ()
{
CurrentSignature = SavedSignature;
}
private async void OnSaveImage ()
{
var settings = new ImageConstructionSettings
{
StrokeColor = Color.Black,
BackgroundColor = Color.White,
StrokeWidth = 1f
};
using (var bitmap = await GetImageStreamAsync (SignatureImageFormat.Png, settings))
{
var saved = await App.SaveSignature (bitmap, "signature.png");
if (saved)
DisplayAlert ("Raster signature saved to the photo library.");
else
DisplayAlert ("There was an error saving the signature.");
}
}
private void DisplayAlert (string message)
{
Application.Current.MainPage.DisplayAlert ("Signature Pad", message, "OK");
}
}
}
================================================
FILE: samples/Sample.Forms/Samples/EventsPage.xaml
================================================
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Samples"
xmlns:controls="clr-namespace:SignaturePad.Forms;assembly=SignaturePad.Forms"
x:Class="Samples.EventsPage"
Title="Events">
<Grid x:Name="LayoutRoot" Padding="12">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="12" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ContentView Padding="1" BackgroundColor="#B8860B">
<controls:SignaturePadView
x:Name="signatureView" StrokeCompleted="SignatureChanged" Cleared="SignatureChanged"
CaptionTextColor="#B8860B" ClearTextColor="#B8860B" PromptTextColor="#B8860B"
SignatureLineColor="#B8860B" BackgroundColor="#FAFAD2" />
</ContentView>
<Button
x:Name="btnSave" Text="Save Vector" Clicked="SaveVectorClicked"
HorizontalOptions="Start" VerticalOptions="End" Grid.Row="2" />
<Button
x:Name="btnLoad" Text="Load Vector" Clicked="LoadVectorClicked"
HorizontalOptions="Center" VerticalOptions="End" Grid.Row="2" />
<Button
x:Name="btnSaveImage" Text="Save Image" Clicked="SaveImageClicked"
HorizontalOptions="End" VerticalOptions="End" Grid.Row="2" />
</Grid>
</ContentPage>
================================================
FILE: samples/Sample.Forms/Samples/EventsPage.xaml.cs
================================================
using System;
using System.Linq;
using Xamarin.Forms;
using SignaturePad.Forms;
namespace Samples
{
public partial class EventsPage : ContentPage
{
private Point[] points;
public EventsPage ()
{
InitializeComponent ();
UpdateControls ();
}
private void UpdateControls ()
{
btnSave.IsEnabled = !signatureView.IsBlank;
btnSaveImage.IsEnabled = !signatureView.IsBlank;
btnLoad.IsEnabled = points != null;
}
private void SaveVectorClicked (object sender, EventArgs e)
{
points = signatureView.Points.ToArray ();
UpdateControls ();
DisplayAlert ("Signature Pad", "Vector signature saved to memory.", "OK");
}
private void LoadVectorClicked (object sender, EventArgs e)
{
signatureView.Points = points;
}
private async void SaveImageClicked (object sender, EventArgs e)
{
bool saved;
using (var bitmap = await signatureView.GetImageStreamAsync (SignatureImageFormat.Png, Color.Black, Color.White, 1f))
{
saved = await App.SaveSignature (bitmap, "signature.png");
}
if (saved)
await DisplayAlert ("Signature Pad", "Raster signature saved to the photo library.", "OK");
else
await DisplayAlert ("Signature Pad", "There was an error saving the signature.", "OK");
}
private void SignatureChanged (object sender, EventArgs e)
{
UpdateControls ();
}
}
}
================================================
FILE: samples/Sample.Forms/Samples/Helpers/CaptureSignatureBehaviorBase.cs
================================================
using System;
using Xamarin.Forms;
using SignaturePad.Forms;
namespace Samples
{
public class CaptureSignatureBehaviorBase : Behavior<SignaturePadView>
{
private bool updating;
private SignaturePadView associated;
protected override void OnAttachedTo (SignaturePadView bindable)
{
base.OnAttachedTo (bindable);
associated = bindable;
UpdateBindingContext (bindable, EventArgs.Empty);
bindable.Cleared += OnSignatureChanged;
bindable.StrokeCompleted += OnSignatureChanged;
bindable.BindingContextChanged += UpdateBindingContext;
}
protected override void OnDetachingFrom (SignaturePadView bindable)
{
bindable.Cleared -= OnSignatureChanged;
bindable.StrokeCompleted -= OnSignatureChanged;
bindable.BindingContextChanged -= UpdateBindingContext;
BindingContext = null;
associated = null;
base.OnDetachingFrom (bindable);
}
protected virtual void UpdateSignaturePad (SignaturePadView bindable, BindableProperty property, object oldValue, object newValue)
{
}
protected virtual void UpdateBehavior (SignaturePadView signaturePad)
{
}
protected void OnPropertyChanged (BindableObject bindable, BindableProperty property, object oldValue, object newValue)
{
var behavior = bindable as CaptureSignatureBehaviorBase;
if (!behavior.updating)
{
behavior.updating = true;
behavior.UpdateSignaturePad (behavior.associated, property, oldValue, newValue);
behavior.updating = false;
}
}
private void UpdateBindingContext (object sender, EventArgs e)
{
var signaturePad = sender as SignaturePadView;
BindingContext = signaturePad.BindingContext;
}
private void OnSignatureChanged (object sender, EventArgs e)
{
var signaturePad = sender as SignaturePadView;
if (!updating)
{
updating = true;
UpdateBehavior (signaturePad);
updating = false;
}
}
public static BindableProperty.BindingPropertyChangedDelegate CreatePropertyChanged (BindableProperty property)
{
return OnPropertyChanged;
void OnPropertyChanged (BindableObject bindable, object oldValue, object newValue)
{
var behavior = bindable as CaptureSignatureBehaviorBase;
behavior.OnPropertyChanged (bindable, property, oldValue, newValue);
}
}
}
}
================================================
FILE: samples/Sample.Forms/Samples/Helpers/CaptureSignaturePointsBehavior.cs
================================================
using System.Collections.Generic;
using Xamarin.Forms;
using SignaturePad.Forms;
namespace Samples
{
public class CaptureSignaturePointsBehavior : CaptureSignatureBehaviorBase
{
public static readonly BindableProperty PointsProperty = BindableProperty.Create (
nameof (Points),
typeof (IEnumerable<Point>),
typeof (CaptureSignaturePointsBehavior),
default (IEnumerable<Point>),
BindingMode.TwoWay,
propertyChanged: CreatePropertyChanged (PointsProperty));
public IEnumerable<Point> Points
{
get => (IEnumerable<Point>)GetValue (PointsProperty);
set => SetValue (PointsProperty, value);
}
protected override void UpdateSignaturePad (SignaturePadView bindable, BindableProperty property, object oldValue, object newValue)
{
bindable.Points = newValue as IEnumerable<Point>;
}
protected override void UpdateBehavior (SignaturePadView signaturePad)
{
Points = signaturePad.Points;
}
}
}
================================================
FILE: samples/Sample.Forms/Samples/Helpers/CaptureSignatureStrokesBehavior.cs
================================================
using System.Collections.Generic;
using Xamarin.Forms;
using SignaturePad.Forms;
namespace Samples
{
public class CaptureSignatureStrokesBehavior : CaptureSignatureBehaviorBase
{
public static readonly BindableProperty StrokesProperty = BindableProperty.Create (
nameof (Strokes),
typeof (IEnumerable<IEnumerable<Point>>),
typeof (CaptureSignatureStrokesBehavior),
default (IEnumerable<IEnumerable<Point>>),
BindingMode.TwoWay,
propertyChanged: CreatePropertyChanged (StrokesProperty));
public IEnumerable<IEnumerable<Point>> Strokes
{
get => (IEnumerable<IEnumerable<Point>>)GetValue (StrokesProperty);
set => SetValue (StrokesProperty, value);
}
protected override void UpdateSignaturePad (SignaturePadView bindable, BindableProperty property, object oldValue, object newValue)
{
bindable.Strokes = newValue as IEnumerable<IEnumerable<Point>>;
}
protected override void UpdateBehavior (SignaturePadView signaturePad)
{
Strokes = signaturePad.Strokes;
}
}
}
================================================
FILE: samples/Sample.Forms/Samples/Helpers/NotConverter.cs
================================================
using System;
using System.Globalization;
using Xamarin.Forms;
namespace Samples
{
public class NotConverter : IValueConverter
{
public object Convert (object value, Type targetType, object parameter, CultureInfo culture)
{
return Equals (value, false);
}
public object ConvertBack (object value, Type targetType, object parameter, CultureInfo culture)
{
return Equals (value, false);
}
}
}
================================================
FILE: samples/Sample.Forms/Samples/MainPage.xaml
================================================
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Samples"
x:Class="Samples.MainPage"
Title="Signature Pad">
<local:EventsPage Title="Events" />
<local:BindingPage Title="Data Binding" />
</TabbedPage>
================================================
FILE: samples/Sample.Forms/Samples/MainPage.xaml.cs
================================================
using Xamarin.Forms;
namespace Samples
{
public partial class MainPage : TabbedPage
{
public MainPage ()
{
InitializeComponent ();
}
}
}
================================================
FILE: samples/Sample.Forms/Samples/Samples.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.4</TargetFramework>
<RootNamespace>Samples</RootNamespace>
<AssemblyName>Samples</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugType>full</DebugType>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\src\SignaturePad.Forms\SignaturePad.Forms.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Forms" Version="2.5.0.280555" />
</ItemGroup>
</Project>
================================================
FILE: samples/Sample.Forms/Samples.Android/MainActivity.cs
================================================
using System.IO;
using System.Threading.Tasks;
using Android.App;
using Android.Content.PM;
using Android.OS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
namespace Samples.Droid
{
[Activity (MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : FormsAppCompatActivity
{
protected override void OnCreate (Bundle bundle)
{
// set the layout resources first
ToolbarResource = Resource.Layout.toolbar;
TabLayoutResource = Resource.Layout.tabs;
// then call base.OnCreate and the Xamarin.Forms methods
base.OnCreate (bundle);
Forms.Init (this, bundle);
LoadApplication (new App (OnSaveSignature));
}
private async Task<bool> OnSaveSignature (Stream bitmap, string filename)
{
var path = Environment.GetExternalStoragePublicDirectory (Environment.DirectoryPictures).AbsolutePath;
var file = Path.Combine (path, "signature.png");
using (var dest = File.OpenWrite (file))
{
await bitmap.CopyToAsync (dest);
}
return true;
}
}
}
================================================
FILE: samples/Sample.Forms/Samples.Android/Properties/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.xamarin.signaturepad.forms" android:installLocation="auto">
<uses-sdk android:minSdkVersion="15" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:theme="@style/MyTheme"></application>
</manifest>
================================================
FILE: samples/Sample.Forms/Samples.Android/Properties/AssemblyInfo.cs
================================================
using System.Reflection;
using Android.App;
[assembly: AssemblyTitle("Samples.Android")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Samples.Android")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
================================================
FILE: samples/Sample.Forms/Samples.Android/Resources/layout/tabs.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<android.support.design.widget.TabLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:tabIndicatorColor="@android:color/white"
app:tabGravity="fill"
app:tabMode="fixed" />
================================================
FILE: samples/Sample.Forms/Samples.Android/Resources/layout/toolbar.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_scrollFlags="scroll|enterAlways" />
================================================
FILE: samples/Sample.Forms/Samples.Android/Resources/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<color name="primary">#2196F3</color>
<color name="primaryDark">#1976D2</color>
<color name="accent">#FFC107</color>
<color name="window_background">#F5F5F5</color>
</resources>
================================================
FILE: samples/Sample.Forms/Samples.Android/Resources/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Signature Pad</string>
</resources>
================================================
FILE: samples/Sample.Forms/Samples.Android/Resources/values/style.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="MyTheme" parent="MyTheme.Base">
</style>
<style name="MyTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primaryDark</item>
<item name="colorAccent">@color/accent</item>
<item name="android:windowBackground">@color/window_background</item>
<item name="windowActionModeOverlay">true</item>
</style>
</resources>
================================================
FILE: samples/Sample.Forms/Samples.Android/Resources/values-v21/style.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="MyTheme" parent="MyTheme.Base">
<!--If you are using MasterDetailPage you will want to set these, else you can leave them out-->
<!--<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>-->
</style>
</resources>
================================================
FILE: samples/Sample.Forms/Samples.Android/Samples.Android.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{3AC4ED82-3D1E-4767-8C17-39EF6337AA64}</ProjectGuid>
<ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Samples.Droid</RootNamespace>
<AssemblyName>Samples.Android</AssemblyName>
<FileAlignment>512</FileAlignment>
<AndroidApplication>true</AndroidApplication>
<AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
<TargetFrameworkVersion>v7.1</TargetFrameworkVersion>
<AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AndroidLinkMode>None</AndroidLinkMode>
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
<AndroidSupportedAbis>armeabi-v7a;x86</AndroidSupportedAbis>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>
<AndroidSupportedAbis>armeabi-v7a,x86</AndroidSupportedAbis>
</PropertyGroup>
<ItemGroup>
<Reference Include="Mono.Android" />
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Forms" Version="2.5.0.280555" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\src\SignaturePad.Android\SignaturePad.Android.csproj">
<Project>{f1a16cb9-a759-42c8-8f0b-3c9698a55336}</Project>
<Name>SignaturePad.Android</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\src\SignaturePad.Forms.Droid\SignaturePad.Forms.Droid.csproj">
<Project>{1D5482F6-AA89-422C-9E34-88A8A1AD8AB6}</Project>
<Name>SignaturePad.Forms.Droid</Name>
</ProjectReference>
<ProjectReference Include="..\Samples\Samples.csproj">
<Project>{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}</Project>
<Name>Samples</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Compile Include="MainActivity.cs" />
<Compile Include="Resources\Resource.Designer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-hdpi\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-ldpi\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-mdpi\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-xhdpi\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-xxxhdpi\ic_launcher.png" />
<AndroidResource Include="Resources\values\colors.xml" />
<AndroidResource Include="Resources\values\style.xml" />
<AndroidResource Include="Resources\values-v21\style.xml" />
<AndroidResource Include="Resources\values\strings.xml" />
<AndroidResource Include="Resources\layout\tabs.xml" />
<AndroidResource Include="Resources\layout\toolbar.xml" />
</ItemGroup>
<ItemGroup>
<None Include="Properties\AndroidManifest.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
</Project>
================================================
FILE: samples/Sample.Forms/Samples.UWP/App.xaml
================================================
<Application
x:Class="Samples.UWP.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Samples.UWP"
RequestedTheme="Light">
</Application>
================================================
FILE: samples/Sample.Forms/Samples.UWP/App.xaml.cs
================================================
using System;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace Samples.UWP
{
/// <summary>
/// Provides application-specific behavior to supplement the default Application class.
/// </summary>
sealed partial class App : Application
{
/// <summary>
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App ()
{
this.InitializeComponent ();
this.Suspending += OnSuspending;
}
/// <summary>
/// Invoked when the application is launched normally by the end user. Other entry points
/// will be used such as when the application is launched to open a specific file.
/// </summary>
/// <param name="e">Details about the launch request and process.</param>
protected override void OnLaunched (LaunchActivatedEventArgs e)
{
#if DEBUG
if (System.Diagnostics.Debugger.IsAttached)
{
this.DebugSettings.EnableFrameRateCounter = true;
}
#endif
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null)
{
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame ();
rootFrame.NavigationFailed += OnNavigationFailed;
Xamarin.Forms.Forms.Init (e);
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
// When the navigation stack isn't restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
rootFrame.Navigate (typeof (MainPage), e.Arguments);
}
// Ensure the current window is active
Window.Current.Activate ();
}
/// <summary>
/// Invoked when Navigation to a certain page fails
/// </summary>
/// <param name="sender">The Frame which failed navigation</param>
/// <param name="e">Details about the navigation failure</param>
private void OnNavigationFailed (object sender, NavigationFailedEventArgs e)
{
throw new Exception ("Failed to load Page " + e.SourcePageType.FullName);
}
/// <summary>
/// Invoked when application execution is being suspended. Application state is saved
/// without knowing whether the application will be terminated or resumed with the contents
/// of memory still intact.
/// </summary>
/// <param name="sender">The source of the suspend request.</param>
/// <param name="e">Details about the suspend request.</param>
private void OnSuspending (object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral ();
//TODO: Save application state and stop any background activity
deferral.Complete ();
}
}
}
================================================
FILE: samples/Sample.Forms/Samples.UWP/MainPage.xaml
================================================
<forms:WindowsPage
x:Class="Samples.UWP.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Samples.UWP"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
</Grid>
</forms:WindowsPage>
================================================
FILE: samples/Sample.Forms/Samples.UWP/MainPage.xaml.cs
================================================
using System;
using System.IO;
using System.Threading.Tasks;
using Windows.Storage;
namespace Samples.UWP
{
public sealed partial class MainPage
{
public MainPage ()
{
InitializeComponent ();
LoadApplication (new Samples.App (OnSaveSignature));
}
private async Task<bool> OnSaveSignature (Stream bitmap, string filename)
{
var storageFolder = await KnownFolders.GetFolderForUserAsync (null, KnownFolderId.PicturesLibrary);
var file = await storageFolder.CreateFileAsync (filename, CreationCollisionOption.ReplaceExisting);
using (var stream = await file.OpenAsync (FileAccessMode.ReadWrite))
using (var dest = stream.AsStreamForWrite ())
{
await bitmap.CopyToAsync (dest);
}
return true;
}
}
}
================================================
FILE: samples/Sample.Forms/Samples.UWP/Package.appxmanifest
================================================
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
<Identity Name="9c3e7782-3302-4a18-98ab-056b82b88450" Publisher="CN=Xamarin" Version="1.0.0.0" />
<mp:PhoneIdentity PhoneProductId="9c3e7782-3302-4a18-98ab-056b82b88450" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
<Properties>
<DisplayName>Signature Pad</DisplayName>
<PublisherDisplayName>Xamarin</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="Samples.UWP.App">
<uap:VisualElements DisplayName="Signature Pad" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="Signature Pad makes capturing, saving, and displaying signatures extremely simple." BackgroundColor="transparent">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" Square310x310Logo="Assets\LargeTile.png" Square71x71Logo="Assets\SmallTile.png" ShortName="Signature Pad">
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="square310x310Logo" />
</uap:ShowNameOnTiles>
</uap:DefaultTile>
<uap:SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="transparent" />
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<uap:Capability Name="picturesLibrary" />
</Capabilities>
</Package>
================================================
FILE: samples/Sample.Forms/Samples.UWP/Properties/AssemblyInfo.cs
================================================
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("Samples.UWP")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Samples.UWP")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 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")]
[assembly: ComVisible(false)]
================================================
FILE: samples/Sample.Forms/Samples.UWP/Properties/Default.rd.xml
================================================
<!--
This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
developers. However, you can modify these parameters to modify the behavior of the .NET Native
optimizer.
Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919
To fully enable reflection for App1.MyClass and all of its public/private members
<Type Name="App1.MyClass" Dynamic="Required All"/>
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
Using the Namespace directive to apply reflection policy to all the types in a particular namespace
<Namespace Name="DataClasses.ViewModels" Seralize="All" />
-->
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<!--
An Assembly element with Name="*Application*" applies to all assemblies in
the application package. The asterisks are not wildcards.
-->
<Assembly Name="*Application*" Dynamic="Required All" />
<!-- Add your application specific runtime directives here. -->
</Application>
</Directives>
================================================
FILE: samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProjectGuid>{DDFB13E8-92EC-4F6F-AAEF-90A71F12812E}</ProjectGuid>
<OutputType>AppContainerExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Samples.UWP</RootNamespace>
<AssemblyName>Samples.UWP</AssemblyName>
<DefaultLanguage>en-US</DefaultLanguage>
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
<TargetPlatformVersion>10.0.14393.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.10586.0</TargetPlatformMinVersion>
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
<EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<PackageCertificateKeyFile>Samples.UWP_TemporaryKey.pfx</PackageCertificateKeyFile>
<PackageCertificateThumbprint>5D80C6709564B0BBADBD1B115AFCADCB0B9307AB</PackageCertificateThumbprint>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>ARM</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
<OutputPath>bin\ARM\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>ARM</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform" Version="6.0.8" />
<PackageReference Include="Xamarin.Forms" Version="2.5.0.280555" />
<PackageReference Include="Win2D.uwp" Version="1.21.0" />
</ItemGroup>
<ItemGroup>
<None Include="Samples.UWP_TemporaryKey.pfx" />
</ItemGroup>
<ItemGroup>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
</Compile>
<Compile Include="MainPage.xaml.cs">
<DependentUpon>MainPage.xaml</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest">
<SubType>Designer</SubType>
</AppxManifest>
</ItemGroup>
<ItemGroup>
<Content Include="Assets\LargeTile.scale-100.png" />
<Content Include="Assets\LargeTile.scale-125.png" />
<Content Include="Assets\LargeTile.scale-150.png" />
<Content Include="Assets\LargeTile.scale-200.png" />
<Content Include="Assets\LargeTile.scale-400.png" />
<Content Include="Assets\SmallTile.scale-100.png" />
<Content Include="Assets\SmallTile.scale-125.png" />
<Content Include="Assets\SmallTile.scale-150.png" />
<Content Include="Assets\SmallTile.scale-200.png" />
<Content Include="Assets\SmallTile.scale-400.png" />
<Content Include="Assets\SplashScreen.scale-100.png" />
<Content Include="Assets\SplashScreen.scale-125.png" />
<Content Include="Assets\SplashScreen.scale-150.png" />
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\SplashScreen.scale-400.png" />
<Content Include="Assets\Square150x150Logo.scale-100.png" />
<Content Include="Assets\Square150x150Logo.scale-125.png" />
<Content Include="Assets\Square150x150Logo.scale-150.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-400.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-16.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-24.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-256.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-32.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-48.png" />
<Content Include="Assets\Square44x44Logo.scale-100.png" />
<Content Include="Assets\Square44x44Logo.scale-125.png" />
<Content Include="Assets\Square44x44Logo.scale-150.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-400.png" />
<Content Include="Assets\Square44x44Logo.targetsize-16.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24.png" />
<Content Include="Assets\Square44x44Logo.targetsize-256.png" />
<Content Include="Assets\Square44x44Logo.targetsize-32.png" />
<Content Include="Assets\Square44x44Logo.targetsize-48.png" />
<Content Include="Assets\StoreLogo.scale-100.png" />
<Content Include="Assets\StoreLogo.scale-125.png" />
<Content Include="Assets\StoreLogo.scale-150.png" />
<Content Include="Assets\StoreLogo.scale-200.png" />
<Content Include="Assets\StoreLogo.scale-400.png" />
<Content Include="Assets\Wide310x150Logo.scale-100.png" />
<Content Include="Assets\Wide310x150Logo.scale-125.png" />
<Content Include="Assets\Wide310x150Logo.scale-150.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
<Content Include="Assets\Wide310x150Logo.scale-400.png" />
<Content Include="Properties\Default.rd.xml" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="MainPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\src\SignaturePad.Forms.UWP\SignaturePad.Forms.UWP.csproj">
<Project>{6fc62387-6717-4577-a48b-d15848741f08}</Project>
<Name>SignaturePad.Forms.UWP</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\src\SignaturePad.UWP\SignaturePad.UWP.csproj">
<Project>{16131fdc-d50b-4ef2-8ecc-661184ff80db}</Project>
<Name>SignaturePad.UWP</Name>
</ProjectReference>
<ProjectReference Include="..\Samples\Samples.csproj">
<Project>{cc18e151-5792-4da5-ade6-7cfba16a593e}</Project>
<Name>Samples</Name>
</ProjectReference>
</ItemGroup>
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
<VisualStudioVersion>14.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
</Project>
================================================
FILE: samples/Sample.Forms/Samples.iOS/AppDelegate.cs
================================================
using System.IO;
using System.Threading.Tasks;
using Foundation;
using Photos;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
namespace Samples.iOS
{
[Register ("AppDelegate")]
public partial class AppDelegate : FormsApplicationDelegate
{
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
Forms.Init ();
LoadApplication (new App (OnSaveSignature));
return base.FinishedLaunching (app, options);
}
private async Task<bool> OnSaveSignature (Stream bitmap, string filename)
{
var tcs = new TaskCompletionSource<bool> ();
UIImage image;
using (var data = NSData.FromStream (bitmap))
{
image = UIImage.LoadFromData (data);
}
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;
}
}
}
================================================
FILE: samples/Sample.Forms/Samples.iOS/Entitlements.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
</dict>
</plist>
================================================
FILE: samples/Sample.Forms/Samples.iOS/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>MinimumOSVersion</key>
<string>8.0</string>
<key>CFBundleDisplayName</key>
<string>Signature Pad</string>
<key>CFBundleIdentifier</key>
<string>com.xamarin.signaturepad.forms</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string></string>
<key>NSMainNibFile~ipad</key>
<string></string>
<key>UIStatusBarHidden~ipad</key>
<true/>
<key>XSAppIconAssets</key>
<string>Resources/Assets.xcassets/AppIcons.appiconset</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>This app saves signatures in the photo library.</string>
</dict>
</plist>
================================================
FILE: samples/Sample.Forms/Samples.iOS/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="221" translatesAutoresizingMaskIntoConstraints="NO" fixedFrame="YES" image="gradient.png">
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
<autoresizingMask key="autoresizingMask" heightSizable="YES" widthSizable="YES"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="222" translatesAutoresizingMaskIntoConstraints="NO" fixedFrame="YES" image="signature-pad-glyph.png">
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
<autoresizingMask key="autoresizingMask" heightSizable="YES" widthSizable="YES"/>
</imageView>
</subviews>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="signature-pad-glyph.png" width="1024" height="1024"/>
<image name="gradient.png" width="2048" height="2048"/>
</resources>
</document>
================================================
FILE: samples/Sample.Forms/Samples.iOS/Main.cs
================================================
using System;
using UIKit;
namespace Samples.iOS
{
public class Application
{
static void Main (string[] args)
{
UIApplication.Main (args, null, "AppDelegate");
}
}
}
================================================
FILE: samples/Sample.Forms/Samples.iOS/Properties/AssemblyInfo.cs
================================================
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("Samples.iOS")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Samples.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")]
================================================
FILE: samples/Sample.Forms/Samples.iOS/Resources/Assets.xcassets/AppIcons.appiconset/Contents.json
================================================
{
"images": [
{
"scale": "2x",
"size": "20x20",
"idiom": "iphone",
"filename": "Icon-App-20x20@2x.png"
},
{
"scale": "3x",
"size": "20x20",
"idiom": "iphone",
"filename": "Icon-App-20x20@3x.png"
},
{
"scale": "2x",
"size": "29x29",
"idiom": "iphone",
"filename": "Icon-App-29x29@2x.png"
},
{
"scale": "3x",
"size": "29x29",
"idiom": "iphone",
"filename": "Icon-App-29x29@3x.png"
},
{
"scale": "2x",
"size": "40x40",
"idiom": "iphone",
"filename": "Icon-App-40x40@2x.png"
},
{
"scale": "3x",
"size": "40x40",
"idiom": "iphone",
"filename": "Icon-App-40x40@3x.png"
},
{
"scale": "2x",
"size": "60x60",
"idiom": "iphone",
"filename": "Icon-App-60x60@2x.png"
},
{
"scale": "3x",
"size": "60x60",
"idiom": "iphone",
"filename": "Icon-App-60x60@3x.png"
},
{
"scale": "1x",
"size": "20x20",
"idiom": "ipad",
"filename": "Icon-App-20x20@1x.png"
},
{
"scale": "2x",
"size": "20x20",
"idiom": "ipad",
"filename": "Icon-App-20x20@2x.png"
},
{
"scale": "1x",
"size": "29x29",
"idiom": "ipad",
"filename": "Icon-App-29x29@1x.png"
},
{
"scale": "2x",
"size": "29x29",
"idiom": "ipad",
"filename": "Icon-App-29x29@2x.png"
},
{
"scale": "1x",
"size": "40x40",
"idiom": "ipad",
"filename": "Icon-App-40x40@1x.png"
},
{
"scale": "2x",
"size": "40x40",
"idiom": "ipad",
"filename": "Icon-App-40x40@2x.png"
},
{
"scale": "1x",
"size": "76x76",
"idiom": "ipad",
"filename": "Icon-App-76x76@1x.png"
},
{
"scale": "2x",
"size": "76x76",
"idiom": "ipad",
"filename": "Icon-App-76x76@2x.png"
},
{
"scale": "2x",
"size": "83.5x83.5",
"idiom": "ipad",
"filename": "Icon-App-83.5x83.5@2x.png"
},
{
"scale": "1x",
"size": "1024x1024",
"idiom": "ios-marketing",
"filename": "ItunesArtwork@2x.png"
}
],
"properties": {},
"info": {
"version": 1,
"author": "xcode"
}
}
================================================
FILE: samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
<ProjectGuid>{2142B859-21E9-484D-880A-26AD708569DB}</ProjectGuid>
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Exe</OutputType>
<RootNamespace>Samples.iOS</RootNamespace>
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
<AssemblyName>SamplesiOS</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\iPhoneSimulator\Debug</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<MtouchArch>x86_64</MtouchArch>
<MtouchLink>None</MtouchLink>
<MtouchDebug>true</MtouchDebug>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\iPhoneSimulator\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<MtouchLink>Full</MtouchLink>
<MtouchArch>x86_64</MtouchArch>
<ConsolePause>false</ConsolePause>
<CodesignKey>iPhone Developer</CodesignKey>
<CodesignProvision />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\iPhone\Debug</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<MtouchArch>ARM64</MtouchArch>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<CodesignKey>iPhone Developer</CodesignKey>
<MtouchDebug>true</MtouchDebug>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\iPhone\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<MtouchArch>ARM64</MtouchArch>
<ConsolePause>false</ConsolePause>
<CodesignKey>iPhone Developer</CodesignKey>
<MtouchLink>Full</MtouchLink>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="Xamarin.iOS" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Forms" Version="2.5.0.280555" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\src\SignaturePad.Forms.iOS\SignaturePad.Forms.iOS.csproj">
<Project>{B12D20AA-0EDF-4903-B385-BB8090848532}</Project>
<Name>SignaturePad.Forms.iOS</Name>
</ProjectReference>
<ProjectReference Include="..\Samples\Samples.csproj">
<Name>Samples</Name>
<Project>{CC18E151-5792-4DA5-ADE6-7CFBA16A593E}</Project>
</ProjectReference>
<ProjectReference Include="..\..\..\src\SignaturePad.iOS\SignaturePad.iOS.csproj">
<Project>{BEF71536-787B-431F-AC7F-A6469710D11F}</Project>
<Name>SignaturePad.iOS</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Compile Include="Main.cs" />
<Compile Include="AppDelegate.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Info.plist" />
<None Include="Entitlements.plist" />
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Contents.json" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-20x20@1x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-20x20@2x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-20x20@3x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-29x29@1x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-29x29@2x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-29x29@3x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-40x40@1x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-40x40@2x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-40x40@3x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-60x60@2x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-60x60@3x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-76x76@1x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-76x76@2x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-83.5x83.5@2x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\ItunesArtwork@2x.png" Visible="False" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\signature-pad-glyph.png" />
<BundleResource Include="Resources\gradient.png" />
</ItemGroup>
<ItemGroup>
<InterfaceDefinition Include="LaunchScreen.storyboard" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
</Project>
================================================
FILE: samples/Sample.UWP/App.xaml
================================================
<Application
x:Class="Sample.UWP.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Sample.UWP"
RequestedTheme="Light">
</Application>
================================================
FILE: samples/Sample.UWP/App.xaml.cs
================================================
using System;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace Sample.UWP
{
/// <summary>
/// Provides application-specific behavior to supplement the default Application class.
/// </summary>
sealed partial class App : Application
{
/// <summary>
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App ()
{
this.InitializeComponent ();
this.Suspending += OnSuspending;
}
/// <summary>
/// Invoked when the application is launched normally by the end user. Other entry points
/// will be used such as when the application is launched to open a specific file.
/// </summary>
/// <param name="e">Details about the launch request and process.</param>
protected override void OnLaunched (LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null)
{
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame ();
rootFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
if (e.PrelaunchActivated == false)
{
if (rootFrame.Content == null)
{
// When the navigation stack isn't restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
rootFrame.Navigate (typeof (MainPage), e.Arguments);
}
// Ensure the current window is active
Window.Current.Activate ();
}
}
/// <summary>
/// Invoked when Navigation to a certain page fails
/// </summary>
/// <param name="sender">The Frame which failed navigation</param>
/// <param name="e">Details about the navigation failure</param>
void OnNavigationFailed (object sender, NavigationFailedEventArgs e)
{
throw new Exception ("Failed to load Page " + e.SourcePageType.FullName);
}
/// <summary>
/// Invoked when application execution is being suspended. Application state is saved
/// without knowing whether the application will be terminated or resumed with the contents
/// of memory still intact.
/// </summary>
/// <param name="sender">The source of the suspend request.</param>
/// <param name="e">Details about the suspend request.</param>
private void OnSuspending (object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral ();
//TODO: Save application state and stop any background activity
deferral.Complete ();
}
}
}
================================================
FILE: samples/Sample.UWP/MainPage.xaml
================================================
<Page
x:Class="Sample.UWP.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Sample.UWP"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="using:Xamarin.Controls"
mc:Ignorable="d">
<Grid x:Name="LayoutRoot" Padding="12">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="12" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<controls:SignaturePad
x:Name="signatureView" StrokeCompleted="SignatureChanged" Cleared="SignatureChanged"
CaptionForeground="#B8860B" ClearLabelForeground="#B8860B" SignaturePromptForeground="#B8860B"
SignatureLineBrush="#B8860B" Background="#FAFAD2" BorderBrush="#B8860B" BorderThickness="1" />
<Button
x:Name="btnSave" Content="Save Vector" Click="SaveVectorClicked"
HorizontalAlignment="Left" VerticalAlignment="Bottom" Grid.Row="2" />
<Button
x:Name="btnLoad" Content="Load Vector" Click="LoadVectorClicked"
HorizontalAlignment="Center" VerticalAlignment="Bottom" Grid.Row="2" />
<Button
x:Name="btnSaveImage" Content="Save Image" Click="SaveImageClicked"
HorizontalAlignment="Right" VerticalAlignment="Bottom" Grid.Row="2" />
</Grid>
</Page>
================================================
FILE: samples/Sample.UWP/MainPage.xaml.cs
================================================
using System;
using System.IO;
using Windows.Foundation;
using Windows.Storage;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Xamarin.Controls;
namespace Sample.UWP
{
public sealed partial class MainPage : Page
{
private Point[] points;
public MainPage ()
{
InitializeComponent ();
UpdateControls ();
}
private void UpdateControls ()
{
btnSave.IsEnabled = !signatureView.IsBlank;
btnSaveImage.IsEnabled = !signatureView.IsBlank;
btnLoad.IsEnabled = points != null;
}
private void SaveVectorClicked (object sender, RoutedEventArgs e)
{
points = signatureView.Points;
UpdateControls ();
var flyout = new Flyout
{
Content = new TextBlock
{
Text = "Vector signature saved to memory."
}
};
flyout.ShowAt (btnSave);
}
private void LoadVectorClicked (object sender, RoutedEventArgs e)
{
signatureView.LoadPoints (points);
}
private async void SaveImageClicked (object sender, RoutedEventArgs e)
{
var storageFolder = await KnownFolders.GetFolderForUserAsync (null, KnownFolderId.PicturesLibrary);
var file = await storageFolder.CreateFileAsync ("signature.png", CreationCollisionOption.ReplaceExisting);
using (var bitmap = await signatureView.GetImageStreamAsync (SignatureImageFormat.Png, Colors.Black, Colors.White, 1f))
using (var stream = await file.OpenAsync (FileAccessMode.ReadWrite))
using (var dest = stream.AsStreamForWrite ())
{
await bitmap.CopyToAsync (dest);
}
var flyout = new Flyout
{
Content = new TextBlock
{
Text = "Raster signature saved to the photo library."
}
};
flyout.ShowAt (btnSaveImage);
}
private void SignatureChanged (object sender, EventArgs e)
{
UpdateControls ();
}
}
}
================================================
FILE: samples/Sample.UWP/Package.appxmanifest
================================================
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
<Identity Name="248c9eb2-792b-4f3d-9f8d-a676845f48d7" Publisher="CN=Xamarin" Version="1.0.0.0" />
<mp:PhoneIdentity PhoneProductId="248c9eb2-792b-4f3d-9f8d-a676845f48d7" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
<Properties>
<DisplayName>Signature Pad</DisplayName>
<PublisherDisplayName>Xamarin</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="Sample.UWP.App">
<uap:VisualElements DisplayName="Signature Pad" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="Signature Pad makes capturing, saving, and displaying signatures extremely simple." BackgroundColor="transparent">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" Square310x310Logo="Assets\LargeTile.png" Square71x71Logo="Assets\SmallTile.png">
</uap:DefaultTile>
<uap:SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="transparent" />
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<uap:Capability Name="picturesLibrary" />
</Capabilities>
</Package>
================================================
FILE: samples/Sample.UWP/Properties/AssemblyInfo.cs
================================================
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("Sample.UWP")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Sample.UWP")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 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")]
[assembly: ComVisible(false)]
================================================
FILE: samples/Sample.UWP/Properties/Default.rd.xml
================================================
<!--
This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
developers. However, you can modify these parameters to modify the behavior of the .NET Native
optimizer.
Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919
To fully enable reflection for App1.MyClass and all of its public/private members
<Type Name="App1.MyClass" Dynamic="Required All"/>
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
Using the Namespace directive to apply reflection policy to all the types in a particular namespace
<Namespace Name="DataClasses.ViewModels" Seralize="All" />
-->
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<!--
An Assembly element with Name="*Application*" applies to all assemblies in
the application package. The asterisks are not wildcards.
-->
<Assembly Name="*Application*" Dynamic="Required All" />
<!-- Add your application specific runtime directives here. -->
</Application>
</Directives>
================================================
FILE: samples/Sample.UWP/Sample.UWP.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProjectGuid>{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}</ProjectGuid>
<OutputType>AppContainerExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample.UWP</RootNamespace>
<AssemblyName>Sample.UWP</AssemblyName>
<DefaultLanguage>en-US</DefaultLanguage>
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
<TargetPlatformVersion>10.0.14393.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.10240.0</TargetPlatformMinVersion>
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WindowsXamlEnableOverview>true</WindowsXamlEnableOverview>
<PackageCertificateKeyFile>Sample.UWP_TemporaryKey.pfx</PackageCertificateKeyFile>
<PackageCertificateThumbprint>032355C46F475E4156F2A934E153675DFA6A111E</PackageCertificateThumbprint>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>ARM</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
<OutputPath>bin\ARM\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>ARM</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform" Version="6.0.8" />
<PackageReference Include="Win2D.uwp" Version="1.21.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\SignaturePad.UWP\SignaturePad.UWP.csproj">
<Project>{16131fdc-d50b-4ef2-8ecc-661184ff80db}</Project>
<Name>SignaturePad.UWP</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="MainPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
<ItemGroup>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
</Compile>
<Compile Include="MainPage.xaml.cs">
<DependentUpon>MainPage.xaml</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest" />
<None Include="Sample.UWP_TemporaryKey.pfx" />
</ItemGroup>
<ItemGroup>
<Content Include="Assets\LargeTile.scale-100.png" />
<Content Include="Assets\LargeTile.scale-125.png" />
<Content Include="Assets\LargeTile.scale-150.png" />
<Content Include="Assets\LargeTile.scale-200.png" />
<Content Include="Assets\LargeTile.scale-400.png" />
<Content Include="Assets\SmallTile.scale-100.png" />
<Content Include="Assets\SmallTile.scale-125.png" />
<Content Include="Assets\SmallTile.scale-150.png" />
<Content Include="Assets\SmallTile.scale-200.png" />
<Content Include="Assets\SmallTile.scale-400.png" />
<Content Include="Assets\SplashScreen.scale-100.png" />
<Content Include="Assets\SplashScreen.scale-125.png" />
<Content Include="Assets\SplashScreen.scale-150.png" />
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\SplashScreen.scale-400.png" />
<Content Include="Assets\Square150x150Logo.scale-100.png" />
<Content Include="Assets\Square150x150Logo.scale-125.png" />
<Content Include="Assets\Square150x150Logo.scale-150.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-400.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-16.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-24.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-256.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-32.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-48.png" />
<Content Include="Assets\Square44x44Logo.scale-100.png" />
<Content Include="Assets\Square44x44Logo.scale-125.png" />
<Content Include="Assets\Square44x44Logo.scale-150.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-400.png" />
<Content Include="Assets\Square44x44Logo.targetsize-16.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24.png" />
<Content Include="Assets\Square44x44Logo.targetsize-256.png" />
<Content Include="Assets\Square44x44Logo.targetsize-32.png" />
<Content Include="Assets\Square44x44Logo.targetsize-48.png" />
<Content Include="Assets\StoreLogo.scale-100.png" />
<Content Include="Assets\StoreLogo.scale-125.png" />
<Content Include="Assets\StoreLogo.scale-150.png" />
<Content Include="Assets\StoreLogo.scale-200.png" />
<Content Include="Assets\StoreLogo.scale-400.png" />
<Content Include="Assets\Wide310x150Logo.scale-100.png" />
<Content Include="Assets\Wide310x150Logo.scale-125.png" />
<Content Include="Assets\Wide310x150Logo.scale-150.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
<Content Include="Assets\Wide310x150Logo.scale-400.png" />
<Content Include="Properties\Default.rd.xml" />
</ItemGroup>
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
<VisualStudioVersion>14.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
</Project>
================================================
FILE: samples/Sample.UWP/Sample.UWP.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26228.10
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample.UWP", "Sample.UWP.csproj", "{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignaturePad.UWP", "..\..\src\SignaturePad.UWP\SignaturePad.UWP.csproj", "{16131FDC-D50B-4EF2-8ECC-661184FF80DB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|Any CPU.ActiveCfg = Debug|x86
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|Any CPU.Build.0 = Debug|x86
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|Any CPU.Deploy.0 = Debug|x86
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|ARM.ActiveCfg = Debug|ARM
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|ARM.Build.0 = Debug|ARM
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|ARM.Deploy.0 = Debug|ARM
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|x64.ActiveCfg = Debug|x64
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|x64.Build.0 = Debug|x64
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|x64.Deploy.0 = Debug|x64
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|x86.ActiveCfg = Debug|x86
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|x86.Build.0 = Debug|x86
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Debug|x86.Deploy.0 = Debug|x86
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|Any CPU.ActiveCfg = Release|x86
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|Any CPU.Build.0 = Release|x86
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|Any CPU.Deploy.0 = Release|x86
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|ARM.ActiveCfg = Release|ARM
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|ARM.Build.0 = Release|ARM
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|ARM.Deploy.0 = Release|ARM
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|x64.ActiveCfg = Release|x64
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|x64.Build.0 = Release|x64
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|x64.Deploy.0 = Release|x64
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|x86.ActiveCfg = Release|x86
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|x86.Build.0 = Release|x86
{1864E65A-B7F5-49AE-BF54-6A06C5CFD625}.Release|x86.Deploy.0 = Release|x86
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|ARM.ActiveCfg = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|ARM.Build.0 = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|x64.ActiveCfg = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|x64.Build.0 = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|x86.ActiveCfg = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Debug|x86.Build.0 = Debug|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|Any CPU.Build.0 = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|ARM.ActiveCfg = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|ARM.Build.0 = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|x64.ActiveCfg = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|x64.Build.0 = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|x86.ActiveCfg = Release|Any CPU
{16131FDC-D50B-4EF2-8ECC-661184FF80DB}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C5C464A1-5A66-41CD-9338-F56E7C671A9A}
EndGlobalSection
EndGlobal
================================================
FILE: samples/Sample.iOS/AppDelegate.cs
================================================
using Foundation;
using UIKit;
namespace Sample.iOS
{
[Register (nameof (AppDelegate))]
public class AppDelegate : UIApplicationDelegate
{
public override UIWindow Window { get; set; }
public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
return true;
}
}
}
================================================
FILE: samples/Sample.iOS/Entitlements.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
</dict>
</plist>
================================================
FILE: samples/Sample.iOS/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDisplayName</key>
<string>Signature Pad</string>
<key>CFBundleIdentifier</key>
<string>com.xamarin.signaturepad</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>MinimumOSVersion</key>
<string>9.0</string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIMainStoryboardFile~ipad</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>NSPhotoLibraryUsageDescription</key>
<string>This app saves signatures in the photo library.</string>
<key>XSAppIconAssets</key>
<string>Resources/Assets.xcassets/AppIcons.appiconset</string>
</dict>
</plist>
================================================
FILE: samples/Sample.iOS/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="221" translatesAutoresizingMaskIntoConstraints="NO" fixedFrame="YES" image="gradient.png">
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
<autoresizingMask key="autoresizingMask" heightSizable="YES" widthSizable="YES"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="222" translatesAutoresizingMaskIntoConstraints="NO" fixedFrame="YES" image="signature-pad-glyph.png">
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
<autoresizingMask key="autoresizingMask" heightSizable="YES" widthSizable="YES"/>
</imageView>
</subviews>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="signature-pad-glyph.png" width="1024" height="1024"/>
<image name="gradient.png" width="2048" height="2048"/>
</resources>
</document>
================================================
FILE: samples/Sample.iOS/Main.cs
================================================
using UIKit;
namespace Sample.iOS
{
public class Application
{
static void Main (string[] args)
{
UIApplication.Main (args, null, nameof (AppDelegate));
}
}
}
================================================
FILE: samples/Sample.iOS/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="1010">
<device id="retina4_0" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--Signature Pad-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="221">
<rect key="frame" x="16" y="518" width="50" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="50" id="jyI-YM-E1D"/>
</constraints>
<state key="normal" title="Save"/>
<connections>
<action selector="SaveVectorClicked:" destination="BYZ-38-t0r" id="1751" eventType="touchUpInside"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="222">
<rect key="frame" x="135" y="518" width="50" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="50" id="zQT-ei-vlh"/>
</constraints>
<state key="normal" title="Load"/>
<connections>
<action selector="LoadVectorClicked:" destination="BYZ-38-t0r" id="1752" eventType="touchUpInside"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="223">
<rect key="frame" x="254" y="518" width="50" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="50" id="8kJ-aw-q55"/>
</constraints>
<state key="normal" title="Export"/>
<connections>
<action selector="SaveImageClicked:" destination="BYZ-38-t0r" id="1753" eventType="touchUpInside"/>
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="984" customClass="SignaturePadView">
<rect key="frame" x="16" y="84" width="288" height="414"/>
<color key="backgroundColor" colorSpace="calibratedRGB" red="0.98039215686274506" green="0.98039215686274506" blue="0.82352941176470584" alpha="1"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="color" keyPath="SignatureLineColor">
<color key="value" colorSpace="calibratedRGB" red="0.72156862745098038" green="0.52549019607843139" blue="0.043137254901960784" alpha="1"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="color" keyPath="CaptionTextColor">
<color key="value" colorSpace="calibratedRGB" red="0.72156862745098038" green="0.52549019607843139" blue="0.043137254901960784" alpha="1"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="color" keyPath="SignaturePromptTextColor">
<color key="value" colorSpace="calibratedRGB" red="0.72156862745098038" green="0.52549019607843139" blue="0.043137254901960784" alpha="1"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="color" keyPath="ClearLabelTextColor">
<color key="value" colorSpace="calibratedRGB" red="0.72156862745098038" green="0.52549019607843139" blue="0.043137254901960784" alpha="1"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="BackgroundImageContentMode">
<integer key="value" value="0"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="223" firstAttribute="trailing" secondItem="8bC-Xf-vdC" secondAttribute="trailingMargin" id="0X9-kl-988"/>
<constraint firstItem="984" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" constant="20" id="Eti-ua-whh"/>
<constraint firstItem="222" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="Hyj-Lc-Avm"/>
<constraint firstItem="984" firstAttribute="trailing" secondItem="8bC-Xf-vdC" secondAttribute="trailingMargin" id="L5j-B6-o8M"/>
<constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="223" secondAttribute="bottom" constant="20" id="NoE-k8-7xM"/>
<constraint firstItem="221" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" id="SZL-qF-M4q"/>
<constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="222" secondAttribute="bottom" constant="20" id="kSq-Ow-sWU"/>
<constraint firstItem="984" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" id="uhc-at-a1i"/>
<constraint firstItem="221" firstAttribute="top" secondItem="984" secondAttribute="bottom" id="vCH-Ds-lHY" constant="20"/>
<constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="221" secondAttribute="bottom" constant="20" id="xio-0R-pRK"/>
</constraints>
</view>
<navigationItem key="navigationItem" title="Signature Pad" id="1493"/>
<connections>
<outlet property="btnSave" destination="221" id="name-outlet-221"/>
<outlet property="btnSaveImage" destination="223" id="name-outlet-223"/>
<outlet property="signatureView" destination="984" id="name-outlet-984"/>
<outlet property="btnLoad" destination="222" id="name-outlet-222"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="189.75" y="-90.11268"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="1009">
<objects>
<navigationController id="1010" sceneMemberID="viewController">
<navigationBar key="navigationBar" contentMode="scaleToFill" id="1012">
<rect key="frame" x="0.0" y="20" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<connections>
<segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="1494"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="1013" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-222" y="-87"/>
</scene>
</scenes>
</document>
================================================
FILE: samples/Sample.iOS/Resources/Assets.xcassets/AppIcons.appiconset/Contents.json
================================================
{
"images": [
{
"scale": "2x",
"size": "20x20",
"idiom": "iphone",
"filename": "Icon-App-20x20@2x.png"
},
{
"scale": "3x",
"size": "20x20",
"idiom": "iphone",
"filename": "Icon-App-20x20@3x.png"
},
{
"scale": "2x",
"size": "29x29",
"idiom": "iphone",
"filename": "Icon-App-29x29@2x.png"
},
{
"scale": "3x",
"size": "29x29",
"idiom": "iphone",
"filename": "Icon-App-29x29@3x.png"
},
{
"scale": "2x",
"size": "40x40",
"idiom": "iphone",
"filename": "Icon-App-40x40@2x.png"
},
{
"scale": "3x",
"size": "40x40",
"idiom": "iphone",
"filename": "Icon-App-40x40@3x.png"
},
{
"scale": "2x",
"size": "60x60",
"idiom": "iphone",
"filename": "Icon-App-60x60@2x.png"
},
{
"scale": "3x",
"size": "60x60",
"idiom": "iphone",
"filename": "Icon-App-60x60@3x.png"
},
{
"scale": "1x",
"size": "20x20",
"idiom": "ipad",
"filename": "Icon-App-20x20@1x.png"
},
{
"scale": "2x",
"size": "20x20",
"idiom": "ipad",
"filename": "Icon-App-20x20@2x.png"
},
{
"scale": "1x",
"size": "29x29",
"idiom": "ipad",
"filename": "Icon-App-29x29@1x.png"
},
{
"scale": "2x",
"size": "29x29",
"idiom": "ipad",
"filename": "Icon-App-29x29@2x.png"
},
{
"scale": "1x",
"size": "40x40",
"idiom": "ipad",
"filename": "Icon-App-40x40@1x.png"
},
{
"scale": "2x",
"size": "40x40",
"idiom": "ipad",
"filename": "Icon-App-40x40@2x.png"
},
{
"scale": "1x",
"size": "76x76",
"idiom": "ipad",
"filename": "Icon-App-76x76@1x.png"
},
{
"scale": "2x",
"size": "76x76",
"idiom": "ipad",
"filename": "Icon-App-76x76@2x.png"
},
{
"scale": "2x",
"size": "83.5x83.5",
"idiom": "ipad",
"filename": "Icon-App-83.5x83.5@2x.png"
},
{
"scale": "1x",
"size": "1024x1024",
"idiom": "ios-marketing",
"filename": "ItunesArtwork@2x.png"
}
],
"properties": {},
"info": {
"version": 1,
"author": "xcode"
}
}
================================================
FILE: samples/Sample.iOS/Sample.iOS.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
<ProjectGuid>{101E3060-8799-4119-8A7A-4F86A01C0C84}</ProjectGuid>
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<TemplateGuid>{edc1b0fa-90cd-4038-8fad-98fe74adb368}</TemplateGuid>
<OutputType>Exe</OutputType>
<RootNamespace>Sample.iOS</RootNamespace>
<AssemblyName>SampleiOS</AssemblyName>
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\iPhoneSimulator\Debug</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<MtouchArch>x86_64</MtouchArch>
<MtouchLink>None</MtouchLink>
<MtouchDebug>true</MtouchDebug>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\iPhoneSimulator\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<MtouchLink>Full</MtouchLink>
<MtouchArch>x86_64</MtouchArch>
<ConsolePause>false</ConsolePause>
<CodesignKey>iPhone Developer</CodesignKey>
<CodesignProvision />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\iPhone\Debug</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<MtouchArch>ARM64</MtouchArch>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<CodesignKey>iPhone Developer</CodesignKey>
<MtouchDebug>true</MtouchDebug>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\iPhone\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<MtouchArch>ARM64</MtouchArch>
<ConsolePause>false</ConsolePause>
<CodesignKey>iPhone Developer</CodesignKey>
<MtouchLink>Full</MtouchLink>
</PropertyGroup>
<PropertyGroup Condition=" '$(RunConfiguration)' == 'Default' ">
<AppExtensionDebugBundleId />
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="Xamarin.iOS" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\SignaturePad.iOS\SignaturePad.iOS.csproj">
<Project>{bef71536-787b-431f-ac7f-a6469710d11f}</Project>
<Name>SignaturePad.iOS</Name>
<IsAppExtension>false</IsAppExtension>
<IsWatchApp>false</IsWatchApp>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Contents.json" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-20x20@1x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-20x20@2x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-20x20@3x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-29x29@1x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-29x29@2x.png" Visible="False" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-App-29x29@3x.png" Vi
gitextract_9f8fffgb/
├── .editorconfig
├── .gitignore
├── ISSUE_TEMPLATE.md
├── LICENSE
├── README.md
├── build.cake
├── build.ps1
├── build.sh
├── nuget/
│ ├── Xamarin.Controls.SignaturePad.Forms.nuspec
│ └── Xamarin.Controls.SignaturePad.nuspec
├── samples/
│ ├── Sample.Android/
│ │ ├── MainActivity.cs
│ │ ├── Properties/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── AssemblyInfo.cs
│ │ ├── Resources/
│ │ │ ├── drawable/
│ │ │ │ └── background.xml
│ │ │ ├── layout/
│ │ │ │ └── main.axml
│ │ │ └── values/
│ │ │ └── strings.xml
│ │ ├── Sample.Android.csproj
│ │ └── Sample.Android.sln
│ ├── Sample.Forms/
│ │ ├── Sample.Forms.Mac.sln
│ │ ├── Sample.Forms.sln
│ │ ├── Samples/
│ │ │ ├── App.xaml
│ │ │ ├── App.xaml.cs
│ │ │ ├── BindingPage.xaml
│ │ │ ├── BindingPage.xaml.cs
│ │ │ ├── BindingPageViewModel.cs
│ │ │ ├── EventsPage.xaml
│ │ │ ├── EventsPage.xaml.cs
│ │ │ ├── Helpers/
│ │ │ │ ├── CaptureSignatureBehaviorBase.cs
│ │ │ │ ├── CaptureSignaturePointsBehavior.cs
│ │ │ │ ├── CaptureSignatureStrokesBehavior.cs
│ │ │ │ └── NotConverter.cs
│ │ │ ├── MainPage.xaml
│ │ │ ├── MainPage.xaml.cs
│ │ │ └── Samples.csproj
│ │ ├── Samples.Android/
│ │ │ ├── MainActivity.cs
│ │ │ ├── Properties/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── Resources/
│ │ │ │ ├── layout/
│ │ │ │ │ ├── tabs.xml
│ │ │ │ │ └── toolbar.xml
│ │ │ │ ├── values/
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ └── style.xml
│ │ │ │ └── values-v21/
│ │ │ │ └── style.xml
│ │ │ └── Samples.Android.csproj
│ │ ├── Samples.UWP/
│ │ │ ├── App.xaml
│ │ │ ├── App.xaml.cs
│ │ │ ├── MainPage.xaml
│ │ │ ├── MainPage.xaml.cs
│ │ │ ├── Package.appxmanifest
│ │ │ ├── Properties/
│ │ │ │ ├── AssemblyInfo.cs
│ │ │ │ └── Default.rd.xml
│ │ │ ├── Samples.UWP.csproj
│ │ │ └── Samples.UWP_TemporaryKey.pfx
│ │ └── Samples.iOS/
│ │ ├── AppDelegate.cs
│ │ ├── Entitlements.plist
│ │ ├── Info.plist
│ │ ├── LaunchScreen.storyboard
│ │ ├── Main.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Resources/
│ │ │ └── Assets.xcassets/
│ │ │ └── AppIcons.appiconset/
│ │ │ └── Contents.json
│ │ └── Samples.iOS.csproj
│ ├── Sample.UWP/
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── MainPage.xaml
│ │ ├── MainPage.xaml.cs
│ │ ├── Package.appxmanifest
│ │ ├── Properties/
│ │ │ ├── AssemblyInfo.cs
│ │ │ └── Default.rd.xml
│ │ ├── Sample.UWP.csproj
│ │ ├── Sample.UWP.sln
│ │ └── Sample.UWP_TemporaryKey.pfx
│ └── Sample.iOS/
│ ├── AppDelegate.cs
│ ├── Entitlements.plist
│ ├── Info.plist
│ ├── LaunchScreen.storyboard
│ ├── Main.cs
│ ├── Main.storyboard
│ ├── Resources/
│ │ └── Assets.xcassets/
│ │ └── AppIcons.appiconset/
│ │ └── Contents.json
│ ├── Sample.iOS.csproj
│ ├── Sample.iOS.sln
│ ├── ViewController.cs
│ ├── ViewController.designer.cs
│ ├── iTunesArtwork
│ └── iTunesArtwork@2x
└── src/
├── SignaturePad.Android/
│ ├── InkPresenter.cs
│ ├── Resources/
│ │ ├── drawable/
│ │ │ └── signature_pad_background.xml
│ │ ├── layout/
│ │ │ └── signature_pad_layout.axml
│ │ └── values/
│ │ ├── attrs.xml
│ │ └── signature_pad_defaults.xml
│ ├── SignaturePad.Android.csproj
│ ├── SignaturePadCanvasView.cs
│ └── SignaturePadView.cs
├── SignaturePad.Forms/
│ ├── SignaturePad.Forms.csproj
│ └── SignaturePadCanvasRenderer.cs
├── SignaturePad.Forms.Droid/
│ ├── SignaturePad.Forms.Droid.csproj
│ └── SignaturePadViewRenderer.cs
├── SignaturePad.Forms.Platform.Shared/
│ ├── ColorExtensions.cs
│ └── SignaturePadCanvasRenderer.cs
├── SignaturePad.Forms.Shared/
│ ├── ImageConstructionSettings.cs
│ ├── SignatureImageFormat.cs
│ ├── SignaturePadCanvasView.cs
│ └── SignaturePadView.cs
├── SignaturePad.Forms.UWP/
│ └── SignaturePad.Forms.UWP.csproj
├── SignaturePad.Forms.iOS/
│ └── SignaturePad.Forms.iOS.csproj
├── SignaturePad.InkPresenter.Shared/
│ ├── InkPresenter.cs
│ └── InkStroke.cs
├── SignaturePad.Mac.sln
├── SignaturePad.Shared/
│ ├── Extensions.cs
│ ├── ImageConstructionSettings.cs
│ ├── PathSmoothing.cs
│ ├── SignatureImageFormat.cs
│ ├── SignaturePadCanvasView.cs
│ └── SignaturePadView.cs
├── SignaturePad.UWP/
│ ├── SignaturePad.UWP.csproj
│ ├── SignaturePad.cs
│ ├── SignaturePadCanvasView.cs
│ └── Themes/
│ └── Generic.xaml
├── SignaturePad.iOS/
│ ├── InkPresenter.cs
│ ├── SignaturePad.iOS.csproj
│ ├── SignaturePadCanvasView.cs
│ └── SignaturePadView.cs
└── SignaturePad.sln
SYMBOL INDEX (364 symbols across 45 files)
FILE: samples/Sample.Android/MainActivity.cs
class MainActivity (line 12) | [Activity (MainLauncher = true)]
method OnCreate (line 17) | protected override void OnCreate (Bundle bundle)
FILE: samples/Sample.Forms/Samples.Android/MainActivity.cs
class MainActivity (line 11) | [Activity (MainLauncher = true, ConfigurationChanges = ConfigChanges.Scr...
method OnCreate (line 14) | protected override void OnCreate (Bundle bundle)
method OnSaveSignature (line 26) | private async Task<bool> OnSaveSignature (Stream bitmap, string filename)
FILE: samples/Sample.Forms/Samples.UWP/App.xaml.cs
class App (line 13) | sealed partial class App : Application
method App (line 19) | public App ()
method OnLaunched (line 30) | protected override void OnLaunched (LaunchActivatedEventArgs e)
method OnNavigationFailed (line 78) | private void OnNavigationFailed (object sender, NavigationFailedEventA...
method OnSuspending (line 90) | private void OnSuspending (object sender, SuspendingEventArgs e)
FILE: samples/Sample.Forms/Samples.UWP/MainPage.xaml.cs
class MainPage (line 8) | public sealed partial class MainPage
method MainPage (line 10) | public MainPage ()
method OnSaveSignature (line 17) | private async Task<bool> OnSaveSignature (Stream bitmap, string filename)
FILE: samples/Sample.Forms/Samples.iOS/AppDelegate.cs
class AppDelegate (line 11) | [Register ("AppDelegate")]
method FinishedLaunching (line 14) | public override bool FinishedLaunching (UIApplication app, NSDictionar...
method OnSaveSignature (line 23) | private async Task<bool> OnSaveSignature (Stream bitmap, string filename)
FILE: samples/Sample.Forms/Samples.iOS/Main.cs
class Application (line 6) | public class Application
method Main (line 8) | static void Main (string[] args)
FILE: samples/Sample.Forms/Samples/App.xaml.cs
class App (line 11) | public partial class App : Application
method App (line 15) | public App (Func<Stream, string, Task<bool>> saveSignature)
method SaveSignature (line 24) | public static Task<bool> SaveSignature (Stream bitmap, string filename)
FILE: samples/Sample.Forms/Samples/BindingPage.xaml.cs
class BindingPage (line 5) | public partial class BindingPage : ContentPage
method BindingPage (line 7) | public BindingPage ()
FILE: samples/Sample.Forms/Samples/BindingPageViewModel.cs
class BindingViewModel (line 13) | public class BindingViewModel : BindableObject
method BindingViewModel (line 18) | public BindingViewModel (Func<SignatureImageFormat, ImageConstructionS...
method OnSaveVector (line 58) | private void OnSaveVector ()
method OnLoadVector (line 65) | private void OnLoadVector ()
method OnSaveImage (line 70) | private async void OnSaveImage ()
method DisplayAlert (line 90) | private void DisplayAlert (string message)
FILE: samples/Sample.Forms/Samples/EventsPage.xaml.cs
class EventsPage (line 9) | public partial class EventsPage : ContentPage
method EventsPage (line 13) | public EventsPage ()
method UpdateControls (line 20) | private void UpdateControls ()
method SaveVectorClicked (line 27) | private void SaveVectorClicked (object sender, EventArgs e)
method LoadVectorClicked (line 35) | private void LoadVectorClicked (object sender, EventArgs e)
method SaveImageClicked (line 40) | private async void SaveImageClicked (object sender, EventArgs e)
method SignatureChanged (line 54) | private void SignatureChanged (object sender, EventArgs e)
FILE: samples/Sample.Forms/Samples/Helpers/CaptureSignatureBehaviorBase.cs
class CaptureSignatureBehaviorBase (line 8) | public class CaptureSignatureBehaviorBase : Behavior<SignaturePadView>
method OnAttachedTo (line 13) | protected override void OnAttachedTo (SignaturePadView bindable)
method OnDetachingFrom (line 25) | protected override void OnDetachingFrom (SignaturePadView bindable)
method UpdateSignaturePad (line 37) | protected virtual void UpdateSignaturePad (SignaturePadView bindable, ...
method UpdateBehavior (line 41) | protected virtual void UpdateBehavior (SignaturePadView signaturePad)
method OnPropertyChanged (line 45) | protected void OnPropertyChanged (BindableObject bindable, BindablePro...
method UpdateBindingContext (line 57) | private void UpdateBindingContext (object sender, EventArgs e)
method OnSignatureChanged (line 64) | private void OnSignatureChanged (object sender, EventArgs e)
method CreatePropertyChanged (line 76) | public static BindableProperty.BindingPropertyChangedDelegate CreatePr...
FILE: samples/Sample.Forms/Samples/Helpers/CaptureSignaturePointsBehavior.cs
class CaptureSignaturePointsBehavior (line 8) | public class CaptureSignaturePointsBehavior : CaptureSignatureBehaviorBase
method UpdateSignaturePad (line 24) | protected override void UpdateSignaturePad (SignaturePadView bindable,...
method UpdateBehavior (line 29) | protected override void UpdateBehavior (SignaturePadView signaturePad)
FILE: samples/Sample.Forms/Samples/Helpers/CaptureSignatureStrokesBehavior.cs
class CaptureSignatureStrokesBehavior (line 8) | public class CaptureSignatureStrokesBehavior : CaptureSignatureBehaviorBase
method UpdateSignaturePad (line 24) | protected override void UpdateSignaturePad (SignaturePadView bindable,...
method UpdateBehavior (line 29) | protected override void UpdateBehavior (SignaturePadView signaturePad)
FILE: samples/Sample.Forms/Samples/Helpers/NotConverter.cs
class NotConverter (line 7) | public class NotConverter : IValueConverter
method Convert (line 9) | public object Convert (object value, Type targetType, object parameter...
method ConvertBack (line 14) | public object ConvertBack (object value, Type targetType, object param...
FILE: samples/Sample.Forms/Samples/MainPage.xaml.cs
class MainPage (line 5) | public partial class MainPage : TabbedPage
method MainPage (line 7) | public MainPage ()
FILE: samples/Sample.UWP/App.xaml.cs
class App (line 13) | sealed partial class App : Application
method App (line 19) | public App ()
method OnLaunched (line 30) | protected override void OnLaunched (LaunchActivatedEventArgs e)
method OnNavigationFailed (line 71) | void OnNavigationFailed (object sender, NavigationFailedEventArgs e)
method OnSuspending (line 83) | private void OnSuspending (object sender, SuspendingEventArgs e)
FILE: samples/Sample.UWP/MainPage.xaml.cs
class MainPage (line 13) | public sealed partial class MainPage : Page
method MainPage (line 17) | public MainPage ()
method UpdateControls (line 24) | private void UpdateControls ()
method SaveVectorClicked (line 31) | private void SaveVectorClicked (object sender, RoutedEventArgs e)
method LoadVectorClicked (line 46) | private void LoadVectorClicked (object sender, RoutedEventArgs e)
method SaveImageClicked (line 51) | private async void SaveImageClicked (object sender, RoutedEventArgs e)
method SignatureChanged (line 73) | private void SignatureChanged (object sender, EventArgs e)
FILE: samples/Sample.iOS/AppDelegate.cs
class AppDelegate (line 6) | [Register (nameof (AppDelegate))]
method FinishedLaunching (line 11) | public override bool FinishedLaunching (UIApplication application, NSD...
FILE: samples/Sample.iOS/Main.cs
class Application (line 5) | public class Application
method Main (line 7) | static void Main (string[] args)
FILE: samples/Sample.iOS/ViewController.cs
class ViewController (line 12) | public partial class ViewController : UIViewController
method ViewController (line 16) | public ViewController (IntPtr handle)
method ViewDidLoad (line 21) | public override void ViewDidLoad ()
method UpdateControls (line 34) | private void UpdateControls ()
method SaveVectorClicked (line 41) | partial void SaveVectorClicked (UIButton sender)
method LoadVectorClicked (line 49) | partial void LoadVectorClicked (UIButton sender)
method SaveImageClicked (line 54) | async partial void SaveImageClicked (UIButton sender)
method ShowToast (line 82) | private async void ShowToast (string message)
FILE: samples/Sample.iOS/ViewController.designer.cs
class ViewController (line 14) | [Register ("ViewController")]
method LoadVectorClicked (line 33) | [Action ("LoadVectorClicked:")]
method SaveImageClicked (line 37) | [Action ("SaveImageClicked:")]
method SaveVectorClicked (line 41) | [Action ("SaveVectorClicked:")]
method ReleaseDesignerOutlets (line 45) | void ReleaseDesignerOutlets ()
FILE: src/SignaturePad.Android/InkPresenter.cs
class InkPresenter (line 13) | partial class InkPresenter : View
method InkPresenter (line 15) | static InkPresenter ()
method InkPresenter (line 30) | public InkPresenter (Context context)
method Initialize (line 36) | private void Initialize ()
method OnTouchEvent (line 40) | public override bool OnTouchEvent (MotionEvent e)
method TouchesBegan (line 57) | private void TouchesBegan (MotionEvent e)
method TouchesMoved (line 78) | private void TouchesMoved (MotionEvent e, bool update = true)
method TouchesEnded (line 125) | private void TouchesEnded (MotionEvent e)
method Invalidate (line 150) | private void Invalidate (RectangleF dirtyRect)
method OnDraw (line 162) | protected override void OnDraw (Canvas canvas)
method CreateBufferImage (line 207) | private Bitmap CreateBufferImage ()
FILE: src/SignaturePad.Android/SignaturePadCanvasView.cs
class SignaturePadCanvasView (line 11) | public partial class SignaturePadCanvasView : FrameLayout
method SignaturePadCanvasView (line 15) | public SignaturePadCanvasView (Context context)
method SignaturePadCanvasView (line 21) | public SignaturePadCanvasView (Context context, IAttributeSet attrs)
method SignaturePadCanvasView (line 27) | public SignaturePadCanvasView (Context context, IAttributeSet attrs, i...
method Initialize (line 33) | private void Initialize ()
method Clear (line 82) | public void Clear ()
method GetImageInternal (line 89) | private Bitmap GetImageInternal (System.Drawing.SizeF scale, System.Dr...
method GetImageStreamInternal (line 123) | private async Task<Stream> GetImageStreamInternal (SignatureImageForma...
method OnInterceptTouchEvent (line 160) | public override bool OnInterceptTouchEvent (MotionEvent ev)
FILE: src/SignaturePad.Android/SignaturePadView.cs
class SignaturePadView (line 11) | public partial class SignaturePadView : RelativeLayout
method SignaturePadView (line 15) | public SignaturePadView (Context context)
method SignaturePadView (line 21) | public SignaturePadView (Context context, IAttributeSet attrs)
method SignaturePadView (line 27) | public SignaturePadView (Context context, IAttributeSet attrs, int def...
method Initialize (line 33) | private void Initialize (IAttributeSet attrs)
method UpdateUi (line 205) | private void UpdateUi ()
method OnInterceptTouchEvent (line 210) | public override bool OnInterceptTouchEvent (MotionEvent ev)
FILE: src/SignaturePad.Forms.Droid/SignaturePadViewRenderer.cs
class SignaturePadView (line 13) | [RenderWith (typeof (SignaturePadViewRenderer))]
class SignaturePadViewRenderer (line 18) | internal class SignaturePadViewRenderer : VisualElementRenderer<Grid>
method SignaturePadViewRenderer (line 20) | [Obsolete ("This constructor is obsolete as of version 2.5. Please use...
method SignaturePadViewRenderer (line 25) | public SignaturePadViewRenderer (Android.Content.Context context)
method OnInterceptTouchEvent (line 30) | public override bool OnInterceptTouchEvent (Android.Views.MotionEvent ev)
FILE: src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs
class ColorExtensions (line 22) | public static class ColorExtensions
method ToWindows (line 25) | public static NativeColor ToWindows (this Color color)
method ToNative (line 35) | public static NativeColor ToNative (this Color color)
method SetTextColor (line 47) | public static void SetTextColor (this TextBlock textBlock, Color color)
method SetTextColor (line 52) | public static void SetTextColor (this UILabel label, Color color)
method SetTextColor (line 56) | public static void SetTextColor (this UIButton button, Color color)
method SetTextColor (line 61) | public static void SetTextColor (this TextView label, Color color)
FILE: src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs
class SignaturePadCanvasRenderer (line 34) | public class SignaturePadCanvasRenderer : ViewRenderer<SignaturePadCanva...
method SignaturePadCanvasRenderer (line 36) | #if __ANDROID__
method SignaturePadCanvasRenderer (line 44) | public SignaturePadCanvasRenderer (Android.Content.Context context)
method OnElementChanged (line 50) | protected override void OnElementChanged (ElementChangedEventArgs<Sign...
method OnElementPropertyChanged (line 96) | protected override void OnElementPropertyChanged (object sender, Prope...
method OnStrokeCompleted (line 103) | private void OnStrokeCompleted (object sender, EventArgs e)
method OnCleared (line 108) | private void OnCleared (object sender, EventArgs e)
method OnImageStreamRequested (line 113) | private void OnImageStreamRequested (object sender, SignaturePadCanvas...
method OnIsBlankRequested (line 142) | private void OnIsBlankRequested (object sender, SignaturePadCanvasView...
method OnPointsRequested (line 151) | private void OnPointsRequested (object sender, SignaturePadCanvasView....
method OnPointsSpecified (line 160) | private void OnPointsSpecified (object sender, SignaturePadCanvasView....
method OnStrokesRequested (line 169) | private void OnStrokesRequested (object sender, SignaturePadCanvasView...
method OnStrokesSpecified (line 178) | private void OnStrokesSpecified (object sender, SignaturePadCanvasView...
method OnClearRequested (line 187) | private void OnClearRequested (object sender, EventArgs e)
method UpdateAll (line 199) | private void UpdateAll ()
method Update (line 219) | private void Update (string property)
FILE: src/SignaturePad.Forms.Shared/ImageConstructionSettings.cs
type SizeOrScaleType (line 5) | public enum SizeOrScaleType
type SizeOrScale (line 11) | public struct SizeOrScale
method SizeOrScale (line 13) | public SizeOrScale (float xy, SizeOrScaleType type)
method SizeOrScale (line 21) | public SizeOrScale (float xy, SizeOrScaleType type, bool keepAspectRatio)
method SizeOrScale (line 29) | public SizeOrScale (Size size, SizeOrScaleType type)
method SizeOrScale (line 37) | public SizeOrScale (Size size, SizeOrScaleType type, bool keepAspectRa...
method SizeOrScale (line 45) | public SizeOrScale (float x, float y, SizeOrScaleType type)
method SizeOrScale (line 53) | public SizeOrScale (float x, float y, SizeOrScaleType type, bool keepA...
method GetScale (line 71) | public Size GetScale (float width, float height)
method GetSize (line 83) | public Size GetSize (float width, float height)
type ImageConstructionSettings (line 106) | public struct ImageConstructionSettings
FILE: src/SignaturePad.Forms.Shared/SignatureImageFormat.cs
type SignatureImageFormat (line 5) | public enum SignatureImageFormat
FILE: src/SignaturePad.Forms.Shared/SignaturePadCanvasView.cs
class SignaturePadCanvasView (line 10) | [RenderWith (typeof (SignaturePadCanvasRenderer))]
method GetImageStreamAsync (line 88) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 100) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 112) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 124) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 137) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 150) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 163) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 177) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 191) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 205) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat imageFor...
method Clear (line 212) | public void Clear ()
method GetSignaturePoints (line 217) | private IEnumerable<Point> GetSignaturePoints ()
method SetSignaturePoints (line 224) | private void SetSignaturePoints (IEnumerable<Point> points)
method GetSignatureStrokes (line 229) | private IEnumerable<IEnumerable<Point>> GetSignatureStrokes ()
method SetSignatureStrokes (line 236) | private void SetSignatureStrokes (IEnumerable<IEnumerable<Point>> stro...
method RequestIsBlank (line 241) | private bool RequestIsBlank ()
method OnStrokeCompleted (line 248) | internal void OnStrokeCompleted ()
method OnCleared (line 260) | internal void OnCleared ()
method UpdateBindableProperties (line 272) | private void UpdateBindableProperties ()
class ImageStreamRequestedEventArgs (line 288) | internal class ImageStreamRequestedEventArgs : EventArgs
method ImageStreamRequestedEventArgs (line 290) | public ImageStreamRequestedEventArgs (SignatureImageFormat imageForm...
class IsBlankRequestedEventArgs (line 303) | internal class IsBlankRequestedEventArgs : EventArgs
class PointsEventArgs (line 308) | internal class PointsEventArgs : EventArgs
class StrokesEventArgs (line 313) | internal class StrokesEventArgs : EventArgs
FILE: src/SignaturePad.Forms.Shared/SignaturePadView.cs
class SignaturePadView (line 11) | public partial class SignaturePadView : Grid
method SignaturePadView (line 50) | static SignaturePadView ()
method SignaturePadView (line 191) | public SignaturePadView ()
method OnPropertyChanged (line 302) | protected override void OnPropertyChanged ([CallerMemberName] string p...
method Clear (line 541) | public void Clear ()
method GetImageStreamAsync (line 551) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 559) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 567) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 575) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 583) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 591) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 599) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 607) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 615) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 623) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method OnClearTapped (line 628) | private void OnClearTapped ()
method OnSignatureCleared (line 633) | private void OnSignatureCleared ()
method OnSignatureStrokeCompleted (line 647) | private void OnSignatureStrokeCompleted ()
method UpdateBindableProperties (line 661) | private void UpdateBindableProperties ()
method UpdateUi (line 666) | private void UpdateUi ()
method OnPaddingChanged (line 671) | private static void OnPaddingChanged (BindableObject bindable, object ...
method OnPaddingChanged (line 676) | private void OnPaddingChanged ()
FILE: src/SignaturePad.Forms/SignaturePadCanvasRenderer.cs
class SignaturePadCanvasRenderer (line 3) | internal class SignaturePadCanvasRenderer
FILE: src/SignaturePad.InkPresenter.Shared/InkPresenter.cs
class InkPresenter (line 30) | internal partial class InkPresenter
method GetStrokes (line 97) | public IReadOnlyList<InkStroke> GetStrokes ()
method Clear (line 102) | public void Clear ()
method AddStroke (line 110) | public void AddStroke (NativePoint[] strokePoints, NativeColor color, ...
method AddStrokes (line 118) | public void AddStrokes (IEnumerable<NativePoint[]> strokes, NativeColo...
method AddStrokeInternal (line 136) | private bool AddStrokeInternal (IEnumerable<NativePoint> points, Nativ...
method HasMovedFarEnough (line 159) | private bool HasMovedFarEnough (InkStroke stroke, double touchX, doubl...
method UpdateBounds (line 172) | private void UpdateBounds (NativePoint touch)
method UpdateBounds (line 180) | private void UpdateBounds (float touchX, float touchY)
method ResetBounds (line 196) | private void ResetBounds (NativePoint touch)
method ResetBounds (line 204) | private void ResetBounds (float touchX, float touchY)
method OnStrokeCompleted (line 212) | private void OnStrokeCompleted ()
FILE: src/SignaturePad.InkPresenter.Shared/InkStroke.cs
class InkStroke (line 19) | internal class InkStroke
method InkStroke (line 25) | public InkStroke (NativePath path, IList<NativePoint> points, NativeCo...
method GetPoints (line 35) | public IList<NativePoint> GetPoints ()
FILE: src/SignaturePad.Shared/Extensions.cs
class Extensions (line 34) | internal static class Extensions
method GetSize (line 38) | public static System.Drawing.SizeF GetSize (this Bitmap image)
method GetSize (line 43) | public static System.Drawing.SizeF GetSize (this View view)
method GetSize (line 50) | public static CGSize GetSize (this UIImage image)
method Invalidate (line 55) | public static void Invalidate (this UIView view)
method MoveTo (line 60) | public static void MoveTo (this UIBezierPath path, nfloat x, nfloat y)
method LineTo (line 65) | public static void LineTo (this UIBezierPath path, nfloat x, nfloat y)
method GetSize (line 70) | public static CGSize GetSize (this UIView view)
method MoveTo (line 77) | public static void MoveTo (this Stroke stroke, double x, double y)
method LineTo (line 82) | public static void LineTo (this Stroke stroke, double x, double y)
method AddStrokes (line 87) | public static void AddStrokes (this InkPresenter inkPresenter, IList<P...
method GetStrokes (line 113) | public static IList<Stroke> GetStrokes (this InkPresenter inkPresenter)
method GetPoints (line 118) | public static IEnumerable<Point> GetPoints (this Stroke stroke)
method GetSize (line 123) | public static Size GetSize (this FrameworkElement element)
method MoveTo (line 130) | public static void MoveTo (this List<Point> stroke, double x, double y)
method LineTo (line 135) | public static void LineTo (this List<Point> stroke, double x, double y)
method MoveTo (line 140) | public static void MoveTo (this PathGeometry stroke, double x, double y)
method LineTo (line 150) | public static void LineTo (this PathGeometry stroke, double x, double y)
method GetSize (line 167) | public static Size GetSize (this FrameworkElement element)
method GetSize (line 172) | public static Size GetSize (this WriteableBitmap image)
method GetPoints (line 179) | public static IEnumerable<Point> GetPoints (this InkStroke stroke)
method MoveTo (line 199) | public static void MoveTo (this List<Point> stroke, double x, double y)
method LineTo (line 204) | public static void LineTo (this List<Point> stroke, double x, double y)
method GetStrokes (line 209) | public static IReadOnlyList<InkStroke> GetStrokes (this InkPresenter i...
method AddStrokes (line 214) | public static void AddStrokes (this InkPresenter inkPresenter, IList<P...
method GetPoints (line 232) | public static IEnumerable<Point> GetPoints (this InkStroke stroke)
method GetSize (line 237) | public static Size GetSize (this FrameworkElement element)
FILE: src/SignaturePad.Shared/ImageConstructionSettings.cs
type SizeOrScaleType (line 27) | public enum SizeOrScaleType
type SizeOrScale (line 33) | public struct SizeOrScale
method SizeOrScale (line 35) | public SizeOrScale (float xy, SizeOrScaleType type)
method SizeOrScale (line 43) | public SizeOrScale (float xy, SizeOrScaleType type, bool keepAspectRatio)
method SizeOrScale (line 51) | public SizeOrScale (NativeSize size, SizeOrScaleType type)
method SizeOrScale (line 59) | public SizeOrScale (NativeSize size, SizeOrScaleType type, bool keepAs...
method SizeOrScale (line 67) | public SizeOrScale (float x, float y, SizeOrScaleType type)
method SizeOrScale (line 75) | public SizeOrScale (float x, float y, SizeOrScaleType type, bool keepA...
method GetScale (line 93) | public NativeSize GetScale (float width, float height)
method GetSize (line 105) | public NativeSize GetSize (float width, float height)
type ImageConstructionSettings (line 128) | public struct ImageConstructionSettings
method ApplyDefaults (line 157) | internal void ApplyDefaults ()
method ApplyDefaults (line 162) | internal void ApplyDefaults (float strokeWidth, NativeColor strokeColor)
FILE: src/SignaturePad.Shared/PathSmoothing.cs
class PathSmoothing (line 27) | internal static class PathSmoothing
method SmoothedPathWithGranularity (line 37) | public static InkStroke SmoothedPathWithGranularity (InkStroke current...
method SmoothedPathWithGranularity (line 74) | public static void SmoothedPathWithGranularity (List<NativePoint> curr...
method BezierToLinear (line 138) | public static List<NativePoint> BezierToLinear (IReadOnlyList<InkStrok...
method Quadratic (line 165) | private static NativePoint Quadratic (float t, NativePoint p1, NativeP...
method Qubic (line 174) | private static NativePoint Qubic (float t, NativePoint p0, NativePoint...
FILE: src/SignaturePad.Shared/SignatureImageFormat.cs
type SignatureImageFormat (line 3) | public enum SignatureImageFormat
FILE: src/SignaturePad.Shared/SignaturePadCanvasView.cs
class SignaturePadCanvasView (line 41) | partial class SignaturePadCanvasView
method GetSignatureBounds (line 80) | public NativeRect GetSignatureBounds (float padding = 5f)
method GetImage (line 113) | public NativeImage GetImage (bool shouldCrop = true, bool keepAspectRa...
method GetImage (line 125) | public NativeImage GetImage (NativeSize size, bool shouldCrop = true, ...
method GetImage (line 137) | public NativeImage GetImage (float scale, bool shouldCrop = true, bool...
method GetImage (line 149) | public NativeImage GetImage (NativeColor strokeColor, bool shouldCrop ...
method GetImage (line 162) | public NativeImage GetImage (NativeColor strokeColor, NativeSize size,...
method GetImage (line 175) | public NativeImage GetImage (NativeColor strokeColor, float scale, boo...
method GetImage (line 188) | public NativeImage GetImage (NativeColor strokeColor, NativeColor fill...
method GetImage (line 202) | public NativeImage GetImage (NativeColor strokeColor, NativeColor fill...
method GetImage (line 216) | public NativeImage GetImage (NativeColor strokeColor, NativeColor fill...
method GetImage (line 230) | public NativeImage GetImage (ImageConstructionSettings settings)
method GetImageStreamAsync (line 250) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 262) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 274) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 286) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 299) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 312) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 325) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 339) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 353) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 367) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageConstructionArguments (line 384) | private bool GetImageConstructionArguments (ImageConstructionSettings ...
method LoadStrokes (line 439) | public void LoadStrokes (NativePoint[][] loadedStrokes)
method LoadPoints (line 462) | public void LoadPoints (NativePoint[] loadedPoints)
method OnCleared (line 515) | private void OnCleared ()
method OnStrokeCompleted (line 520) | private void OnStrokeCompleted ()
method OnStrokeCompleted (line 525) | private void OnStrokeCompleted (object sender, EventArgs e)
FILE: src/SignaturePad.Shared/SignaturePadView.cs
class SignaturePad (line 28) | partial class SignaturePad
class SignaturePadView (line 30) | partial class SignaturePadView
method Clear (line 64) | public void Clear ()
method LoadPoints (line 71) | public void LoadPoints (NativePoint[] points)
method LoadStrokes (line 78) | public void LoadStrokes (NativePoint[][] strokes)
method GetImage (line 88) | public NativeImage GetImage (bool shouldCrop = true, bool keepAspectRa...
method GetImage (line 96) | public NativeImage GetImage (NativeSize size, bool shouldCrop = true, ...
method GetImage (line 104) | public NativeImage GetImage (float scale, bool shouldCrop = true, bool...
method GetImage (line 112) | public NativeImage GetImage (NativeColor strokeColor, bool shouldCrop ...
method GetImage (line 120) | public NativeImage GetImage (NativeColor strokeColor, NativeSize size,...
method GetImage (line 128) | public NativeImage GetImage (NativeColor strokeColor, float scale, boo...
method GetImage (line 136) | public NativeImage GetImage (NativeColor strokeColor, NativeColor fill...
method GetImage (line 144) | public NativeImage GetImage (NativeColor strokeColor, NativeColor fill...
method GetImage (line 152) | public NativeImage GetImage (NativeColor strokeColor, NativeColor fill...
method GetImage (line 160) | public NativeImage GetImage (ImageConstructionSettings settings)
method GetImageStreamAsync (line 168) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 176) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 184) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 192) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 200) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 208) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 216) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 224) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 232) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method GetImageStreamAsync (line 240) | public Task<Stream> GetImageStreamAsync (SignatureImageFormat format, ...
method OnClearTapped (line 245) | private void OnClearTapped ()
method OnSignatureCleared (line 250) | private void OnSignatureCleared ()
method OnSignatureStrokeCompleted (line 256) | private void OnSignatureStrokeCompleted ()
FILE: src/SignaturePad.UWP/SignaturePad.cs
class SignaturePad (line 10) | [TemplatePart (Name = PartBackgroundImageView, Type = typeof (Image))]
method SignaturePad (line 43) | static SignaturePad ()
method SignaturePad (line 147) | public SignaturePad ()
method OnApplyTemplate (line 156) | protected override void OnApplyTemplate ()
method UpdateUi (line 331) | private void UpdateUi ()
method OnPaddingChanged (line 336) | private void OnPaddingChanged (DependencyObject sender, DependencyProp...
method OnPaddingChanged (line 359) | private static void OnPaddingChanged (DependencyObject d, DependencyPr...
FILE: src/SignaturePad.UWP/SignaturePadCanvasView.cs
class SignaturePadCanvasView (line 19) | [TemplatePart (Name = PartInkCanvas, Type = typeof (InkCanvas))]
method SignaturePadCanvasView (line 29) | static SignaturePadCanvasView ()
method SignaturePadCanvasView (line 44) | public SignaturePadCanvasView ()
method OnApplyTemplate (line 56) | protected override void OnApplyTemplate ()
method Clear (line 79) | public void Clear ()
method GetImageStreamInternal (line 89) | private async Task<Stream> GetImageStreamInternal (SignatureImageForma...
method GetImageInternal (line 117) | private WriteableBitmap GetImageInternal (Size scale, Rect signatureBo...
method GetRenderTarget (line 127) | private CanvasRenderTarget GetRenderTarget (Size scale, Rect signature...
method OnStrokePropertiesChanged (line 158) | private static void OnStrokePropertiesChanged (DependencyObject d, Dep...
FILE: src/SignaturePad.iOS/InkPresenter.cs
class InkPresenter (line 8) | partial class InkPresenter : UIView
method InkPresenter (line 10) | static InkPresenter ()
method InkPresenter (line 15) | public InkPresenter ()
method InkPresenter (line 21) | public InkPresenter (CGRect frame)
method Initialize (line 27) | private void Initialize ()
method GestureRecognizerShouldBegin (line 34) | public override bool GestureRecognizerShouldBegin (UIGestureRecognizer...
method TouchesBegan (line 36) | public override void TouchesBegan (NSSet touches, UIEvent evt)
method TouchesMoved (line 53) | public override void TouchesMoved (NSSet touches, UIEvent evt)
method TouchesCancelled (line 77) | public override void TouchesCancelled (NSSet touches, UIEvent evt)
method TouchesEnded (line 82) | public override void TouchesEnded (NSSet touches, UIEvent evt)
method Draw (line 114) | public override void Draw (CGRect rect)
method CreateBufferImage (line 154) | private UIImage CreateBufferImage ()
method LayoutSubviews (line 186) | public override void LayoutSubviews ()
FILE: src/SignaturePad.iOS/SignaturePadCanvasView.cs
class SignaturePadCanvasView (line 11) | [Register ("SignaturePadCanvasView")]
method SignaturePadCanvasView (line 17) | public SignaturePadCanvasView ()
method SignaturePadCanvasView (line 22) | public SignaturePadCanvasView (NSCoder coder)
method SignaturePadCanvasView (line 28) | protected SignaturePadCanvasView (IntPtr ptr)
method SignaturePadCanvasView (line 34) | public SignaturePadCanvasView (CGRect frame)
method Initialize (line 40) | private void Initialize (bool baseProperties = true)
method Clear (line 83) | public void Clear ()
method GetImageInternal (line 90) | private UIImage GetImageInternal (CGSize scale, CGRect signatureBounds...
method GetImageStreamInternal (line 124) | private Task<Stream> GetImageStreamInternal (SignatureImageFormat form...
FILE: src/SignaturePad.iOS/SignaturePadView.cs
class SignaturePadView (line 9) | [Register ("SignaturePadView")]
method SignaturePadView (line 15) | public SignaturePadView ()
method SignaturePadView (line 20) | public SignaturePadView (NSCoder coder)
method SignaturePadView (line 26) | public SignaturePadView (IntPtr ptr)
method SignaturePadView (line 32) | public SignaturePadView (CGRect frame)
method Initialize (line 38) | private void Initialize (bool baseProperties = true)
method UpdateUi (line 349) | private void UpdateUi ()
method LayoutSubviews (line 354) | public override void LayoutSubviews ()
Condensed preview — 122 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (417K chars).
[
{
"path": ".editorconfig",
"chars": 7039,
"preview": "# EditorConfig is awesome: http://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n# Don't use tabs for inden"
},
{
"path": ".gitignore",
"chars": 4276,
"preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# Repo"
},
{
"path": "ISSUE_TEMPLATE.md",
"chars": 1340,
"preview": "### Description\n\n<!-- a general description goes here -->\n\n### Code\n\n<!-- a snippet of code that demonstrates the issue "
},
{
"path": "LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 Xamarin\n\nPermission is hereby granted, free of charge, to any person obtaining"
},
{
"path": "README.md",
"chars": 3576,
"preview": "# Signature Pad\n\n\n[\n\t\t"
},
{
"path": "samples/Sample.Forms/Samples/BindingPageViewModel.cs",
"chars": 2189,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing"
},
{
"path": "samples/Sample.Forms/Samples/EventsPage.xaml",
"chars": 1503,
"preview": "<ContentPage xmlns=\"http://xamarin.com/schemas/2014/forms\"\n xmlns:x=\"http://schemas.microsoft.com/winfx/200"
},
{
"path": "samples/Sample.Forms/Samples/EventsPage.xaml.cs",
"chars": 1356,
"preview": "using System;\nusing System.Linq;\nusing Xamarin.Forms;\n\nusing SignaturePad.Forms;\n\nnamespace Samples\n{\n\tpublic partial c"
},
{
"path": "samples/Sample.Forms/Samples/Helpers/CaptureSignatureBehaviorBase.cs",
"chars": 2273,
"preview": "using System;\nusing Xamarin.Forms;\n\nusing SignaturePad.Forms;\n\nnamespace Samples\n{\n\tpublic class CaptureSignatureBehavi"
},
{
"path": "samples/Sample.Forms/Samples/Helpers/CaptureSignaturePointsBehavior.cs",
"chars": 942,
"preview": "using System.Collections.Generic;\nusing Xamarin.Forms;\n\nusing SignaturePad.Forms;\n\nnamespace Samples\n{\n\tpublic class Ca"
},
{
"path": "samples/Sample.Forms/Samples/Helpers/CaptureSignatureStrokesBehavior.cs",
"chars": 1018,
"preview": "using System.Collections.Generic;\nusing Xamarin.Forms;\n\nusing SignaturePad.Forms;\n\nnamespace Samples\n{\n\tpublic class Ca"
},
{
"path": "samples/Sample.Forms/Samples/Helpers/NotConverter.cs",
"chars": 415,
"preview": "using System;\nusing System.Globalization;\nusing Xamarin.Forms;\n\nnamespace Samples\n{\n\tpublic class NotConverter : IValue"
},
{
"path": "samples/Sample.Forms/Samples/MainPage.xaml",
"chars": 356,
"preview": "<TabbedPage xmlns=\"http://xamarin.com/schemas/2014/forms\"\n xmlns:x=\"http://schemas.microsoft.com/winfx/2009"
},
{
"path": "samples/Sample.Forms/Samples/MainPage.xaml.cs",
"chars": 151,
"preview": "using Xamarin.Forms;\n\nnamespace Samples\n{\n\tpublic partial class MainPage : TabbedPage\n\t{\n\t\tpublic MainPage ()\n\t\t{\n\t\t\tIn"
},
{
"path": "samples/Sample.Forms/Samples/Samples.csproj",
"chars": 561,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>netstandard1.4</TargetFramework>\n <RootNam"
},
{
"path": "samples/Sample.Forms/Samples.Android/MainActivity.cs",
"chars": 1073,
"preview": "using System.IO;\nusing System.Threading.Tasks;\nusing Android.App;\nusing Android.Content.PM;\nusing Android.OS;\nusing Xam"
},
{
"path": "samples/Sample.Forms/Samples.Android/Properties/AndroidManifest.xml",
"chars": 569,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" android:ver"
},
{
"path": "samples/Sample.Forms/Samples.Android/Properties/AssemblyInfo.cs",
"chars": 445,
"preview": "using System.Reflection;\nusing Android.App;\n\n\n[assembly: AssemblyTitle(\"Samples.Android\")]\n[assembly: AssemblyDescripti"
},
{
"path": "samples/Sample.Forms/Samples.Android/Resources/layout/tabs.xml",
"chars": 528,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<android.support.design.widget.TabLayout\n xmlns:android=\"http://schemas.andr"
},
{
"path": "samples/Sample.Forms/Samples.Android/Resources/layout/toolbar.xml",
"chars": 574,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<android.support.v7.widget.Toolbar\n xmlns:android=\"http://schemas.android.co"
},
{
"path": "samples/Sample.Forms/Samples.Android/Resources/values/colors.xml",
"chars": 239,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<resources>\n <color name=\"primary\">#2196F3</color>\n <color name=\"primaryDark\""
},
{
"path": "samples/Sample.Forms/Samples.Android/Resources/values/strings.xml",
"chars": 112,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">Signature Pad</string>\n</resources>\n"
},
{
"path": "samples/Sample.Forms/Samples.Android/Resources/values/style.xml",
"chars": 497,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<resources>\n <style name=\"MyTheme\" parent=\"MyTheme.Base\">\n </style>\n <style "
},
{
"path": "samples/Sample.Forms/Samples.Android/Resources/values-v21/style.xml",
"chars": 375,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<resources>\n <style name=\"MyTheme\" parent=\"MyTheme.Base\">\n <!--If you are u"
},
{
"path": "samples/Sample.Forms/Samples.Android/Samples.Android.csproj",
"chars": 4407,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microso"
},
{
"path": "samples/Sample.Forms/Samples.UWP/App.xaml",
"chars": 253,
"preview": "<Application\n x:Class=\"Samples.UWP.App\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xm"
},
{
"path": "samples/Sample.Forms/Samples.UWP/App.xaml.cs",
"chars": 3153,
"preview": "using System;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.UI.Xaml;\nusing W"
},
{
"path": "samples/Sample.Forms/Samples.UWP/MainPage.xaml",
"chars": 612,
"preview": "<forms:WindowsPage\n x:Class=\"Samples.UWP.MainPage\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentat"
},
{
"path": "samples/Sample.Forms/Samples.UWP/MainPage.xaml.cs",
"chars": 746,
"preview": "using System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Windows.Storage;\n\nnamespace Samples.UWP\n{\n\tpublic se"
},
{
"path": "samples/Sample.Forms/Samples.UWP/Package.appxmanifest",
"chars": 1846,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\""
},
{
"path": "samples/Sample.Forms/Samples.UWP/Properties/AssemblyInfo.cs",
"chars": 1039,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "samples/Sample.Forms/Samples.UWP/Properties/Default.rd.xml",
"chars": 1241,
"preview": "<!--\n This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n develope"
},
{
"path": "samples/Sample.Forms/Samples.UWP/Samples.UWP.csproj",
"chars": 9531,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "samples/Sample.Forms/Samples.iOS/AppDelegate.cs",
"chars": 1054,
"preview": "using System.IO;\nusing System.Threading.Tasks;\nusing Foundation;\nusing Photos;\nusing UIKit;\nusing Xamarin.Forms;\nusing "
},
{
"path": "samples/Sample.Forms/Samples.iOS/Entitlements.plist",
"chars": 190,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "samples/Sample.Forms/Samples.iOS/Info.plist",
"chars": 1505,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "samples/Sample.Forms/Samples.iOS/LaunchScreen.storyboard",
"chars": 2835,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboar"
},
{
"path": "samples/Sample.Forms/Samples.iOS/Main.cs",
"chars": 180,
"preview": "using System;\nusing UIKit;\n\nnamespace Samples.iOS\n{\n\tpublic class Application\n\t{\n\t\tstatic void Main (string[] args)\n\t\t{\n"
},
{
"path": "samples/Sample.Forms/Samples.iOS/Properties/AssemblyInfo.cs",
"chars": 1394,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Inform"
},
{
"path": "samples/Sample.Forms/Samples.iOS/Resources/Assets.xcassets/AppIcons.appiconset/Contents.json",
"chars": 2329,
"preview": "{\n \"images\": [\n {\n \"scale\": \"2x\",\n \"size\": \"20x20\",\n \"idiom\": \"iphone\",\n \"filename\": \"Icon-App-2"
},
{
"path": "samples/Sample.Forms/Samples.iOS/Samples.iOS.csproj",
"chars": 6191,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microso"
},
{
"path": "samples/Sample.UWP/App.xaml",
"chars": 251,
"preview": "<Application\n x:Class=\"Sample.UWP.App\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xml"
},
{
"path": "samples/Sample.UWP/App.xaml.cs",
"chars": 3036,
"preview": "using System;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.UI.Xaml;\nusing W"
},
{
"path": "samples/Sample.UWP/MainPage.xaml",
"chars": 1544,
"preview": "<Page\n x:Class=\"Sample.UWP.MainPage\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns"
},
{
"path": "samples/Sample.UWP/MainPage.xaml.cs",
"chars": 1795,
"preview": "using System;\nusing System.IO;\nusing Windows.Foundation;\nusing Windows.Storage;\nusing Windows.UI;\nusing Windows.UI.Xaml"
},
{
"path": "samples/Sample.UWP/Package.appxmanifest",
"chars": 1702,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\""
},
{
"path": "samples/Sample.UWP/Properties/AssemblyInfo.cs",
"chars": 1037,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "samples/Sample.UWP/Properties/Default.rd.xml",
"chars": 1242,
"preview": "<!--\n This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n develope"
},
{
"path": "samples/Sample.UWP/Sample.UWP.csproj",
"chars": 8948,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "samples/Sample.UWP/Sample.UWP.sln",
"chars": 4159,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.26228.10\nMin"
},
{
"path": "samples/Sample.iOS/AppDelegate.cs",
"chars": 319,
"preview": "using Foundation;\nusing UIKit;\n\nnamespace Sample.iOS\n{\n\t[Register (nameof (AppDelegate))]\n\tpublic class AppDelegate : U"
},
{
"path": "samples/Sample.iOS/Entitlements.plist",
"chars": 190,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "samples/Sample.iOS/Info.plist",
"chars": 1602,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "samples/Sample.iOS/LaunchScreen.storyboard",
"chars": 2835,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboar"
},
{
"path": "samples/Sample.iOS/Main.cs",
"chars": 173,
"preview": "using UIKit;\n\nnamespace Sample.iOS\n{\n\tpublic class Application\n\t{\n\t\tstatic void Main (string[] args)\n\t\t{\n\t\t\tUIApplicati"
},
{
"path": "samples/Sample.iOS/Main.storyboard",
"chars": 9996,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboar"
},
{
"path": "samples/Sample.iOS/Resources/Assets.xcassets/AppIcons.appiconset/Contents.json",
"chars": 2329,
"preview": "{\n \"images\": [\n {\n \"scale\": \"2x\",\n \"size\": \"20x20\",\n \"idiom\": \"iphone\",\n \"filename\": \"Icon-App-2"
},
{
"path": "samples/Sample.iOS/Sample.iOS.csproj",
"chars": 6219,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
},
{
"path": "samples/Sample.iOS/Sample.iOS.sln",
"chars": 3309,
"preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 15\r\nVisualStudioVersion = 15.0.26228.10\r"
},
{
"path": "samples/Sample.iOS/ViewController.cs",
"chars": 2184,
"preview": "using System;\nusing System.Threading.Tasks;\nusing CoreGraphics;\nusing Foundation;\nusing Photos;\nusing UIKit;\n\nusing Xam"
},
{
"path": "samples/Sample.iOS/ViewController.designer.cs",
"chars": 1876,
"preview": "// WARNING\n//\n// This file has been generated automatically by Visual Studio from the outlets and\n// actions declared i"
},
{
"path": "src/SignaturePad.Android/InkPresenter.cs",
"chars": 5519,
"preview": "using System.Collections.Generic;\nusing System.Drawing;\nusing System.Linq;\nusing Android.App;\nusing Android.Content;\nus"
},
{
"path": "src/SignaturePad.Android/Resources/drawable/signature_pad_background.xml",
"chars": 176,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <solid andr"
},
{
"path": "src/SignaturePad.Android/Resources/layout/signature_pad_layout.axml",
"chars": 2492,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merge xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <ImageView"
},
{
"path": "src/SignaturePad.Android/Resources/values/attrs.xml",
"chars": 902,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <declare-styleable name=\"SignaturePadView\">\n <attr name=\"stroke"
},
{
"path": "src/SignaturePad.Android/Resources/values/signature_pad_defaults.xml",
"chars": 597,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"signature_pad_clear_label_text\">clear</string>\n <st"
},
{
"path": "src/SignaturePad.Android/SignaturePad.Android.csproj",
"chars": 2444,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>monoandroid4.0.3</TargetFramework>\n <RootN"
},
{
"path": "src/SignaturePad.Android/SignaturePadCanvasView.cs",
"chars": 4170,
"preview": "using System.IO;\nusing System.Threading.Tasks;\nusing Android.Content;\nusing Android.Graphics;\nusing Android.Util;\nusing"
},
{
"path": "src/SignaturePad.Android/SignaturePadView.cs",
"chars": 7229,
"preview": "using System;\nusing Android.Content;\nusing Android.Graphics;\nusing Android.Graphics.Drawables;\nusing Android.Util;\nusin"
},
{
"path": "src/SignaturePad.Forms/SignaturePad.Forms.csproj",
"chars": 2136,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>netstandard1.0</TargetFramework>\n <RootNam"
},
{
"path": "src/SignaturePad.Forms/SignaturePadCanvasRenderer.cs",
"chars": 83,
"preview": "namespace SignaturePad.Forms\n{\n\tinternal class SignaturePadCanvasRenderer\n\t{\n\t}\n}\n"
},
{
"path": "src/SignaturePad.Forms.Droid/SignaturePad.Forms.Droid.csproj",
"chars": 2451,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>monoandroid7.1</TargetFramework>\n <RootNam"
},
{
"path": "src/SignaturePad.Forms.Droid/SignaturePadViewRenderer.cs",
"chars": 1033,
"preview": "using System;\nusing Xamarin.Forms;\nusing Xamarin.Forms.Platform.Android;\n\n[assembly: ExportRenderer (typeof (SignatureP"
},
{
"path": "src/SignaturePad.Forms.Platform.Shared/ColorExtensions.cs",
"chars": 1801,
"preview": "using Color = Xamarin.Forms.Color;\n#if WINDOWS_PHONE\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing Na"
},
{
"path": "src/SignaturePad.Forms.Platform.Shared/SignaturePadCanvasRenderer.cs",
"chars": 6904,
"preview": "using System;\nusing System.ComponentModel;\nusing System.Linq;\nusing Xamarin.Forms;\nusing SignaturePad.Forms;\nusing Color"
},
{
"path": "src/SignaturePad.Forms.Shared/ImageConstructionSettings.cs",
"chars": 2642,
"preview": "using Xamarin.Forms;\n\nnamespace SignaturePad.Forms\n{\n\tpublic enum SizeOrScaleType\n\t{\n\t\tSize,\n\t\tScale\n\t}\n\n\tpublic struct"
},
{
"path": "src/SignaturePad.Forms.Shared/SignatureImageFormat.cs",
"chars": 152,
"preview": "using System;\n\nnamespace SignaturePad.Forms\n{\n\tpublic enum SignatureImageFormat\n\t{\n\t\tPng,\n\t\tJpeg,\n\n\t\t[Obsolete (\"Use Jpe"
},
{
"path": "src/SignaturePad.Forms.Shared/SignaturePadCanvasView.cs",
"chars": 10427,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Threading.Tasks;\nusing System.Windows.Inp"
},
{
"path": "src/SignaturePad.Forms.Shared/SignaturePadView.cs",
"chars": 22369,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Runtime.CompilerServices;\nusing System.Th"
},
{
"path": "src/SignaturePad.Forms.UWP/SignaturePad.Forms.UWP.csproj",
"chars": 2419,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>uap10.0.10240</TargetFramework>\n <RootName"
},
{
"path": "src/SignaturePad.Forms.iOS/SignaturePad.Forms.iOS.csproj",
"chars": 2422,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>xamarin.ios1.0</TargetFramework>\n <RootNam"
},
{
"path": "src/SignaturePad.InkPresenter.Shared/InkPresenter.cs",
"chars": 5356,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\n#if __ANDROID__\nusing NativeRect = System.Drawing.R"
},
{
"path": "src/SignaturePad.InkPresenter.Shared/InkStroke.cs",
"chars": 1203,
"preview": "using System.Collections.Generic;\n\n#if __ANDROID__\nusing NativePoint = System.Drawing.PointF;\nusing NativeColor = Andro"
},
{
"path": "src/SignaturePad.Mac.sln",
"chars": 3162,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.26228.10\nMin"
},
{
"path": "src/SignaturePad.Shared/Extensions.cs",
"chars": 6118,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\n#if __ANDROID__\nusing Android.Graphics;\nusing Andro"
},
{
"path": "src/SignaturePad.Shared/ImageConstructionSettings.cs",
"chars": 4472,
"preview": "using System;\n\n#if __ANDROID__\nusing NativeSize = System.Drawing.SizeF;\nusing NativeColor = Android.Graphics.Color;\nusi"
},
{
"path": "src/SignaturePad.Shared/PathSmoothing.cs",
"chars": 5776,
"preview": "using System.Collections.Generic;\nusing System.Linq;\n\n#if __ANDROID__\nusing NativePoint = System.Drawing.PointF;\nusing "
},
{
"path": "src/SignaturePad.Shared/SignatureImageFormat.cs",
"chars": 85,
"preview": "namespace Xamarin.Controls\n{\n\tpublic enum SignatureImageFormat\n\t{\n\t\tPng,\n\t\tJpeg\n\t}\n}\n"
},
{
"path": "src/SignaturePad.Shared/SignaturePadCanvasView.cs",
"chars": 17585,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.IO;\n\n#if "
},
{
"path": "src/SignaturePad.Shared/SignaturePadView.cs",
"chars": 10054,
"preview": "using System;\nusing System.IO;\nusing System.Threading.Tasks;\n\n#if __ANDROID__\nusing NativeRect = System.Drawing.Rectang"
},
{
"path": "src/SignaturePad.UWP/SignaturePad.UWP.csproj",
"chars": 2275,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>uap10.0.10240</TargetFramework>\n <RootName"
},
{
"path": "src/SignaturePad.UWP/SignaturePad.cs",
"chars": 11792,
"preview": "using System;\nusing System.ComponentModel;\nusing Windows.UI;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusi"
},
{
"path": "src/SignaturePad.UWP/SignaturePadCanvasView.cs",
"chars": 5329,
"preview": "using System;\nusing System.IO;\nusing System.Linq;\nusing System.Numerics;\nusing System.Runtime.InteropServices.WindowsRu"
},
{
"path": "src/SignaturePad.UWP/Themes/Generic.xaml",
"chars": 5111,
"preview": "<ResourceDictionary\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http://schemas.mi"
},
{
"path": "src/SignaturePad.iOS/InkPresenter.cs",
"chars": 4643,
"preview": "using System.Collections.Generic;\nusing CoreGraphics;\nusing Foundation;\nusing UIKit;\n\nnamespace Xamarin.Controls\n{\n\tpar"
},
{
"path": "src/SignaturePad.iOS/SignaturePad.iOS.csproj",
"chars": 2253,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>xamarin.ios1.0</TargetFramework>\n <RootNam"
},
{
"path": "src/SignaturePad.iOS/SignaturePadCanvasView.cs",
"chars": 3544,
"preview": "using System;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Threading.Tasks;\nusing CoreGraphics;\nusing Fou"
},
{
"path": "src/SignaturePad.iOS/SignaturePadView.cs",
"chars": 9864,
"preview": "using System;\nusing System.ComponentModel;\nusing CoreGraphics;\nusing Foundation;\nusing UIKit;\n\nnamespace Xamarin.Contro"
},
{
"path": "src/SignaturePad.sln",
"chars": 4172,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.26730.15\nMin"
}
]
// ... and 4 more files (download for full content)
About this extraction
This page contains the full source code of the xamarin/SignaturePad GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 122 files (369.9 KB), approximately 110.5k tokens, and a symbol index with 364 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.