Add the WPF backend for Xamarin.Forms (#917)

Add a new NuGet
- add a targets file to the nuget to warn if the platform packages were not installed

Update the pipeline:
- use build artifacts everywhere
- just disable tizen for Windows
This commit is contained in:
Matthew Leibowitz 2019-07-26 15:05:54 +02:00 коммит произвёл GitHub
Родитель ec5f04fea1
Коммит e6b7934556
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
69 изменённых файлов: 2534 добавлений и 164 удалений

2
.gitignore поставляемый
Просмотреть файл

@ -6,6 +6,7 @@ output/
tools/
*.VC.db
**/Resources/Resource.designer.cs
*.binlog
# User-specific files
*.suo
@ -244,6 +245,7 @@ _Pvt_Extensions
## Build generated
build/
!**/nuget/build/
DerivedData
## Various settings

Просмотреть файл

@ -39,6 +39,7 @@ SkiaSharp.Views.Gtk3 nuget 1.68.1
SkiaSharp.Views.WindowsForms nuget 1.68.1
SkiaSharp.Views.WPF nuget 1.68.1
SkiaSharp.Views.Forms nuget 1.68.1
SkiaSharp.Views.Forms.WPF nuget 1.68.1
SkiaSharp.HarfBuzz nuget 1.68.1
HarfBuzzSharp nuget 2.5.3
HarfBuzzSharp.NativeAssets.Linux nuget 2.5.3

Просмотреть файл

@ -77,6 +77,7 @@ var TRACKED_NUGETS = new Dictionary<string, Version> {
{ "SkiaSharp.Views.WindowsForms", new Version (1, 57, 0) },
{ "SkiaSharp.Views.WPF", new Version (1, 57, 0) },
{ "SkiaSharp.Views.Forms", new Version (1, 57, 0) },
{ "SkiaSharp.Views.Forms.WPF", new Version (1, 57, 0) },
{ "HarfBuzzSharp", new Version (1, 0, 0) },
{ "HarfBuzzSharp.NativeAssets.Linux", new Version (1, 0, 0) },
{ "SkiaSharp.HarfBuzz", new Version (1, 57, 0) },
@ -230,10 +231,15 @@ Task ("samples")
// create the samples archive
CreateSamplesDirectory ("./samples/", "./output/samples/");
DeleteFiles ("./output/samples/README.md");
MoveFile ("./output/samples/README.zip.md", "./output/samples/README.md");
Zip ("./output/samples/", "./output/samples.zip");
// create the preview samples archive
var suffix = string.IsNullOrEmpty (BUILD_NUMBER)
? $"{PREVIEW_LABEL}"
: $"{PREVIEW_LABEL}.{BUILD_NUMBER}";
CreateSamplesDirectory ("./samples/", "./output/samples-preview/", suffix);
Zip ("./output/samples-preview/", "./output/samples-preview.zip");
// build the newly migrated samples
CleanDirectories ($"{PACKAGE_CACHE_PATH}/skiasharp*");
CleanDirectories ($"{PACKAGE_CACHE_PATH}/harfbuzzsharp*");
@ -266,6 +272,9 @@ Task ("samples")
}
}
CleanDirectory ("./output/samples/");
DeleteDirectory ("./output/samples/");
CleanDirectory ("./output/samples-preview/");
DeleteDirectory ("./output/samples-preview/");
});
////////////////////////////////////////////////////////////////////////////////////////////////////
@ -562,7 +571,7 @@ var envVarsWhitelist = new [] {
"processor_identifier", "node_name", "node_labels", "branch_name",
"os", "build_url", "build_number", "number_of_processors",
"node_label", "build_id", "git_sha", "git_branch_name",
"feature_name", "msbuild_exe", "python_exe",
"feature_name", "msbuild_exe", "python_exe", "preview_label",
"home", "userprofile", "nuget_packages",
"android_sdk_root", "android_ndk_root",
"android_home", "android_ndk_home", "tizen_studio_home"

Просмотреть файл

@ -129,7 +129,7 @@ var DecompressArchive = new Action<FilePath, DirectoryPath> ((archive, outputDir
}
});
void CreateSamplesDirectory (DirectoryPath samplesDirPath, DirectoryPath outputDirPath)
void CreateSamplesDirectory (DirectoryPath samplesDirPath, DirectoryPath outputDirPath, string versionSuffix = "")
{
samplesDirPath = MakeAbsolute (samplesDirPath);
outputDirPath = MakeAbsolute (outputDirPath);
@ -227,9 +227,10 @@ void CreateSamplesDirectory (DirectoryPath samplesDirPath, DirectoryPath outputD
if (!string.IsNullOrWhiteSpace (version)) {
Debug ($"Substituting project reference {relFilePath} for project {rel}.");
var name = projItem.Name.Namespace + "PackageReference";
var suffix = string.IsNullOrEmpty (versionSuffix) ? "" : $"-{versionSuffix}";
projItem.AddAfterSelf (new XElement (name, new object[] {
new XAttribute("Include", packagingGroup),
new XAttribute("Version", version),
new XAttribute("Version", version + suffix),
}));
} else {
Warning ($"Unable to find version information for package '{packagingGroup}'.");
@ -271,6 +272,9 @@ void CreateSamplesDirectory (DirectoryPath samplesDirPath, DirectoryPath outputD
CopyFile (file, dest);
}
}
DeleteFiles ($"{outputDirPath}/README.md");
MoveFile ($"{outputDirPath}/README.zip.md", $"{outputDirPath}/README.md");
}
FilePath GetFullPath (FilePath root, FilePath path)

Просмотреть файл

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<package>
<metadata>
<!-- package -->
<id>SkiaSharp.Views.Forms.WPF</id>
<title>SkiaSharp for Xamarin.Forms (WPF)</title>
<version>1.0.0</version>
<description>
SkiaSharp for Xamarin.Forms is a set of views that can be used to draw on the screen.
</description>
<summary>
SkiaSharp for Xamarin.Forms is a set of views that can be used to draw on the screen.
</summary>
<releaseNotes>
Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release notes.
</releaseNotes>
<projectUrl>https://go.microsoft.com/fwlink/?linkid=868515</projectUrl>
<iconUrl>https://go.microsoft.com/fwlink/?linkid=868516</iconUrl>
<tags>ui xamarin.forms xamarin graphics ios android linux windows uwp tvos macos tizen cross-platform skiasharp</tags>
<!-- legal -->
<licenseUrl>https://go.microsoft.com/fwlink/?linkid=868514</licenseUrl>
<authors>Microsoft</authors>
<owners>Microsoft</owners>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<copyright>© Microsoft Corporation. All rights reserved.</copyright>
<dependencies>
<dependency id="Xamarin.Forms" version="4.0.0.540366" />
<dependency id="Xamarin.Forms.Platform.WPF" version="4.0.0.540366" />
<dependency id="SkiaSharp" version="1.0.0" />
<dependency id="SkiaSharp.Views.Desktop.Common" version="1.0.0" />
<dependency id="SkiaSharp.Views.WindowsForms" version="1.0.0" />
<dependency id="SkiaSharp.Views.WPF" version="1.0.0" />
<dependency id="SkiaSharp.Views.Forms" version="1.0.0" />
<dependency id="OpenTK" version="3.0.1" />
<dependency id="OpenTK.GLControl" version="3.0.1" />
</dependencies>
</metadata>
<files>
<!-- SkiaSharp.Views.Forms.dll -->
<file src="lib/net45/SkiaSharp.Views.Forms.dll" />
<file src="lib/net45/SkiaSharp.Views.Forms.xml" />
<!-- the build bits -->
<file src="build/net45/SkiaSharp.Views.Forms.WPF.props" />
<!-- legal -->
<file src="LICENSE.txt" />
</files>
</package>

Просмотреть файл

@ -27,7 +27,7 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release
<copyright>© Microsoft Corporation. All rights reserved.</copyright>
<dependencies>
<group>
<group targetFramework="netstandard1.3">
<dependency id="Xamarin.Forms" version="4.0.0.540366" />
<dependency id="SkiaSharp" version="1.0.0" />
</group>
@ -56,6 +56,10 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release
<dependency id="SkiaSharp" version="1.0.0" />
<dependency id="SkiaSharp.Views" version="1.0.0" />
</group>
<group targetFramework="net45">
<dependency id="Xamarin.Forms" version="4.0.0.540366" />
<dependency id="SkiaSharp" version="1.0.0" />
</group>
</dependencies>
</metadata>
@ -75,6 +79,9 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release
<file src="lib/tizen40/SkiaSharp.Views.Forms.dll" />
<file src="lib/tizen40/SkiaSharp.Views.Forms.xml" />
<!-- the build bits -->
<file src="build/net45/SkiaSharp.Views.Forms.targets" />
<!-- legal -->
<file src="LICENSE.txt" />

Просмотреть файл

@ -29,6 +29,8 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release
<dependencies>
<dependency id="SkiaSharp" version="1.0.0" />
<dependency id="SkiaSharp.Views.Desktop.Common" version="1.0.0" />
<dependency id="OpenTK" version="3.0.1" />
<dependency id="OpenTK.GLControl" version="3.0.1" />
</dependencies>
</metadata>

Просмотреть файл

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>

Просмотреть файл

@ -0,0 +1,9 @@
<Application x:Class="SkiaSharpSample.WPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SkiaSharpSample.WPF"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>

Просмотреть файл

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace SkiaSharpSample.WPF
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}

Просмотреть файл

@ -0,0 +1,13 @@
<forms:FormsApplicationPage x:Class="SkiaSharpSample.WPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:forms="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF"
xmlns:local="clr-namespace:SkiaSharpSample.WPF"
mc:Ignorable="d"
Title="SkiaSharpSample.WPF" Height="600" Width="800">
<Grid>
</Grid>
</forms:FormsApplicationPage>

Просмотреть файл

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Xamarin.Forms;
using Xamarin.Forms.Platform.WPF;
namespace SkiaSharpSample.WPF
{
public partial class MainWindow : FormsApplicationPage
{
public MainWindow()
{
InitializeComponent();
Forms.Init();
LoadApplication(new SkiaSharpSample.App());
}
}
}

Просмотреть файл

@ -0,0 +1,55 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SkiaSharpSample.WPF")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SkiaSharpSample.WPF")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
//In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Просмотреть файл

@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace SkiaSharpSample.WPF.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SkiaSharpSample.WPF.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

Просмотреть файл

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

Просмотреть файл

@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace SkiaSharpSample.WPF.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

Просмотреть файл

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Просмотреть файл

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Import Project="..\..\..\..\output\SkiaSharp.Views.Forms.WPF\nuget\build\net45\SkiaSharp.Views.Forms.WPF.props" Condition="Exists('..\..\..\..\output\SkiaSharp.Views.Forms.WPF\nuget\build\net45\SkiaSharp.Views.Forms.WPF.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{748981C3-5D0F-462A-9F56-A3C6D792ED30}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>SkiaSharpSample.WPF</RootNamespace>
<AssemblyName>SkiaSharpSample.WPF</AssemblyName>
<TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Forms.Platform.WPF" Version="4.0.0.540366" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\binding\SkiaSharp.Desktop\SkiaSharp.Desktop.csproj">
<Project>{eb1bbdcc-fb07-40d5-8b9e-0079e2c2f2df}</Project>
<Name>SkiaSharp.Desktop</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Desktop.Common\SkiaSharp.Views.Desktop.Common.csproj">
<Project>{e5a90865-c185-45ad-88d1-6da7d6004b03}</Project>
<Name>SkiaSharp.Views.Desktop.Common</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WindowsForms\SkiaSharp.Views.WindowsForms.csproj">
<Project>{409e8a73-82c5-4f7a-9b9d-71a537466dd9}</Project>
<Name>SkiaSharp.Views.WindowsForms</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WPF\SkiaSharp.Views.WPF.csproj">
<Project>{743cf830-d458-41a9-865a-f85126562015}</Project>
<Name>SkiaSharp.Views.WPF</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.WPF\SkiaSharp.Views.Forms.WPF.csproj">
<Project>{27059729-96a9-4313-b2a4-b10798450519}</Project>
<Name>SkiaSharp.Views.Forms.WPF</Name>
</ProjectReference>
<ProjectReference Include="..\SkiaSharpSample\SkiaSharpSample.csproj">
<Project>{b178e8e3-a5ad-4c98-b365-86e05ee53643}</Project>
<Name>SkiaSharpSample</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\..\..\..\output\SkiaSharp\nuget\build\net45\SkiaSharp.targets" Condition="Exists('..\..\..\..\output\SkiaSharp\nuget\build\net45\SkiaSharp.targets')" />
<Import Project="..\..\..\..\output\SkiaSharp.Views.Forms\nuget\build\net45\SkiaSharp.Views.Forms.targets" Condition="Exists('..\..\..\..\output\SkiaSharp.Views.Forms\nuget\build\net45\SkiaSharp.Views.Forms.targets')" />
</Project>

Просмотреть файл

@ -1,19 +1,17 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2010
# Visual Studio Version 16
VisualStudioVersion = 16.0.29118.114
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Forms.UWP", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.UWP\SkiaSharp.Views.Forms.UWP.csproj", "{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.UWP", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.UWP\SkiaSharp.Views.Forms.UWP.csproj", "{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Desktop", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Desktop\SkiaSharp.Views.Desktop.csproj", "{E5A90865-C185-45AD-88D1-6DA7D6004B03}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.UWP", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.UWP\SkiaSharp.Views.UWP.csproj", "{8BB20362-91A2-4206-944D-634070EAC6F3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.UWP", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.UWP\SkiaSharp.Views.UWP.csproj", "{8BB20362-91A2-4206-944D-634070EAC6F3}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Desktop", "..\..\..\binding\SkiaSharp.Desktop\SkiaSharp.Desktop.csproj", "{EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Desktop", "..\..\..\binding\SkiaSharp.Desktop\SkiaSharp.Desktop.csproj", "{EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{BAB615AA-956E-4079-B260-DD7B1F52EC7D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{BAB615AA-956E-4079-B260-DD7B1F52EC7D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.WPF", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WPF\SkiaSharp.Views.WPF.csproj", "{743CF830-D458-41A9-865A-F85126562015}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.WPF", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WPF\SkiaSharp.Views.WPF.csproj", "{743CF830-D458-41A9-865A-F85126562015}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.NetStandard", "..\..\..\binding\SkiaSharp.NetStandard\SkiaSharp.NetStandard.csproj", "{4E0924F8-D546-4428-9412-4B9411FBA5FF}"
EndProject
@ -39,6 +37,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Android", "
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Android", "..\..\..\binding\SkiaSharp.Android\SkiaSharp.Android.csproj", "{5F6EAF9E-C34E-4A06-BCDB-907A6FE163E7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.WPF", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.WPF\SkiaSharp.Views.Forms.WPF.csproj", "{3E27D220-E905-421C-8864-E0E0860711EC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharpSample.WPF", "SkiaSharpSample.WPF\SkiaSharpSample.WPF.csproj", "{748981C3-5D0F-462A-9F56-A3C6D792ED30}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Desktop.Common", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Desktop.Common\SkiaSharp.Views.Desktop.Common.csproj", "{310E7E31-B39A-45D2-8629-8ABB433006DD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.WindowsForms", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WindowsForms\SkiaSharp.Views.WindowsForms.csproj", "{20C289D2-F3ED-40F6-94D0-54FC17C84A62}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -67,22 +73,6 @@ Global
{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}.Release|x64.Build.0 = Release|Any CPU
{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}.Release|x86.ActiveCfg = Release|Any CPU
{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}.Release|x86.Build.0 = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|ARM.ActiveCfg = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|ARM.Build.0 = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|x64.ActiveCfg = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|x64.Build.0 = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|x86.ActiveCfg = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|x86.Build.0 = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|Any CPU.Build.0 = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|ARM.ActiveCfg = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|ARM.Build.0 = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|x64.ActiveCfg = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|x64.Build.0 = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|x86.ActiveCfg = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|x86.Build.0 = Release|Any CPU
{8BB20362-91A2-4206-944D-634070EAC6F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8BB20362-91A2-4206-944D-634070EAC6F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BB20362-91A2-4206-944D-634070EAC6F3}.Debug|ARM.ActiveCfg = Debug|Any CPU
@ -355,6 +345,70 @@ Global
{5F6EAF9E-C34E-4A06-BCDB-907A6FE163E7}.Release|x64.Build.0 = Release|Any CPU
{5F6EAF9E-C34E-4A06-BCDB-907A6FE163E7}.Release|x86.ActiveCfg = Release|Any CPU
{5F6EAF9E-C34E-4A06-BCDB-907A6FE163E7}.Release|x86.Build.0 = Release|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Debug|ARM.ActiveCfg = Debug|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Debug|ARM.Build.0 = Debug|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Debug|x64.ActiveCfg = Debug|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Debug|x64.Build.0 = Debug|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Debug|x86.ActiveCfg = Debug|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Debug|x86.Build.0 = Debug|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Release|Any CPU.Build.0 = Release|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Release|ARM.ActiveCfg = Release|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Release|ARM.Build.0 = Release|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Release|x64.ActiveCfg = Release|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Release|x64.Build.0 = Release|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Release|x86.ActiveCfg = Release|Any CPU
{3E27D220-E905-421C-8864-E0E0860711EC}.Release|x86.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|ARM.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|ARM.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x64.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x64.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x86.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x86.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|Any CPU.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|ARM.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|ARM.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x64.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x64.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x86.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x86.Build.0 = Release|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Debug|ARM.ActiveCfg = Debug|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Debug|ARM.Build.0 = Debug|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Debug|x64.ActiveCfg = Debug|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Debug|x64.Build.0 = Debug|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Debug|x86.ActiveCfg = Debug|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Debug|x86.Build.0 = Debug|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Release|Any CPU.Build.0 = Release|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Release|ARM.ActiveCfg = Release|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Release|ARM.Build.0 = Release|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Release|x64.ActiveCfg = Release|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Release|x64.Build.0 = Release|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Release|x86.ActiveCfg = Release|Any CPU
{310E7E31-B39A-45D2-8629-8ABB433006DD}.Release|x86.Build.0 = Release|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Debug|Any CPU.Build.0 = Debug|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Debug|ARM.ActiveCfg = Debug|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Debug|ARM.Build.0 = Debug|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Debug|x64.ActiveCfg = Debug|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Debug|x64.Build.0 = Debug|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Debug|x86.ActiveCfg = Debug|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Debug|x86.Build.0 = Debug|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Release|Any CPU.ActiveCfg = Release|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Release|Any CPU.Build.0 = Release|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Release|ARM.ActiveCfg = Release|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Release|ARM.Build.0 = Release|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Release|x64.ActiveCfg = Release|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Release|x64.Build.0 = Release|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Release|x86.ActiveCfg = Release|Any CPU
{20C289D2-F3ED-40F6-94D0-54FC17C84A62}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Просмотреть файл

@ -1,43 +1,41 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2010
# Visual Studio Version 16
VisualStudioVersion = 16.0.29118.114
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Forms.UWP", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.UWP\SkiaSharp.Views.Forms.UWP.csproj", "{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.UWP", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.UWP\SkiaSharp.Views.Forms.UWP.csproj", "{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Forms.Android", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Android\SkiaSharp.Views.Forms.Android.csproj", "{2F94F024-1841-47E8-B521-74AA4E3EBA54}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.Android", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Android\SkiaSharp.Views.Forms.Android.csproj", "{2F94F024-1841-47E8-B521-74AA4E3EBA54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Forms.iOS", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.iOS\SkiaSharp.Views.Forms.iOS.csproj", "{4AC36D63-BF11-445F-81EE-107C0CEF4FC9}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.iOS", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.iOS\SkiaSharp.Views.Forms.iOS.csproj", "{4AC36D63-BF11-445F-81EE-107C0CEF4FC9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.iOS", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.iOS\SkiaSharp.Views.iOS.csproj", "{74C78108-9199-4A7A-928C-FC4DC57D0AE4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.iOS", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.iOS\SkiaSharp.Views.iOS.csproj", "{74C78108-9199-4A7A-928C-FC4DC57D0AE4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Android", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Android\SkiaSharp.Views.Android.csproj", "{926C8D29-E047-4F4E-8B35-852E47BFA9F5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Android", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Android\SkiaSharp.Views.Android.csproj", "{926C8D29-E047-4F4E-8B35-852E47BFA9F5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Mac", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Mac\SkiaSharp.Views.Mac.csproj", "{809A15DC-E675-4A24-83FA-DF13160F7E4C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Mac", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Mac\SkiaSharp.Views.Mac.csproj", "{809A15DC-E675-4A24-83FA-DF13160F7E4C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Desktop", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Desktop\SkiaSharp.Views.Desktop.csproj", "{E5A90865-C185-45AD-88D1-6DA7D6004B03}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.UWP", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.UWP\SkiaSharp.Views.UWP.csproj", "{8BB20362-91A2-4206-944D-634070EAC6F3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.UWP", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.UWP\SkiaSharp.Views.UWP.csproj", "{8BB20362-91A2-4206-944D-634070EAC6F3}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Android", "..\..\..\binding\SkiaSharp.Android\SkiaSharp.Android.csproj", "{C737DC80-5B71-4B26-A2DC-DA30421788B0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Android", "..\..\..\binding\SkiaSharp.Android\SkiaSharp.Android.csproj", "{C737DC80-5B71-4B26-A2DC-DA30421788B0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.iOS", "..\..\..\binding\SkiaSharp.iOS\SkiaSharp.iOS.csproj", "{6A678CFB-21A7-4E81-8909-FD72ABBFD408}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.iOS", "..\..\..\binding\SkiaSharp.iOS\SkiaSharp.iOS.csproj", "{6A678CFB-21A7-4E81-8909-FD72ABBFD408}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.OSX", "..\..\..\binding\SkiaSharp.OSX\SkiaSharp.OSX.csproj", "{4588A759-3853-49B8-8A68-6C7917BE9220}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.OSX", "..\..\..\binding\SkiaSharp.OSX\SkiaSharp.OSX.csproj", "{4588A759-3853-49B8-8A68-6C7917BE9220}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Desktop", "..\..\..\binding\SkiaSharp.Desktop\SkiaSharp.Desktop.csproj", "{EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Desktop", "..\..\..\binding\SkiaSharp.Desktop\SkiaSharp.Desktop.csproj", "{EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{BAB615AA-956E-4079-B260-DD7B1F52EC7D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{BAB615AA-956E-4079-B260-DD7B1F52EC7D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.WPF", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WPF\SkiaSharp.Views.WPF.csproj", "{743CF830-D458-41A9-865A-F85126562015}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.WPF", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WPF\SkiaSharp.Views.WPF.csproj", "{743CF830-D458-41A9-865A-F85126562015}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.NetStandard", "..\..\..\binding\SkiaSharp.NetStandard\SkiaSharp.NetStandard.csproj", "{4E0924F8-D546-4428-9412-4B9411FBA5FF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Forms.Mac", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Mac\SkiaSharp.Views.Forms.Mac.csproj", "{DA5DA4D8-4885-4AF2-96BB-AE803C344AB0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.Mac", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Mac\SkiaSharp.Views.Forms.Mac.csproj", "{DA5DA4D8-4885-4AF2-96BB-AE803C344AB0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.csproj", "{99411A8A-1F8C-469C-AC10-E72F28EDB376}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Gtk", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Gtk\SkiaSharp.Views.Gtk.csproj", "{67A502A4-E8B2-419A-811E-5A634B29C8D7}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Gtk", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Gtk\SkiaSharp.Views.Gtk.csproj", "{67A502A4-E8B2-419A-811E-5A634B29C8D7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharpSample.Android", "SkiaSharpSample.Android\SkiaSharpSample.Android.csproj", "{1A87975A-FCF4-4E76-B42C-520759758F59}"
EndProject
@ -57,6 +55,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Tizen", "..
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.Tizen", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Tizen\SkiaSharp.Views.Forms.Tizen.csproj", "{CB4BF122-0676-4487-A95D-3BA9E3CD6049}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.WPF", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.WPF\SkiaSharp.Views.Forms.WPF.csproj", "{23B57E6F-975E-4CA0-A717-44CD97E00FD8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharpSample.WPF", "SkiaSharpSample.WPF\SkiaSharpSample.WPF.csproj", "{748981C3-5D0F-462A-9F56-A3C6D792ED30}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.WindowsForms", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WindowsForms\SkiaSharp.Views.WindowsForms.csproj", "{409E8A73-82C5-4F7A-9B9D-71A537466DD9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Desktop.Common", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Desktop.Common\SkiaSharp.Views.Desktop.Common.csproj", "{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -217,30 +223,6 @@ Global
{809A15DC-E675-4A24-83FA-DF13160F7E4C}.Release|x64.Build.0 = Release|Any CPU
{809A15DC-E675-4A24-83FA-DF13160F7E4C}.Release|x86.ActiveCfg = Release|Any CPU
{809A15DC-E675-4A24-83FA-DF13160F7E4C}.Release|x86.Build.0 = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|ARM.ActiveCfg = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|ARM.Build.0 = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|iPhone.Build.0 = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|x64.ActiveCfg = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|x64.Build.0 = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|x86.ActiveCfg = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|x86.Build.0 = Debug|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|Any CPU.Build.0 = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|ARM.ActiveCfg = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|ARM.Build.0 = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|iPhone.ActiveCfg = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|iPhone.Build.0 = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|x64.ActiveCfg = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|x64.Build.0 = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|x86.ActiveCfg = Release|Any CPU
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|x86.Build.0 = Release|Any CPU
{8BB20362-91A2-4206-944D-634070EAC6F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8BB20362-91A2-4206-944D-634070EAC6F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BB20362-91A2-4206-944D-634070EAC6F3}.Debug|ARM.ActiveCfg = Debug|Any CPU
@ -745,6 +727,102 @@ Global
{CB4BF122-0676-4487-A95D-3BA9E3CD6049}.Release|x64.Build.0 = Release|Any CPU
{CB4BF122-0676-4487-A95D-3BA9E3CD6049}.Release|x86.ActiveCfg = Release|Any CPU
{CB4BF122-0676-4487-A95D-3BA9E3CD6049}.Release|x86.Build.0 = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|ARM.ActiveCfg = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|ARM.Build.0 = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|iPhone.Build.0 = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|x64.ActiveCfg = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|x64.Build.0 = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|x86.ActiveCfg = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Debug|x86.Build.0 = Debug|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|Any CPU.Build.0 = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|ARM.ActiveCfg = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|ARM.Build.0 = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|iPhone.ActiveCfg = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|iPhone.Build.0 = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|x64.ActiveCfg = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|x64.Build.0 = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|x86.ActiveCfg = Release|Any CPU
{23B57E6F-975E-4CA0-A717-44CD97E00FD8}.Release|x86.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|ARM.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|ARM.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|iPhone.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x64.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x64.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x86.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x86.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|Any CPU.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|ARM.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|ARM.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|iPhone.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|iPhone.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x64.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x64.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x86.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x86.Build.0 = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|ARM.ActiveCfg = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|ARM.Build.0 = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|iPhone.Build.0 = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|x64.ActiveCfg = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|x64.Build.0 = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|x86.ActiveCfg = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Debug|x86.Build.0 = Debug|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|Any CPU.Build.0 = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|ARM.ActiveCfg = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|ARM.Build.0 = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|iPhone.ActiveCfg = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|iPhone.Build.0 = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|x64.ActiveCfg = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|x64.Build.0 = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|x86.ActiveCfg = Release|Any CPU
{409E8A73-82C5-4F7A-9B9D-71A537466DD9}.Release|x86.Build.0 = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|ARM.Build.0 = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|iPhone.Build.0 = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|x64.ActiveCfg = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|x64.Build.0 = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|x86.ActiveCfg = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Debug|x86.Build.0 = Debug|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|Any CPU.Build.0 = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|ARM.ActiveCfg = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|ARM.Build.0 = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|iPhone.ActiveCfg = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|iPhone.Build.0 = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|x64.ActiveCfg = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|x64.Build.0 = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|x86.ActiveCfg = Release|Any CPU
{8CE3EC12-D82F-4E11-B8BF-02EA8885590F}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Просмотреть файл

@ -8,6 +8,8 @@ namespace SkiaSharpSample
{
public partial class DetailContentsPage : ContentPage
{
private const int TextOverlayPadding = 8;
private SampleBase sample;
//private SKImage lastImage;
private SKPaint textPaint;
@ -127,7 +129,7 @@ namespace SkiaSharpSample
//lastImage = e.Surface.Snapshot();
var view = sender as SKCanvasView;
DrawOverlayText(view, e.Surface.Canvas, view.CanvasSize);
DrawOverlayText(view, e.Surface.Canvas, view.CanvasSize, SampleBackends.Memory);
}
private void OnPaintGLSample(object sender, SKPaintGLSurfaceEventArgs e)
@ -138,10 +140,10 @@ namespace SkiaSharpSample
//lastImage = e.Surface.Snapshot();
var view = sender as SKGLView;
DrawOverlayText(view, e.Surface.Canvas, view.CanvasSize);
DrawOverlayText(view, e.Surface.Canvas, view.CanvasSize, SampleBackends.OpenGL);
}
private void DrawOverlayText(View view, SKCanvas canvas, SKSize canvasSize)
private void DrawOverlayText(View view, SKCanvas canvas, SKSize canvasSize, SampleBackends backend)
{
// make sure no previous transforms still apply
canvas.ResetMatrix();
@ -150,21 +152,25 @@ namespace SkiaSharpSample
var scale = canvasSize.Width / (float)view.Width;
canvas.Scale(scale);
var padding = 8;
var y = (float)view.Height - padding;
var y = (float)view.Height - TextOverlayPadding;
var text = $"Current scaling = {scale:0.0}x";
canvas.DrawText(text, padding, y, textPaint);
canvas.DrawText(text, TextOverlayPadding, y, textPaint);
y -= textPaint.TextSize + padding;
y -= textPaint.TextSize + TextOverlayPadding;
text = "SkiaSharp: " + SamplesManager.SkiaSharpVersion;
canvas.DrawText(text, padding, y, textPaint);
canvas.DrawText(text, TextOverlayPadding, y, textPaint);
y -= textPaint.TextSize + padding;
y -= textPaint.TextSize + TextOverlayPadding;
text = "HarfBuzzSharp: " + SamplesManager.HarfBuzzSharpVersion;
canvas.DrawText(text, padding, y, textPaint);
canvas.DrawText(text, TextOverlayPadding, y, textPaint);
y -= textPaint.TextSize + TextOverlayPadding;
text = "Backend: " + backend;
canvas.DrawText(text, TextOverlayPadding, y, textPaint);
}
private void OnRefreshRequested(object sender, EventArgs e)

Просмотреть файл

@ -4,21 +4,21 @@
x:Class="SkiaSharpSample.DetailsPage"
BarBackgroundColor="#3498DB" BarTextColor="White">
<NavigationPage.ToolbarItems>
<ToolbarItem Name="Configure Backend" Clicked="OnConfigureBackend">
<ToolbarItem.Icon>
<ToolbarItem Name="Backend" Clicked="OnConfigureBackend">
<ToolbarItem.IconImageSource>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="UWP" Value="Assets/configure.png" />
<On Platform="UWP,WPF" Value="Assets/configure.png" />
<On Platform="iOS,Android,Tizen" Value="configure.png" />
</OnPlatform>
</ToolbarItem.Icon>
</ToolbarItem.IconImageSource>
</ToolbarItem>
<ToolbarItem Name="Toggle Sample Slideshow" Clicked="OnPlaySamples">
<ToolbarItem.Icon>
<ToolbarItem Name="Slideshow" Clicked="OnPlaySamples">
<ToolbarItem.IconImageSource>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="UWP" Value="Assets/slideshow.png" />
<On Platform="UWP,WPF" Value="Assets/slideshow.png" />
<On Platform="iOS,Android,Tizen" Value="slideshow.png" />
</OnPlatform>
</ToolbarItem.Icon>
</ToolbarItem.IconImageSource>
</ToolbarItem>
</NavigationPage.ToolbarItems>
</NavigationPage>

Просмотреть файл

@ -18,7 +18,7 @@ namespace SkiaSharpSample
ToolbarItems.Clear();
var item = new ToolbarItem
{
Icon = "more.png"
IconImageSource = "more.png"
};
item.Clicked += OnMore;
ToolbarItems.Add(item);

Просмотреть файл

@ -29,7 +29,7 @@ namespace SkiaSharpSample
{
var hamburger = new ToolbarItem
{
Icon = "hamburger.png",
IconImageSource = "hamburger.png",
Order = ToolbarItemOrder.Secondary
};
hamburger.Clicked += delegate { IsPresented = !IsPresented; };

Просмотреть файл

@ -1,13 +1,13 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2010
# Visual Studio Version 16
VisualStudioVersion = 16.0.29118.114
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Forms.UWP", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.UWP\SkiaSharp.Views.Forms.UWP.csproj", "{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.UWP", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.UWP\SkiaSharp.Views.Forms.UWP.csproj", "{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.UWP", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.UWP\SkiaSharp.Views.UWP.csproj", "{8BB20362-91A2-4206-944D-634070EAC6F3}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.UWP", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.UWP\SkiaSharp.Views.UWP.csproj", "{8BB20362-91A2-4206-944D-634070EAC6F3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{BAB615AA-956E-4079-B260-DD7B1F52EC7D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{BAB615AA-956E-4079-B260-DD7B1F52EC7D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.NetStandard", "..\..\..\binding\SkiaSharp.NetStandard\SkiaSharp.NetStandard.csproj", "{4E0924F8-D546-4428-9412-4B9411FBA5FF}"
EndProject
@ -17,7 +17,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.HarfBuzz", "..\..
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.csproj", "{99411A8A-1F8C-469C-AC10-E72F28EDB376}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HarfBuzzSharp.UWP", "..\..\..\binding\HarfBuzzSharp.UWP\HarfBuzzSharp.UWP.csproj", "{6D1E1F39-EF70-4211-A518-BBBAF02D6FFF}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HarfBuzzSharp.UWP", "..\..\..\binding\HarfBuzzSharp.UWP\HarfBuzzSharp.UWP.csproj", "{6D1E1F39-EF70-4211-A518-BBBAF02D6FFF}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "PlatformShared", "..\PlatformShared\PlatformShared.shproj", "{0CC41AB0-0C4C-4DAA-8F10-A249725EBF5D}"
EndProject
@ -37,10 +37,27 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Android", "..\..\
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HarfBuzzSharp.Android", "..\..\..\binding\HarfBuzzSharp.Android\HarfBuzzSharp.Android.csproj", "{C7A025EB-740B-4C4A-91E4-3DF6248AABAD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF", "WPF\WPF.csproj", "{748981C3-5D0F-462A-9F56-A3C6D792ED30}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HarfBuzzSharp.Desktop", "..\..\..\binding\HarfBuzzSharp.Desktop\HarfBuzzSharp.Desktop.csproj", "{6A23B204-8B69-4632-9568-7A5E0B228B90}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Desktop", "..\..\..\binding\SkiaSharp.Desktop\SkiaSharp.Desktop.csproj", "{2CB94CB0-6694-481C-896B-689E479BD52C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.HarfBuzz.Desktop", "..\..\..\source\SkiaSharp.HarfBuzz\SkiaSharp.HarfBuzz.Desktop\SkiaSharp.HarfBuzz.Desktop.csproj", "{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Desktop.Common", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Desktop.Common\SkiaSharp.Views.Desktop.Common.csproj", "{28299971-B249-427B-ADDB-61B46637F343}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.WPF", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WPF\SkiaSharp.Views.WPF.csproj", "{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.WindowsForms", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WindowsForms\SkiaSharp.Views.WindowsForms.csproj", "{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.WPF", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.WPF\SkiaSharp.Views.Forms.WPF.csproj", "{B24C9E89-0D1A-4210-A554-C37085761919}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
..\PlatformShared\PlatformShared.projitems*{0cc41ab0-0c4c-4daa-8f10-a249725ebf5d}*SharedItemsImports = 13
..\Shared\Shared.projitems*{509b233a-35a0-41ca-a585-0b1a9f79d470}*SharedItemsImports = 13
..\PlatformShared\PlatformShared.projitems*{748981c3-5d0f-462a-9f56-a3c6d792ed30}*SharedItemsImports = 4
..\PlatformShared\PlatformShared.projitems*{99f08db7-a06e-4814-bdd6-bb87dbe278af}*SharedItemsImports = 4
..\PlatformShared\PlatformShared.projitems*{b8a92b38-b7db-450b-8d16-301404e9eadc}*SharedItemsImports = 4
EndGlobalSection
@ -311,6 +328,134 @@ Global
{C7A025EB-740B-4C4A-91E4-3DF6248AABAD}.Release|x64.Build.0 = Release|Any CPU
{C7A025EB-740B-4C4A-91E4-3DF6248AABAD}.Release|x86.ActiveCfg = Release|Any CPU
{C7A025EB-740B-4C4A-91E4-3DF6248AABAD}.Release|x86.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|ARM.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|ARM.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x64.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x64.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x86.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x86.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|Any CPU.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|ARM.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|ARM.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x64.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x64.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x86.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x86.Build.0 = Release|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Debug|ARM.ActiveCfg = Debug|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Debug|ARM.Build.0 = Debug|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Debug|x64.ActiveCfg = Debug|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Debug|x64.Build.0 = Debug|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Debug|x86.ActiveCfg = Debug|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Debug|x86.Build.0 = Debug|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Release|Any CPU.Build.0 = Release|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Release|ARM.ActiveCfg = Release|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Release|ARM.Build.0 = Release|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Release|x64.ActiveCfg = Release|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Release|x64.Build.0 = Release|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Release|x86.ActiveCfg = Release|Any CPU
{6A23B204-8B69-4632-9568-7A5E0B228B90}.Release|x86.Build.0 = Release|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Debug|ARM.ActiveCfg = Debug|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Debug|ARM.Build.0 = Debug|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Debug|x64.ActiveCfg = Debug|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Debug|x64.Build.0 = Debug|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Debug|x86.ActiveCfg = Debug|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Debug|x86.Build.0 = Debug|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Release|Any CPU.Build.0 = Release|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Release|ARM.ActiveCfg = Release|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Release|ARM.Build.0 = Release|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Release|x64.ActiveCfg = Release|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Release|x64.Build.0 = Release|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Release|x86.ActiveCfg = Release|Any CPU
{2CB94CB0-6694-481C-896B-689E479BD52C}.Release|x86.Build.0 = Release|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Debug|ARM.ActiveCfg = Debug|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Debug|ARM.Build.0 = Debug|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Debug|x64.ActiveCfg = Debug|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Debug|x64.Build.0 = Debug|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Debug|x86.ActiveCfg = Debug|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Debug|x86.Build.0 = Debug|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Release|Any CPU.Build.0 = Release|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Release|ARM.ActiveCfg = Release|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Release|ARM.Build.0 = Release|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Release|x64.ActiveCfg = Release|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Release|x64.Build.0 = Release|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Release|x86.ActiveCfg = Release|Any CPU
{FA74C7D4-2B7F-4C60-9E6D-D903F7861878}.Release|x86.Build.0 = Release|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Debug|Any CPU.Build.0 = Debug|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Debug|ARM.ActiveCfg = Debug|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Debug|ARM.Build.0 = Debug|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Debug|x64.ActiveCfg = Debug|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Debug|x64.Build.0 = Debug|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Debug|x86.ActiveCfg = Debug|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Debug|x86.Build.0 = Debug|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Release|Any CPU.ActiveCfg = Release|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Release|Any CPU.Build.0 = Release|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Release|ARM.ActiveCfg = Release|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Release|ARM.Build.0 = Release|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Release|x64.ActiveCfg = Release|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Release|x64.Build.0 = Release|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Release|x86.ActiveCfg = Release|Any CPU
{28299971-B249-427B-ADDB-61B46637F343}.Release|x86.Build.0 = Release|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Debug|ARM.ActiveCfg = Debug|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Debug|ARM.Build.0 = Debug|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Debug|x64.ActiveCfg = Debug|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Debug|x64.Build.0 = Debug|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Debug|x86.ActiveCfg = Debug|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Debug|x86.Build.0 = Debug|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Release|Any CPU.Build.0 = Release|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Release|ARM.ActiveCfg = Release|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Release|ARM.Build.0 = Release|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Release|x64.ActiveCfg = Release|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Release|x64.Build.0 = Release|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Release|x86.ActiveCfg = Release|Any CPU
{C26AFF96-4F0F-4164-9F66-075B9C5CE4EF}.Release|x86.Build.0 = Release|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Debug|ARM.ActiveCfg = Debug|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Debug|ARM.Build.0 = Debug|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Debug|x64.ActiveCfg = Debug|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Debug|x64.Build.0 = Debug|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Debug|x86.ActiveCfg = Debug|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Debug|x86.Build.0 = Debug|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Release|Any CPU.Build.0 = Release|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Release|ARM.ActiveCfg = Release|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Release|ARM.Build.0 = Release|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Release|x64.ActiveCfg = Release|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Release|x64.Build.0 = Release|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Release|x86.ActiveCfg = Release|Any CPU
{32FC2D3B-9789-4039-B26E-B8A62C89A3BA}.Release|x86.Build.0 = Release|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Debug|ARM.Build.0 = Debug|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Debug|x64.ActiveCfg = Debug|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Debug|x64.Build.0 = Debug|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Debug|x86.ActiveCfg = Debug|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Debug|x86.Build.0 = Debug|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Release|Any CPU.Build.0 = Release|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Release|ARM.ActiveCfg = Release|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Release|ARM.Build.0 = Release|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Release|x64.ActiveCfg = Release|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Release|x64.Build.0 = Release|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Release|x86.ActiveCfg = Release|Any CPU
{B24C9E89-0D1A-4210-A554-C37085761919}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Просмотреть файл

@ -1,47 +1,47 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2010
# Visual Studio Version 16
VisualStudioVersion = 16.0.29118.114
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Forms.UWP", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.UWP\SkiaSharp.Views.Forms.UWP.csproj", "{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.UWP", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.UWP\SkiaSharp.Views.Forms.UWP.csproj", "{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Forms.Android", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Android\SkiaSharp.Views.Forms.Android.csproj", "{2F94F024-1841-47E8-B521-74AA4E3EBA54}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.Android", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Android\SkiaSharp.Views.Forms.Android.csproj", "{2F94F024-1841-47E8-B521-74AA4E3EBA54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Forms.iOS", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.iOS\SkiaSharp.Views.Forms.iOS.csproj", "{4AC36D63-BF11-445F-81EE-107C0CEF4FC9}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.iOS", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.iOS\SkiaSharp.Views.Forms.iOS.csproj", "{4AC36D63-BF11-445F-81EE-107C0CEF4FC9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.iOS", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.iOS\SkiaSharp.Views.iOS.csproj", "{74C78108-9199-4A7A-928C-FC4DC57D0AE4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.iOS", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.iOS\SkiaSharp.Views.iOS.csproj", "{74C78108-9199-4A7A-928C-FC4DC57D0AE4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Android", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Android\SkiaSharp.Views.Android.csproj", "{926C8D29-E047-4F4E-8B35-852E47BFA9F5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Android", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Android\SkiaSharp.Views.Android.csproj", "{926C8D29-E047-4F4E-8B35-852E47BFA9F5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Mac", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Mac\SkiaSharp.Views.Mac.csproj", "{809A15DC-E675-4A24-83FA-DF13160F7E4C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Mac", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Mac\SkiaSharp.Views.Mac.csproj", "{809A15DC-E675-4A24-83FA-DF13160F7E4C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.UWP", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.UWP\SkiaSharp.Views.UWP.csproj", "{8BB20362-91A2-4206-944D-634070EAC6F3}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.UWP", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.UWP\SkiaSharp.Views.UWP.csproj", "{8BB20362-91A2-4206-944D-634070EAC6F3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Android", "..\..\..\binding\SkiaSharp.Android\SkiaSharp.Android.csproj", "{C737DC80-5B71-4B26-A2DC-DA30421788B0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Android", "..\..\..\binding\SkiaSharp.Android\SkiaSharp.Android.csproj", "{C737DC80-5B71-4B26-A2DC-DA30421788B0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.iOS", "..\..\..\binding\SkiaSharp.iOS\SkiaSharp.iOS.csproj", "{6A678CFB-21A7-4E81-8909-FD72ABBFD408}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.iOS", "..\..\..\binding\SkiaSharp.iOS\SkiaSharp.iOS.csproj", "{6A678CFB-21A7-4E81-8909-FD72ABBFD408}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.OSX", "..\..\..\binding\SkiaSharp.OSX\SkiaSharp.OSX.csproj", "{4588A759-3853-49B8-8A68-6C7917BE9220}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.OSX", "..\..\..\binding\SkiaSharp.OSX\SkiaSharp.OSX.csproj", "{4588A759-3853-49B8-8A68-6C7917BE9220}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{BAB615AA-956E-4079-B260-DD7B1F52EC7D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{BAB615AA-956E-4079-B260-DD7B1F52EC7D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.NetStandard", "..\..\..\binding\SkiaSharp.NetStandard\SkiaSharp.NetStandard.csproj", "{4E0924F8-D546-4428-9412-4B9411FBA5FF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Forms.Mac", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Mac\SkiaSharp.Views.Forms.Mac.csproj", "{DA5DA4D8-4885-4AF2-96BB-AE803C344AB0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.Mac", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Mac\SkiaSharp.Views.Forms.Mac.csproj", "{DA5DA4D8-4885-4AF2-96BB-AE803C344AB0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HarfBuzzSharp.NetStandard", "..\..\..\binding\HarfBuzzSharp.NetStandard\HarfBuzzSharp.NetStandard.csproj", "{DD3EAFFF-E420-4AC3-925D-501EAE140B49}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.HarfBuzz", "..\..\..\source\SkiaSharp.HarfBuzz\SkiaSharp.HarfBuzz\SkiaSharp.HarfBuzz.csproj", "{233220CC-F0F3-4C44-9736-ED2CFC363FD3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HarfBuzzSharp.OSX", "..\..\..\binding\HarfBuzzSharp.OSX\HarfBuzzSharp.OSX.csproj", "{30952C22-D566-488F-9D7A-2411B027D6CA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HarfBuzzSharp.OSX", "..\..\..\binding\HarfBuzzSharp.OSX\HarfBuzzSharp.OSX.csproj", "{30952C22-D566-488F-9D7A-2411B027D6CA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HarfBuzzSharp.iOS", "..\..\..\binding\HarfBuzzSharp.iOS\HarfBuzzSharp.iOS.csproj", "{E8192110-FCF9-4972-9472-7408BC2CA56B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HarfBuzzSharp.iOS", "..\..\..\binding\HarfBuzzSharp.iOS\HarfBuzzSharp.iOS.csproj", "{E8192110-FCF9-4972-9472-7408BC2CA56B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HarfBuzzSharp.Android", "..\..\..\binding\HarfBuzzSharp.Android\HarfBuzzSharp.Android.csproj", "{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HarfBuzzSharp.Android", "..\..\..\binding\HarfBuzzSharp.Android\HarfBuzzSharp.Android.csproj", "{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.csproj", "{99411A8A-1F8C-469C-AC10-E72F28EDB376}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HarfBuzzSharp.UWP", "..\..\..\binding\HarfBuzzSharp.UWP\HarfBuzzSharp.UWP.csproj", "{6D1E1F39-EF70-4211-A518-BBBAF02D6FFF}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HarfBuzzSharp.UWP", "..\..\..\binding\HarfBuzzSharp.UWP\HarfBuzzSharp.UWP.csproj", "{6D1E1F39-EF70-4211-A518-BBBAF02D6FFF}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "PlatformShared", "..\PlatformShared\PlatformShared.shproj", "{0CC41AB0-0C4C-4DAA-8F10-A249725EBF5D}"
EndProject
@ -67,11 +67,26 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Tizen", "..
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.Tizen", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Tizen\SkiaSharp.Views.Forms.Tizen.csproj", "{64BCF04F-8944-4459-B7C7-63D4024DBE53}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF", "WPF\WPF.csproj", "{748981C3-5D0F-462A-9F56-A3C6D792ED30}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Desktop.Common", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Desktop.Common\SkiaSharp.Views.Desktop.Common.csproj", "{562EE252-1965-4382-BFBF-81495D7659DE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.WindowsForms", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WindowsForms\SkiaSharp.Views.WindowsForms.csproj", "{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.WPF", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WPF\SkiaSharp.Views.WPF.csproj", "{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.WPF", "..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.WPF\SkiaSharp.Views.Forms.WPF.csproj", "{88149207-012F-4804-B5BF-1247F77639DC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Desktop", "..\..\..\binding\SkiaSharp.Desktop\SkiaSharp.Desktop.csproj", "{973064C1-6515-4916-8F17-6E323D029FD2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HarfBuzzSharp.Desktop", "..\..\..\binding\HarfBuzzSharp.Desktop\HarfBuzzSharp.Desktop.csproj", "{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
..\PlatformShared\PlatformShared.projitems*{05a70f82-973a-4402-adb9-2684d5e9f0c8}*SharedItemsImports = 4
..\PlatformShared\PlatformShared.projitems*{0cc41ab0-0c4c-4daa-8f10-a249725ebf5d}*SharedItemsImports = 13
..\Shared\Shared.projitems*{509b233a-35a0-41ca-a585-0b1a9f79d470}*SharedItemsImports = 13
..\PlatformShared\PlatformShared.projitems*{748981c3-5d0f-462a-9f56-a3c6d792ed30}*SharedItemsImports = 4
..\PlatformShared\PlatformShared.projitems*{91f5c72a-74d7-4c3f-8761-f692d4300660}*SharedItemsImports = 4
..\PlatformShared\PlatformShared.projitems*{99f08db7-a06e-4814-bdd6-bb87dbe278af}*SharedItemsImports = 4
..\PlatformShared\PlatformShared.projitems*{b8a92b38-b7db-450b-8d16-301404e9eadc}*SharedItemsImports = 4
@ -835,6 +850,174 @@ Global
{64BCF04F-8944-4459-B7C7-63D4024DBE53}.Release|x64.Build.0 = Release|Any CPU
{64BCF04F-8944-4459-B7C7-63D4024DBE53}.Release|x86.ActiveCfg = Release|Any CPU
{64BCF04F-8944-4459-B7C7-63D4024DBE53}.Release|x86.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|ARM.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|ARM.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|iPhone.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x64.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x64.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x86.ActiveCfg = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Debug|x86.Build.0 = Debug|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|Any CPU.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|ARM.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|ARM.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|iPhone.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|iPhone.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x64.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x64.Build.0 = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x86.ActiveCfg = Release|Any CPU
{748981C3-5D0F-462A-9F56-A3C6D792ED30}.Release|x86.Build.0 = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|ARM.ActiveCfg = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|ARM.Build.0 = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|iPhone.Build.0 = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|x64.ActiveCfg = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|x64.Build.0 = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|x86.ActiveCfg = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Debug|x86.Build.0 = Debug|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|Any CPU.Build.0 = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|ARM.ActiveCfg = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|ARM.Build.0 = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|iPhone.ActiveCfg = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|iPhone.Build.0 = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|x64.ActiveCfg = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|x64.Build.0 = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|x86.ActiveCfg = Release|Any CPU
{562EE252-1965-4382-BFBF-81495D7659DE}.Release|x86.Build.0 = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|ARM.ActiveCfg = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|ARM.Build.0 = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|iPhone.Build.0 = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|x64.ActiveCfg = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|x64.Build.0 = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|x86.ActiveCfg = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Debug|x86.Build.0 = Debug|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|Any CPU.Build.0 = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|ARM.ActiveCfg = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|ARM.Build.0 = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|iPhone.ActiveCfg = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|iPhone.Build.0 = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|x64.ActiveCfg = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|x64.Build.0 = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|x86.ActiveCfg = Release|Any CPU
{CF7B2C51-1F81-4A39-A66B-5904136BE2E4}.Release|x86.Build.0 = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|ARM.ActiveCfg = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|ARM.Build.0 = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|iPhone.Build.0 = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|x64.ActiveCfg = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|x64.Build.0 = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|x86.ActiveCfg = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Debug|x86.Build.0 = Debug|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|Any CPU.Build.0 = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|ARM.ActiveCfg = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|ARM.Build.0 = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|iPhone.ActiveCfg = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|iPhone.Build.0 = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|x64.ActiveCfg = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|x64.Build.0 = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|x86.ActiveCfg = Release|Any CPU
{F56713CD-98D1-4DA7-AB8E-9A14A8BC8C95}.Release|x86.Build.0 = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|ARM.ActiveCfg = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|ARM.Build.0 = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|iPhone.Build.0 = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|x64.ActiveCfg = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|x64.Build.0 = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|x86.ActiveCfg = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Debug|x86.Build.0 = Debug|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|Any CPU.Build.0 = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|ARM.ActiveCfg = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|ARM.Build.0 = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|iPhone.ActiveCfg = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|iPhone.Build.0 = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|x64.ActiveCfg = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|x64.Build.0 = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|x86.ActiveCfg = Release|Any CPU
{88149207-012F-4804-B5BF-1247F77639DC}.Release|x86.Build.0 = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|ARM.ActiveCfg = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|ARM.Build.0 = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|iPhone.Build.0 = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|x64.ActiveCfg = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|x64.Build.0 = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|x86.ActiveCfg = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Debug|x86.Build.0 = Debug|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|Any CPU.Build.0 = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|ARM.ActiveCfg = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|ARM.Build.0 = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|iPhone.ActiveCfg = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|iPhone.Build.0 = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|x64.ActiveCfg = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|x64.Build.0 = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|x86.ActiveCfg = Release|Any CPU
{973064C1-6515-4916-8F17-6E323D029FD2}.Release|x86.Build.0 = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|ARM.Build.0 = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|iPhone.Build.0 = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|x64.ActiveCfg = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|x64.Build.0 = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|x86.ActiveCfg = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Debug|x86.Build.0 = Debug|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|Any CPU.Build.0 = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|ARM.ActiveCfg = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|ARM.Build.0 = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|iPhone.ActiveCfg = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|iPhone.Build.0 = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|x64.ActiveCfg = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|x64.Build.0 = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|x86.ActiveCfg = Release|Any CPU
{B650BA9B-8EBF-4B2D-BA6A-C26A675A6760}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Просмотреть файл

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>

Просмотреть файл

@ -0,0 +1,9 @@
<Application x:Class="SkiaSharpSample.Platform.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SkiaSharpSample.Platform"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>

Просмотреть файл

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace SkiaSharpSample.Platform
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}

Двоичные данные
samples/Gallery/Xamarin.Forms/WPF/Assets/configure.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.4 KiB

Двоичные данные
samples/Gallery/Xamarin.Forms/WPF/Assets/more.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.0 KiB

Двоичные данные
samples/Gallery/Xamarin.Forms/WPF/Assets/slideshow.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.2 KiB

Просмотреть файл

@ -0,0 +1,13 @@
<forms:FormsApplicationPage x:Class="SkiaSharpSample.Platform.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:forms="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF"
xmlns:local="clr-namespace:SkiaSharpSample.Platform"
mc:Ignorable="d"
Title="SkiaSharpSample.Platform" Height="600" Width="800">
<Grid>
</Grid>
</forms:FormsApplicationPage>

Просмотреть файл

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Xamarin.Forms;
using Xamarin.Forms.Platform.WPF;
namespace SkiaSharpSample.Platform
{
public partial class MainWindow : FormsApplicationPage
{
public MainWindow()
{
SamplesInitializer.Init();
InitializeComponent();
Forms.Init();
LoadApplication(new SkiaSharpSample.App());
}
}
}

Просмотреть файл

@ -0,0 +1,55 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SkiaSharpSample.Platform")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SkiaSharpSample.Platform")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
//In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

71
samples/Gallery/Xamarin.Forms/WPF/Properties/Resources.Designer.cs сгенерированный Normal file
Просмотреть файл

@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace SkiaSharpSample.Platform.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SkiaSharpSample.Platform.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

Просмотреть файл

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

30
samples/Gallery/Xamarin.Forms/WPF/Properties/Settings.Designer.cs сгенерированный Normal file
Просмотреть файл

@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace SkiaSharpSample.Platform.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

Просмотреть файл

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Просмотреть файл

@ -0,0 +1,147 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" 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)' == '' ">AnyCPU</Platform>
<ProjectGuid>{748981C3-5D0F-462A-9F56-A3C6D792ED30}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>SkiaSharpSample.Platform</RootNamespace>
<AssemblyName>SkiaSharpSample.Platform</AssemblyName>
<TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;__DESKTOP__;__WPF__</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;__DESKTOP__;__WPF__</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="System.Windows.Forms" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="WindowsFormsIntegration" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Forms.Platform.WPF" Version="4.0.0.540366" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\binding\HarfBuzzSharp.Desktop\HarfBuzzSharp.Desktop.csproj">
<Project>{eb1bbdcc-fb07-40d5-8b9e-0079e2c2f2df}</Project>
<Name>SkiaSharp.Desktop</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\source\SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.WPF\SkiaSharp.Views.Forms.WPF.csproj">
<Project>{27059729-96a9-4313-b2a4-b10798450519}</Project>
<Name>SkiaSharp.Views.Forms.WPF</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Desktop.Common\SkiaSharp.Views.Desktop.Common.csproj">
<Project>{562ee252-1965-4382-bfbf-81495d7659de}</Project>
<Name>SkiaSharp.Views.Desktop.Common</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WindowsForms\SkiaSharp.Views.WindowsForms.csproj">
<Project>{cf7b2c51-1f81-4a39-a66b-5904136be2e4}</Project>
<Name>SkiaSharp.Views.WindowsForms</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.WPF\SkiaSharp.Views.WPF.csproj">
<Project>{f56713cd-98d1-4da7-ab8e-9a14a8bc8c95}</Project>
<Name>SkiaSharp.Views.WPF</Name>
</ProjectReference>
<ProjectReference Include="..\Core\Core.csproj">
<Project>{E01FBABA-8DA1-432B-9253-F4ABE13A3A6A}</Project>
<Name>Core</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Assets\configure.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Assets\more.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Assets\slideshow.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\..\Shared\Media\content-font.ttf">
<Link>Media\content-font.ttf</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<Import Project="..\..\PlatformShared\PlatformShared.projitems" Label="Shared" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\..\..\..\output\SkiaSharp\nuget\build\net45\SkiaSharp.targets" Condition="Exists('..\..\..\..\output\SkiaSharp\nuget\build\net45\SkiaSharp.targets')" />
<Import Project="..\..\..\..\output\HarfBuzzSharp\nuget\build\net45\HarfBuzzSharp.targets" Condition="Exists('..\..\..\..\output\HarfBuzzSharp\nuget\build\net45\HarfBuzzSharp.targets')" />
</Project>

Просмотреть файл

@ -36,7 +36,7 @@ Currently there are samples for all the supported platforms, and variations of f
- watchOS
- Windows.Forms
- WPF
- Xamarin.Forms (Android, macOS, Tizen, UWP, iOS)
- Xamarin.Forms (Android, macOS, Tizen, UWP, iOS, WPF)
## Gallery Samples
@ -47,7 +47,7 @@ For more complex samples that demonstrates specific features, there is a nice ga
- UWP
- Windows.Forms
- WPF
- Xamarin.Forms (Android, macOS, Tizen, UWP, iOS)
- Xamarin.Forms (Android, macOS, Tizen, UWP, iOS, WPF)
[samples]: https://github.com/mono/SkiaSharp/releases
[skip]: https://github.com/mono/SkiaSharp/wiki/Building-SkiaSharp#preparation-1

Просмотреть файл

@ -32,7 +32,7 @@ Currently there are samples for all the supported platforms, and variations of f
- watchOS
- Windows.Forms
- WPF
- Xamarin.Forms (Android, macOS, Tizen, UWP, iOS)
- Xamarin.Forms (Android, macOS, Tizen, UWP, iOS, WPF)
## Gallery Samples
@ -43,4 +43,4 @@ For more complex samples that demonstrates specific features, there is a nice ga
- UWP
- Windows.Forms
- WPF
- Xamarin.Forms (Android, macOS, Tizen, UWP, iOS)
- Xamarin.Forms (Android, macOS, Tizen, UWP, iOS, WPF)

Просмотреть файл

@ -44,6 +44,7 @@ stages:
displayName: Build Native Tizen (Windows)
vmImage: $(VM_IMAGE_WINDOWS)
target: externals-tizen
condition: false # TODO: TIZEN INSTALL BUGS
- template: azure-templates-bootstrapper.yml # Build Native UWP (Windows)
parameters:
name: native_uwp_windows
@ -81,7 +82,7 @@ stages:
displayName: Build Native Tizen (macOS)
vmImage: $(VM_IMAGE_MAC)
target: externals-tizen
condition: false
condition: false # TODO: TIZEN INSTALL BUGS
- template: azure-templates-bootstrapper.yml # Build Native tvOS (macOS)
parameters:
name: native_tvos_macos
@ -128,7 +129,8 @@ stages:
target: libs-only
requiredArtifacts:
- native_android_windows
- native_tizen_windows
# - native_tizen_windows
- native_tizen_linux
- native_uwp_windows
- native_win32_windows
- template: azure-templates-bootstrapper.yml # Build Managed (macOS)
@ -176,6 +178,7 @@ stages:
displayName: Package NuGets [No Dependencies]
vmImage: $(VM_IMAGE_WINDOWS)
target: nuget-only
shouldPublish: false
requiredArtifacts:
- managed_nodependencies_linux
- managed_macos
@ -191,22 +194,23 @@ stages:
$nupkgs | Foreach-Object { Write-Host $_.Name }
$nupkgs | ForEach-Object { Remove-Item -Path $_ -Recurse -Force }
displayName: Remove all unrelated files
- task: PublishPipelineArtifact@0
- task: PublishBuildArtifacts@1
displayName: Publish the native-nodependencies artifacts
inputs:
artifactName: native-nodependencies
targetPath: 'output/native'
- task: PublishPipelineArtifact@0
pathToPublish: 'output/native'
- task: PublishBuildArtifacts@1
displayName: Publish the nuget-nodependencies artifacts
inputs:
artifactName: nuget-nodependencies
targetPath: 'output/nugets'
pathToPublish: 'output/nugets'
- template: azure-templates-bootstrapper.yml # Package NuGets
parameters:
name: package_windows
displayName: Package NuGets
vmImage: $(VM_IMAGE_WINDOWS)
target: nuget-only
shouldPublish: false
requiredArtifacts:
- managed_linux
- managed_macos
@ -223,11 +227,11 @@ stages:
inputs:
artifactName: native-default
pathToPublish: 'output/native'
- task: PublishPipelineArtifact@0
- task: PublishBuildArtifacts@1
displayName: Publish the nuget-default artifacts
inputs:
artifactName: nuget-default
targetPath: 'output/nugets'
pathToPublish: 'output/nugets'
- job: package # Combine Packaged NuGets
displayName: Combine Packaged NuGets
dependsOn:
@ -236,16 +240,22 @@ stages:
pool:
vmImage: $(VM_IMAGE_LINUX)
steps:
- task: DownloadPipelineArtifact@0
- task: DownloadBuildArtifacts@0
displayName: Download the nuget-nodependencies artifacts
inputs:
artifactName: nuget-nodependencies
targetPath: 'output/nugets'
- task: DownloadPipelineArtifact@0
downloadPath: 'download-temp'
- task: DownloadBuildArtifacts@0
displayName: Download the nuget-default artifacts
inputs:
artifactName: nuget-default
targetPath: 'output/nugets'
downloadPath: 'download-temp'
- powershell: |
New-Item '.\output\nugets' -Type Directory -Force | Out-Null
Get-ChildItem '.\download-temp\nuget-nodependencies\' | Copy-Item -Destination '.\output\nugets' -Recurse -Force
Get-ChildItem '.\download-temp\nuget-default\' | Copy-Item -Destination '.\output\nugets' -Recurse -Force
Remove-Item '.\download-temp\' -Recurse -Force
displayName: Move the nuget-* artifacts to the output directory
- task: PublishBuildArtifacts@1
displayName: Publish the nuget artifacts
inputs:
@ -253,11 +263,6 @@ stages:
pathToPublish: 'output/nugets'
- bash: ./scripts/validate-linux-nugets.sh
displayName: Validate the Linux NuGet packages
- task: PublishPipelineArtifact@0
displayName: Publish the package artifacts
inputs:
artifactName: package
targetPath: 'output'
- ${{ if eq(variables['System.TeamProject'], 'devdiv') }}:
- stage: signing
@ -372,16 +377,23 @@ stages:
displayName: Build Samples (Windows)
vmImage: $(VM_IMAGE_WINDOWS)
target: samples
shouldPublish: false
requiredArtifacts:
- package
- nuget
preBuildSteps:
- powershell: |
New-Item '.\output\nugets\' -Type Directory -Force | Out-Null
Get-ChildItem '.\output\*.nupkg' | Move-Item -Destination '.\output\nugets\'
displayName: Copy the *.nupkgs into the correct folder for the samples
- template: azure-templates-bootstrapper.yml # Build Samples (macOS)
parameters:
name: samples_macos
displayName: Build Samples (macOS)
vmImage: $(VM_IMAGE_MAC)
target: samples
shouldPublish: false
requiredArtifacts:
- package
- nuget
preBuildSteps:
- task: InstallAppleCertificate@2
inputs:
@ -398,6 +410,10 @@ stages:
- task: InstallAppleProvisioningProfile@1
inputs:
provProfileSecureFile: 'SkiaSharp tvOS Provisioning.mobileprovision'
- powershell: |
New-Item '.\output\nugets\' -Type Directory -Force | Out-Null
Get-ChildItem '.\output\*.nupkg' | Move-Item -Destination '.\output\nugets\'
displayName: Copy the *.nupkgs into the correct folder for the samples
- template: azure-templates-bootstrapper.yml # Build Samples (Linux)
parameters:
name: samples_linux
@ -405,5 +421,17 @@ stages:
vmImage: $(VM_IMAGE_LINUX)
packages: $(MANAGED_LINUX_PACKAGES)
target: samples
shouldPublish: false
requiredArtifacts:
- package
- nuget
preBuildSteps:
- powershell: |
New-Item '.\output\nugets\' -Type Directory -Force | Out-Null
Get-ChildItem '.\output\*.nupkg' | Move-Item -Destination '.\output\nugets\'
displayName: Copy the *.nupkgs into the correct folder for the samples
postBuildSteps:
- task: PublishBuildArtifacts@1
displayName: Publish the samples artifacts
inputs:
artifactName: samples
pathToPublish: 'output'

Просмотреть файл

@ -64,11 +64,16 @@ jobs:
displayName: Switch to the latest Xcode
# download artifacts
- ${{ each dep in parameters.requiredArtifacts }}:
- task: DownloadPipelineArtifact@0
- task: DownloadBuildArtifacts@0
displayName: Download the ${{ dep }} artifacts
inputs:
artifactName: ${{ dep }}
targetPath: 'output'
downloadPath: 'download-temp'
- powershell: |
New-Item '.\output\' -Type Directory -Force | Out-Null
Get-ChildItem '.\download-temp\${{ dep }}\' | Copy-Item -Destination '.\output\' -Recurse -Force
Remove-Item '.\download-temp\${{ dep }}\' -Recurse -Force
displayName: Move the ${{ dep }} artifacts to the output directory
# pre-build steps
- ${{ parameters.preBuildSteps }}
# build
@ -81,9 +86,9 @@ jobs:
# post-build steps
- ${{ parameters.postBuildSteps }}
# publish artifacts
- task: PublishPipelineArtifact@0
- task: PublishBuildArtifacts@1
displayName: Publish the ${{ parameters.name }} artifacts
condition: ${{ parameters.shouldPublish }}
inputs:
artifactName: ${{ parameters.name }}
targetPath: 'output'
pathToPublish: 'output'

Просмотреть файл

@ -41,8 +41,8 @@ jobs:
# post-build steps
- ${{ parameters.postBuildSteps }}
# publish artifacts
- task: PublishPipelineArtifact@0
- task: PublishBuildArtifacts@1
displayName: Publish the ${{ parameters.name }} artifacts
inputs:
artifactName: ${{ parameters.name }}
targetPath: 'output'
pathToPublish: 'output'

Просмотреть файл

@ -1,5 +1,6 @@
Param(
[string] $Version = "r15c"
[string] $Version = "r15c",
[string] $InstallDestination = $null
)
$ErrorActionPreference = 'Stop'
@ -14,7 +15,13 @@ if ($IsMacOS) {
}
$url = "https://dl.google.com/android/repository/android-ndk-${Version}-${platform}.zip"
$ndk = "$HOME/android-ndk"
if ($InstallDestination) {
$ndk = $InstallDestination
}
Write-Host "Install destination is '$ts'..."
$ndkTemp = "$HOME/android-ndk-temp"
$install = "$ndkTemp/android-ndk.zip"

Просмотреть файл

@ -1,3 +1,7 @@
Param(
[string] $InstallDestination = $null
)
$ErrorActionPreference = 'Stop'
if ($IsMacOS) {
@ -9,6 +13,11 @@ if ($IsMacOS) {
}
$jdk = Join-Path "$HOME" "openjdk"
if ($InstallDestination) {
$jdk = $InstallDestination
}
Write-Host "Install destination is '$ts'..."
$jdkTemp = Join-Path "$HOME" "openjdk-temp"
$archive = Join-Path "$jdkTemp" "openjdk.tar.gz"

Просмотреть файл

@ -1,5 +1,6 @@
Param(
[string] $Version = "3.2"
[string] $Version = "3.3",
[string] $InstallDestination = $null
)
$ErrorActionPreference = 'Stop'
@ -15,9 +16,15 @@ if ($IsMacOS) {
$ext = "exe"
}
$ts = Join-Path "$HOME" "tizen-studio"
$tsTemp = Join-Path "$HOME" "tizen-temp"
$url = "http://download.tizen.org/sdk/Installer/tizen-studio_${Version}/web-cli_Tizen_Studio_${Version}_${platform}.${ext}"
$ts = Join-Path "$HOME" "tizen-studio"
if ($InstallDestination) {
$ts = $InstallDestination
}
Write-Host "Install destination is '$ts'..."
$tsTemp = Join-Path "$HOME" "tizen-temp"
$install = Join-Path "$tsTemp" "tizen-install.$ext"
$packages = "MOBILE-4.0,MOBILE-4.0-NativeAppDevelopment"

Просмотреть файл

@ -1,6 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--
Warning codes:
- part of the source build: <none>
- part of SkiaSharp: SK00xx
- part of SkiaSharp.Views: SK0x0x
- part of SkiaSharp.Views.Forms: SKx00x
-->
<PropertyGroup>
<!-- this is important for mono as it defaults to 'false' -->
<SignAssembly>true</SignAssembly>

Просмотреть файл

@ -0,0 +1,51 @@
using System;
namespace SkiaSharp.Views.Forms
{
internal class Registrar
{
internal static void EnsureRegistered(Type type, Type handler)
{
var registered = Xamarin.Forms.Internals.Registrar.Registered;
if (registered.GetHandlerType(type) != null)
return;
registered.Register(type, handler);
}
}
public sealed partial class SKImageImageSource
{
static SKImageImageSource() =>
Registrar.EnsureRegistered(typeof(SKImageImageSource), typeof(SKImageSourceHandler));
}
public sealed partial class SKBitmapImageSource
{
static SKBitmapImageSource() =>
Registrar.EnsureRegistered(typeof(SKBitmapImageSource), typeof(SKImageSourceHandler));
}
public sealed partial class SKPixmapImageSource
{
static SKPixmapImageSource() =>
Registrar.EnsureRegistered(typeof(SKPixmapImageSource), typeof(SKImageSourceHandler));
}
public sealed partial class SKPictureImageSource
{
static SKPictureImageSource() =>
Registrar.EnsureRegistered(typeof(SKPictureImageSource), typeof(SKImageSourceHandler));
}
public partial class SKCanvasView
{
static SKCanvasView() =>
Registrar.EnsureRegistered(typeof(SKCanvasView), typeof(SKCanvasViewRenderer));
}
public partial class SKGLView
{
static SKGLView() =>
Registrar.EnsureRegistered(typeof(SKGLView), typeof(SKGLViewRenderer));
}
}

Просмотреть файл

@ -26,6 +26,11 @@ using Xamarin.Forms.Platform.Tizen;
using SKNativeView = SkiaSharp.Views.Tizen.SKCanvasView;
using SKNativePaintSurfaceEventArgs = SkiaSharp.Views.Tizen.SKPaintSurfaceEventArgs;
using TForms = Xamarin.Forms.Platform.Tizen.Forms;
#elif __WPF__
using System.Windows;
using Xamarin.Forms.Platform.WPF;
using SKNativeView = SkiaSharp.Views.WPF.SKElement;
using SKNativePaintSurfaceEventArgs = SkiaSharp.Views.Desktop.SKPaintSurfaceEventArgs;
#endif
namespace SkiaSharp.Views.Forms
@ -182,7 +187,7 @@ namespace SkiaSharp.Views.Forms
#elif __TIZEN__
x = Tizen.ScalingInfo.FromPixel(x);
y = Tizen.ScalingInfo.FromPixel(y);
#elif __IOS__ || __MACOS__ || WINDOWS_UWP
#elif __IOS__ || __MACOS__ || WINDOWS_UWP || __WPF__
// Tizen and Android are the reverse of the other platforms
#else
#error Missing platform logic
@ -201,6 +206,10 @@ namespace SkiaSharp.Views.Forms
#elif WINDOWS_UWP
x = x * Control.Dpi;
y = y * Control.Dpi;
#elif __WPF__
var m = PresentationSource.FromVisual(Control).CompositionTarget.TransformToDevice;
x = x * m.M11;
y = y * m.M22;
#else
#error Missing platform logic
#endif
@ -224,6 +233,8 @@ namespace SkiaSharp.Views.Forms
Control.SetNeedsDisplay();
#elif __MACOS__
Control.NeedsDisplay = true;
#elif __WPF__
Control.InvalidateVisual();
#else
Control.Invalidate();
#endif

Просмотреть файл

@ -26,6 +26,11 @@ using Xamarin.Forms.Platform.Tizen;
using SKNativeView = SkiaSharp.Views.Tizen.SKGLSurfaceView;
using SKNativePaintGLSurfaceEventArgs = SkiaSharp.Views.Tizen.SKPaintGLSurfaceEventArgs;
using TForms = Xamarin.Forms.Platform.Tizen.Forms;
#elif __WPF__
using System.Windows;
using Xamarin.Forms.Platform.WPF;
using SKNativeView = SkiaSharp.Views.Forms.SKHostedGLControl;
using SKNativePaintGLSurfaceEventArgs = SkiaSharp.Views.Desktop.SKPaintGLSurfaceEventArgs;
#endif
namespace SkiaSharp.Views.Forms
@ -189,6 +194,8 @@ namespace SkiaSharp.Views.Forms
#elif WINDOWS_UWP
x = x * Control.ContentsScale;
y = y * Control.ContentsScale;
#elif __WPF__
// WPF does not scale for GL as it is using Windows.Forms
#else
#error Missing platform logic
#endif

Просмотреть файл

@ -4,7 +4,7 @@ using Xamarin.Forms;
namespace SkiaSharp.Views.Forms
{
[RenderWith(typeof(SKCanvasViewRenderer))]
public class SKCanvasView : View, ISKCanvasViewController
public partial class SKCanvasView : View, ISKCanvasViewController
{
public static readonly BindableProperty IgnorePixelScalingProperty =
BindableProperty.Create(nameof(IgnorePixelScaling), typeof(bool), typeof(SKCanvasView), false);

Просмотреть файл

@ -4,7 +4,7 @@ using Xamarin.Forms;
namespace SkiaSharp.Views.Forms
{
[RenderWith(typeof(SKGLViewRenderer))]
public class SKGLView : View, ISKGLViewController
public partial class SKGLView : View, ISKGLViewController
{
public static readonly BindableProperty HasRenderLoopProperty =
BindableProperty.Create(nameof(HasRenderLoop), typeof(bool), typeof(SKGLView), false);

Просмотреть файл

@ -3,7 +3,7 @@ using Xamarin.Forms;
namespace SkiaSharp.Views.Forms
{
public sealed class SKImageImageSource : ImageSource
public sealed partial class SKImageImageSource : ImageSource
{
public static readonly BindableProperty ImageProperty = BindableProperty.Create(nameof(Image), typeof(SKImage), typeof(SKImageImageSource), default(SKImage));
@ -39,7 +39,7 @@ namespace SkiaSharp.Views.Forms
}
}
public sealed class SKBitmapImageSource : ImageSource
public sealed partial class SKBitmapImageSource : ImageSource
{
public static readonly BindableProperty BitmapProperty = BindableProperty.Create(nameof(Bitmap), typeof(SKBitmap), typeof(SKBitmapImageSource), default(SKBitmap));
@ -75,7 +75,7 @@ namespace SkiaSharp.Views.Forms
}
}
public sealed class SKPixmapImageSource : ImageSource
public sealed partial class SKPixmapImageSource : ImageSource
{
public static readonly BindableProperty PixmapProperty = BindableProperty.Create(nameof(Pixmap), typeof(SKPixmap), typeof(SKPixmapImageSource), default(SKPixmap));
@ -111,7 +111,7 @@ namespace SkiaSharp.Views.Forms
}
}
public sealed class SKPictureImageSource : ImageSource
public sealed partial class SKPictureImageSource : ImageSource
{
public static readonly BindableProperty PictureProperty = BindableProperty.Create(nameof(Picture), typeof(SKPicture), typeof(SKPictureImageSource), default(SKPicture));

Просмотреть файл

@ -13,7 +13,7 @@ using NativeImage = Xamarin.Forms.Platform.Tizen.Native.Image;
namespace SkiaSharp.Views.Forms
{
public abstract class SKImageSourceHandler : IImageSourceHandler
public sealed class SKImageSourceHandler : IImageSourceHandler
{
private StreamImageSourceHandler handler = new StreamImageSourceHandler();

Просмотреть файл

@ -0,0 +1,14 @@
using Xamarin.Forms.Platform.WPF;
using Xamarin.Forms;
using SKFormsView = SkiaSharp.Views.Forms.SKCanvasView;
using SKNativeView = SkiaSharp.Views.WPF.SKElement;
[assembly: ExportRenderer(typeof(SKFormsView), typeof(SkiaSharp.Views.Forms.SKCanvasViewRenderer))]
namespace SkiaSharp.Views.Forms
{
public class SKCanvasViewRenderer : SKCanvasViewRendererBase<SKFormsView, SKNativeView>, IRegisterable
{
}
}

Просмотреть файл

@ -0,0 +1,69 @@
using System;
using System.Windows.Threading;
using Xamarin.Forms.Platform.WPF;
using SKFormsView = SkiaSharp.Views.Forms.SKGLView;
using SKNativeView = SkiaSharp.Views.Forms.SKHostedGLControl;
[assembly: ExportRenderer(typeof(SKFormsView), typeof(SkiaSharp.Views.Forms.SKGLViewRenderer))]
namespace SkiaSharp.Views.Forms
{
public class SKGLViewRenderer : SKGLViewRendererBase<SKFormsView, SKNativeView>
{
private DispatcherTimer renderTimer;
protected override void SetupRenderLoop(bool oneShot)
{
// only start if we haven't already
if (renderTimer != null)
return;
// bail out if we are requesting something that the view doesn't want to
if (!oneShot && !Element.HasRenderLoop)
return;
// if this is a one shot request, don't bother with the timer
if (oneShot)
{
Control.Invalidate();
return;
}
// create the render loop at 60 fps
renderTimer = new DispatcherTimer(DispatcherPriority.Render);
renderTimer.Tick += OnRenderTick;
renderTimer.Interval = TimeSpan.FromMilliseconds(16);
renderTimer.Start();
}
protected override void Dispose(bool disposing)
{
// stop the render loop
if (renderTimer != null)
{
renderTimer.Tick -= OnRenderTick;
renderTimer = null;
}
base.Dispose(disposing);
}
private void OnRenderTick(object sender, EventArgs e)
{
var nativeView = Control;
var formsView = Element;
// redraw the view
nativeView?.Invalidate();
// stop the render loop if this was a one-shot, or the views are disposed
if (nativeView == null || formsView == null || !formsView.HasRenderLoop)
{
renderTimer.Tick -= OnRenderTick;
renderTimer.Stop();
renderTimer = null;
}
}
}
}

Просмотреть файл

@ -0,0 +1,57 @@
using System;
using System.Windows.Forms;
using System.Windows.Forms.Integration;
using OpenTK.Graphics;
using SkiaSharp.Views.Desktop;
using Xamarin.Forms.Platform.WPF;
using SKFormsView = SkiaSharp.Views.Forms.SKGLView;
[assembly: ExportRenderer(typeof(SKFormsView), typeof(SkiaSharp.Views.Forms.SKGLViewRenderer))]
namespace SkiaSharp.Views.Forms
{
public class SKHostedGLControl : WindowsFormsHost
{
public SKHostedGLControl()
{
Initialize(new SKGLControl(new GraphicsMode(new ColorFormat(8, 8, 8, 8), 24, 8)));
}
public SKHostedGLControl(GraphicsMode mode)
{
Initialize(new SKGLControl(mode));
}
public SKHostedGLControl(GraphicsMode mode, int major, int minor, GraphicsContextFlags flags)
{
Initialize(new SKGLControl(mode, major, minor, flags));
}
public void Initialize(SKGLControl control)
{
GLControl = control;
GLControl.MakeCurrent();
GLControl.Dock = DockStyle.Fill;
Child = GLControl;
}
public SKGLControl GLControl { get; private set; }
public GRContext GRContext => GLControl.GRContext;
public SKSize CanvasSize => GLControl.CanvasSize;
public event EventHandler<Desktop.SKPaintGLSurfaceEventArgs> PaintSurface
{
add => GLControl.PaintSurface += value;
remove => GLControl.PaintSurface -= value;
}
public void Invalidate()
{
GLControl.Invalidate();
}
}
}

Просмотреть файл

@ -0,0 +1,32 @@
using System.Threading;
using System.Threading.Tasks;
using SkiaSharp.Views.WPF;
using Xamarin.Forms;
using Xamarin.Forms.Platform.WPF;
[assembly: ExportImageSourceHandler(typeof(SkiaSharp.Views.Forms.SKImageImageSource), typeof(SkiaSharp.Views.Forms.SKImageSourceHandler))]
[assembly: ExportImageSourceHandler(typeof(SkiaSharp.Views.Forms.SKBitmapImageSource), typeof(SkiaSharp.Views.Forms.SKImageSourceHandler))]
[assembly: ExportImageSourceHandler(typeof(SkiaSharp.Views.Forms.SKPixmapImageSource), typeof(SkiaSharp.Views.Forms.SKImageSourceHandler))]
[assembly: ExportImageSourceHandler(typeof(SkiaSharp.Views.Forms.SKPictureImageSource), typeof(SkiaSharp.Views.Forms.SKImageSourceHandler))]
namespace SkiaSharp.Views.Forms
{
public sealed class SKImageSourceHandler : IImageSourceHandler
{
public Task<System.Windows.Media.ImageSource> LoadImageAsync(ImageSource imagesource, CancellationToken cancelationToken = default(CancellationToken))
{
System.Windows.Media.ImageSource image = null;
if (imagesource is SKImageImageSource imageImageSource)
image = imageImageSource.Image?.ToWriteableBitmap();
else if (imagesource is SKBitmapImageSource bitmapImageSource)
image = bitmapImageSource.Bitmap?.ToWriteableBitmap();
else if (imagesource is SKPixmapImageSource pixmapImageSource)
image = pixmapImageSource.Pixmap?.ToWriteableBitmap();
else if (imagesource is SKPictureImageSource pictureImageSource)
image = pictureImageSource.Picture?.ToWriteableBitmap(pictureImageSource.Dimensions);
return Task.FromResult(image);
}
}
}

Просмотреть файл

@ -0,0 +1,37 @@
using System;
using System.Windows;
using System.Windows.Forms.Integration;
namespace SkiaSharp.Views.Forms
{
internal class SKTouchHandler
{
private SKTouchHandlerElement element;
private SKTouchHandlerWinForms winforms;
public SKTouchHandler(Action<SKTouchEventArgs> onTouchAction, Func<double, double, SKPoint> scalePixels)
{
element = new SKTouchHandlerElement(onTouchAction, scalePixels);
winforms = new SKTouchHandlerWinForms(onTouchAction, scalePixels);
}
public void SetEnabled(FrameworkElement view, bool enableTouchEvents)
{
if (view is WindowsFormsHost wfh)
winforms.SetEnabled(wfh.Child, enableTouchEvents);
else
element.SetEnabled(view, enableTouchEvents);
}
public void Detach(FrameworkElement view)
{
if (view is WindowsFormsHost wfh)
winforms.Detach(wfh.Child);
else
element.Detach(view);
element = null;
winforms = null;
}
}
}

Просмотреть файл

@ -0,0 +1,268 @@
using System;
using System.Linq;
using System.Windows;
using System.Windows.Input;
namespace SkiaSharp.Views.Forms
{
internal class SKTouchHandlerElement
{
private Action<SKTouchEventArgs> onTouchAction;
private Func<double, double, SKPoint> scalePixels;
public SKTouchHandlerElement(Action<SKTouchEventArgs> onTouchAction, Func<double, double, SKPoint> scalePixels)
{
this.onTouchAction = onTouchAction;
this.scalePixels = scalePixels;
}
public void SetEnabled(FrameworkElement view, bool enableTouchEvents)
{
// TODO: touch and stylus
if (view != null)
{
// mouse
view.MouseEnter -= OnMouseEntered;
view.MouseLeave -= OnMouseExited;
view.MouseDown -= OnMousePressed;
view.MouseMove -= OnMouseMoved;
view.MouseUp -= OnMouseReleased;
if (enableTouchEvents)
{
// mouse
view.MouseEnter += OnMouseEntered;
view.MouseLeave += OnMouseExited;
view.MouseDown += OnMousePressed;
view.MouseMove += OnMouseMoved;
view.MouseUp += OnMouseReleased;
}
}
}
public void Detach(FrameworkElement view)
{
// clean the view
SetEnabled(view, false);
// remove references
onTouchAction = null;
scalePixels = null;
}
// mouse events
private void OnMouseEntered(object sender, MouseEventArgs e)
{
e.Handled = CommonHandler(sender, SKTouchAction.Entered, e);
}
private void OnMouseExited(object sender, MouseEventArgs e)
{
e.Handled = CommonHandler(sender, SKTouchAction.Exited, e);
}
private void OnMousePressed(object sender, MouseEventArgs e)
{
e.Handled = CommonHandler(sender, SKTouchAction.Pressed, e);
if (e.Handled)
{
var view = sender as FrameworkElement;
view.CaptureMouse();
}
}
private void OnMouseMoved(object sender, MouseEventArgs e)
{
e.Handled = CommonHandler(sender, SKTouchAction.Moved, e);
}
private void OnMouseReleased(object sender, MouseEventArgs e)
{
e.Handled = CommonHandler(sender, SKTouchAction.Released, e);
if (e.Handled)
{
var view = sender as FrameworkElement;
view.ReleaseMouseCapture();
}
}
// processing
private bool CommonHandler(object sender, SKTouchAction touchActionType, InputEventArgs evt)
{
if (onTouchAction == null || scalePixels == null)
return false;
var view = sender as FrameworkElement;
var id = GetId(evt);
var action = GetTouchAction(touchActionType, view, evt);
var mouse = GetMouseButton(evt);
var device = GetTouchDevice(evt);
var windowsPoint = GetPosition(evt, view);
var skPoint = scalePixels(windowsPoint.X, windowsPoint.Y);
var inContact = GetContact(evt);
var args = new SKTouchEventArgs(id, action, mouse, device, skPoint, inContact);
onTouchAction(args);
return args.Handled;
}
private static bool GetContact(InputEventArgs evt)
{
var inContact = false;
switch (evt)
{
case MouseEventArgs mouseEvent:
inContact =
mouseEvent.LeftButton == MouseButtonState.Pressed ||
mouseEvent.MiddleButton == MouseButtonState.Pressed ||
mouseEvent.RightButton == MouseButtonState.Pressed;
break;
case TouchEventArgs touchEvent:
inContact = true;
break;
case StylusEventArgs stylusEvent:
inContact = !stylusEvent.InAir;
break;
}
return inContact;
}
private SKTouchAction GetTouchAction(SKTouchAction touchActionType, FrameworkElement view, InputEventArgs evt)
{
if (evt is TouchEventArgs touchEvent)
{
var action = touchEvent.GetTouchPoint(view).Action;
switch (action)
{
case TouchAction.Down:
touchActionType = SKTouchAction.Pressed;
break;
case TouchAction.Move:
touchActionType = SKTouchAction.Moved;
break;
case TouchAction.Up:
touchActionType = SKTouchAction.Released;
break;
}
}
return touchActionType;
}
private Point GetPosition(InputEventArgs evt, FrameworkElement view)
{
var point = new Point();
switch (evt)
{
case MouseEventArgs mouseEvent:
point = mouseEvent.GetPosition(view);
break;
case TouchEventArgs touchEvent:
point = touchEvent.GetTouchPoint(view).Position;
break;
case StylusEventArgs stylusEvent:
point = stylusEvent.GetPosition(view);
break;
}
return point;
}
private long GetId(InputEventArgs evt)
{
long id = -1;
switch (evt)
{
case MouseEventArgs mouseEvent:
id = 1;
break;
case TouchEventArgs touchEvent:
id = touchEvent.TouchDevice.Id;
break;
case StylusEventArgs stylusEvent:
id = stylusEvent.StylusDevice.Id;
break;
}
return id;
}
private static SKTouchDeviceType GetTouchDevice(InputEventArgs evt)
{
var device = SKTouchDeviceType.Mouse;
switch (evt)
{
case MouseEventArgs mouse:
device = SKTouchDeviceType.Mouse;
break;
case TouchEventArgs touch:
device = SKTouchDeviceType.Touch;
break;
case StylusEventArgs stylus:
device = SKTouchDeviceType.Pen;
break;
}
return device;
}
private static SKMouseButton GetMouseButton(InputEventArgs evt)
{
var mouse = SKMouseButton.Unknown;
switch (evt)
{
case MouseEventArgs mouseEvent:
if (mouseEvent is MouseButtonEventArgs mouseButtonEvent)
{
switch (mouseButtonEvent.ChangedButton)
{
case MouseButton.Left:
mouse = SKMouseButton.Left;
break;
case MouseButton.Right:
mouse = SKMouseButton.Right;
break;
case MouseButton.Middle:
mouse = SKMouseButton.Middle;
break;
}
}
else
{
if (mouseEvent.LeftButton == MouseButtonState.Pressed)
mouse |= SKMouseButton.Left;
if (mouseEvent.RightButton == MouseButtonState.Pressed)
mouse |= SKMouseButton.Right;
if (mouseEvent.MiddleButton == MouseButtonState.Pressed)
mouse |= SKMouseButton.Middle;
}
break;
case TouchEventArgs touchEvent:
{
mouse = SKMouseButton.Left;
}
break;
case StylusEventArgs stylus:
{
System.Diagnostics.Debug.WriteLine(string.Join(", ", stylus.StylusDevice.StylusButtons.Select(b => b.Name)));
mouse = stylus.InAir ? SKMouseButton.Unknown : SKMouseButton.Left;
}
break;
}
return mouse;
}
}
}

Просмотреть файл

@ -0,0 +1,139 @@
using System;
using System.Windows.Forms;
namespace SkiaSharp.Views.Forms
{
internal class SKTouchHandlerWinForms
{
private Action<SKTouchEventArgs> onTouchAction;
private Func<double, double, SKPoint> scalePixels;
public SKTouchHandlerWinForms(Action<SKTouchEventArgs> onTouchAction, Func<double, double, SKPoint> scalePixels)
{
this.onTouchAction = onTouchAction;
this.scalePixels = scalePixels;
}
public void SetEnabled(Control view, bool enableTouchEvents)
{
if (view != null)
{
view.MouseEnter -= OnMouseEntered;
view.MouseLeave -= OnMouseExited;
view.MouseDown -= OnMousePressed;
view.MouseMove -= OnMouseMoved;
view.MouseUp -= OnMouseReleased;
if (enableTouchEvents)
{
view.MouseEnter += OnMouseEntered;
view.MouseLeave += OnMouseExited;
view.MouseDown += OnMousePressed;
view.MouseMove += OnMouseMoved;
view.MouseUp += OnMouseReleased;
}
}
}
public void Detach(Control view)
{
// clean the view
SetEnabled(view, false);
// remove references
onTouchAction = null;
scalePixels = null;
}
// mouse events
private void OnMouseEntered(object sender, EventArgs e)
{
var view = sender as Control;
var loc = view.PointToClient(Cursor.Position);
var handled = CommonHandler(sender, SKTouchAction.Entered, new MouseEventArgs(0, 0, loc.X, loc.Y, 0));
}
private void OnMouseExited(object sender, EventArgs e)
{
var view = sender as Control;
var loc = view.PointToClient(Cursor.Position);
var handled = CommonHandler(sender, SKTouchAction.Exited, new MouseEventArgs(0, 0, loc.X, loc.Y, 0));
}
private void OnMousePressed(object sender, MouseEventArgs e)
{
var handled = CommonHandler(sender, SKTouchAction.Pressed, e);
if (handled)
{
var view = sender as Control;
view.Capture = true;
}
}
private void OnMouseMoved(object sender, MouseEventArgs e)
{
var handled = CommonHandler(sender, SKTouchAction.Moved, e);
}
private void OnMouseReleased(object sender, MouseEventArgs e)
{
var handled = CommonHandler(sender, SKTouchAction.Released, e);
if (handled)
{
var view = sender as Control;
view.Capture = false;
}
}
// processing
private bool CommonHandler(object sender, SKTouchAction touchActionType, MouseEventArgs evt)
{
if (onTouchAction == null || scalePixels == null)
return false;
var view = sender as Control;
var id = 1;
var action = touchActionType;
var mouse = GetMouseButton(evt);
var device = SKTouchDeviceType.Mouse;
var windowsPoint = evt.Location;
var skPoint = scalePixels(windowsPoint.X, windowsPoint.Y);
var inContact = GetContact(evt);
var args = new SKTouchEventArgs(id, action, mouse, device, skPoint, inContact);
onTouchAction(args);
return args.Handled;
}
private static bool GetContact(MouseEventArgs evt)
{
var inContact =
evt.Button.HasFlag(MouseButtons.Left) ||
evt.Button.HasFlag(MouseButtons.Middle) ||
evt.Button.HasFlag(MouseButtons.Right);
return inContact;
}
private static SKMouseButton GetMouseButton(MouseEventArgs evt)
{
var mouse = SKMouseButton.Unknown;
if (evt.Button.HasFlag(MouseButtons.Left))
mouse = SKMouseButton.Left;
if (evt.Button.HasFlag(MouseButtons.Middle))
mouse = SKMouseButton.Middle;
if (evt.Button.HasFlag(MouseButtons.Right))
mouse = SKMouseButton.Right;
return mouse;
}
}
}

Просмотреть файл

@ -0,0 +1,40 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\SkiaSharp.Build.props" />
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
<OutputTypeEx>library</OutputTypeEx>
<ExtrasEnableWpfProjectSetup>true</ExtrasEnableWpfProjectSetup>
<RootNamespace>SkiaSharp.Views.Forms</RootNamespace>
<AssemblyName>SkiaSharp.Views.Forms</AssemblyName>
<AppendTargetFrameworkToOutputPath>False</AppendTargetFrameworkToOutputPath>
<SignAssembly>false</SignAssembly>
<PackagingGroup>SkiaSharp.Views.Forms.WPF</PackagingGroup>
<PackagingPlatform>net45</PackagingPlatform>
<DefineConstants>$(DefineConstants);__DESKTOP__;__WPF__;</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml" />
<Reference Include="WindowsBase" />
<Reference Include="WindowsFormsIntegration" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Forms" Version="4.0.0.540366" />
<PackageReference Include="Xamarin.Forms.Platform.WPF" Version="4.0.0.540366" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\binding\SkiaSharp.Desktop\SkiaSharp.Desktop.csproj" />
<ProjectReference Include="..\..\SkiaSharp.Views\SkiaSharp.Views.WPF\SkiaSharp.Views.WPF.csproj" />
<ProjectReference Include="..\..\SkiaSharp.Views\SkiaSharp.Views.WindowsForms\SkiaSharp.Views.WindowsForms.csproj" />
</ItemGroup>
<ItemGroup>
<None Include="nuget\build\net45\SkiaSharp.Views.Forms.WPF.props" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\SkiaSharp.Views.Forms.Shared\**\*.cs" Link="%(RecursiveDir)%(Filename)%(Extension)" />
<Compile Include="..\SkiaSharp.Views.Forms.Native.Shared\**\*.cs" Link="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>
<Import Project="..\..\SkiaSharp.Build.targets" />
</Project>

Просмотреть файл

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_ReferencesSkiaSharpViewsFormsWpf>True</_ReferencesSkiaSharpViewsFormsWpf>
</PropertyGroup>
</Project>

Просмотреть файл

@ -16,6 +16,9 @@
<ItemGroup>
<ProjectReference Include="..\..\..\binding\SkiaSharp.NetStandard\SkiaSharp.NetStandard.csproj" />
</ItemGroup>
<ItemGroup>
<None Include="nuget\build\net45\SkiaSharp.Views.Forms.targets" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\SkiaSharp.Views.Forms.Shared\**\*.cs" Link="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

Просмотреть файл

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- if ShouldCheckPlatformPackages == False then don't check to see if the platform packages are installed -->
<PropertyGroup>
<ShouldCheckPlatformPackages Condition=" '$(ShouldCheckPlatformPackages)' == '' ">True</ShouldCheckPlatformPackages>
</PropertyGroup>
<Target Name="_CheckPlatformPackages" AfterTargets="ResolveReferences" Condition="'$(ShouldCheckPlatformPackages)' == 'True'">
<!-- check the WPF packages -->
<ItemGroup Condition="'$(_ReferencesSkiaSharpViewsFormsWpf)' != 'True'">
<_RequiredWPFReferences Include="@(ReferencePath)" Condition="'%(Filename)' == 'PresentationCore'" />
<_RequiredWPFReferences Include="@(ReferencePath)" Condition="'%(Filename)' == 'PresentationFramework'" />
<_RequiredWPFReferences Include="@(ReferencePath)" Condition="'%(Filename)' == 'WindowsBase'" />
</ItemGroup>
<Error Text="The SkiaSharp.Views.Forms.WPF package needs to be installed in addition to the SkiaSharp.Views.Forms package in order to support Xamarin.Forms with WPF."
Code="SK1001"
Condition="'$(_ReferencesSkiaSharpViewsFormsWpf)' != 'True' and '$(OutputType)' == 'WinExe' and ('$(UseWPF)' == 'True' or '@(_RequiredWPFReferences)' != '')" />
</Target>
</Project>

Просмотреть файл

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2010
# Visual Studio Version 16
VisualStudioVersion = 16.0.29118.114
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.UWP", "SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.UWP\SkiaSharp.Views.Forms.UWP.csproj", "{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}"
EndProject
@ -67,6 +67,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Desktop.Com
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Desktop.Common.NetStandard", "SkiaSharp.Views\SkiaSharp.Views.Desktop.Common.NetStandard\SkiaSharp.Views.Desktop.Common.NetStandard.csproj", "{293C78F5-0ACD-44A4-82F1-C35F11EFD444}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.WPF", "SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.WPF\SkiaSharp.Views.Forms.WPF.csproj", "{F55B16B3-4427-45EA-A93C-E12A7409E37D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -177,6 +179,10 @@ Global
{293C78F5-0ACD-44A4-82F1-C35F11EFD444}.Debug|Any CPU.Build.0 = Debug|Any CPU
{293C78F5-0ACD-44A4-82F1-C35F11EFD444}.Release|Any CPU.ActiveCfg = Release|Any CPU
{293C78F5-0ACD-44A4-82F1-C35F11EFD444}.Release|Any CPU.Build.0 = Release|Any CPU
{F55B16B3-4427-45EA-A93C-E12A7409E37D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F55B16B3-4427-45EA-A93C-E12A7409E37D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F55B16B3-4427-45EA-A93C-E12A7409E37D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F55B16B3-4427-45EA-A93C-E12A7409E37D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -208,6 +214,7 @@ Global
{EDFAEF02-C462-4953-9CA4-4525479DD027} = {F19E1537-81B2-4D4F-A69E-78DC73ACC141}
{6FB08346-1A02-4793-B5E1-4F739C6342D5} = {F19E1537-81B2-4D4F-A69E-78DC73ACC141}
{293C78F5-0ACD-44A4-82F1-C35F11EFD444} = {F19E1537-81B2-4D4F-A69E-78DC73ACC141}
{F55B16B3-4427-45EA-A93C-E12A7409E37D} = {D40675E1-610D-4BBB-AA2A-BEF020717431}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {63A8C36E-4917-46DB-9AAD-522B8EC00C23}

Просмотреть файл

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2010
# Visual Studio Version 16
VisualStudioVersion = 16.0.29118.114
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.UWP", "SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.UWP\SkiaSharp.Views.Forms.UWP.csproj", "{3A1277B5-CFAE-48CC-B64B-4DAE1222A3EB}"
EndProject
@ -97,6 +97,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Desktop.Com
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Desktop.Common.NetStandard", "SkiaSharp.Views\SkiaSharp.Views.Desktop.Common.NetStandard\SkiaSharp.Views.Desktop.Common.NetStandard.csproj", "{293C78F5-0ACD-44A4-82F1-C35F11EFD444}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Forms.WPF", "SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.WPF\SkiaSharp.Views.Forms.WPF.csproj", "{A88ED3B7-79F8-446F-B6BF-72E94BB153C0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -267,6 +269,10 @@ Global
{293C78F5-0ACD-44A4-82F1-C35F11EFD444}.Debug|Any CPU.Build.0 = Debug|Any CPU
{293C78F5-0ACD-44A4-82F1-C35F11EFD444}.Release|Any CPU.ActiveCfg = Release|Any CPU
{293C78F5-0ACD-44A4-82F1-C35F11EFD444}.Release|Any CPU.Build.0 = Release|Any CPU
{A88ED3B7-79F8-446F-B6BF-72E94BB153C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A88ED3B7-79F8-446F-B6BF-72E94BB153C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A88ED3B7-79F8-446F-B6BF-72E94BB153C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A88ED3B7-79F8-446F-B6BF-72E94BB153C0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -313,6 +319,7 @@ Global
{EDFAEF02-C462-4953-9CA4-4525479DD027} = {F19E1537-81B2-4D4F-A69E-78DC73ACC141}
{6FB08346-1A02-4793-B5E1-4F739C6342D5} = {F19E1537-81B2-4D4F-A69E-78DC73ACC141}
{293C78F5-0ACD-44A4-82F1-C35F11EFD444} = {F19E1537-81B2-4D4F-A69E-78DC73ACC141}
{A88ED3B7-79F8-446F-B6BF-72E94BB153C0} = {DCADA8CC-D50A-4BD9-B2E6-86696A43D819}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {67EACD19-0CEA-4127-9842-549AA6FB84C9}