diff --git a/build.cake b/build.cake
index 9e2a2f4c..ddb3fa54 100644
--- a/build.cake
+++ b/build.cake
@@ -86,7 +86,7 @@ Task ("libs")
.Does (() =>
{
// create all the directories
- EnsureDirectoryExists ("./output/windows/");
+ EnsureDirectoryExists ("./output/wpf/");
EnsureDirectoryExists ("./output/uwp/");
EnsureDirectoryExists ("./output/android/");
EnsureDirectoryExists ("./output/ios/");
@@ -99,6 +99,7 @@ Task ("libs")
EnsureDirectoryExists ("./output/linux/");
EnsureDirectoryExists ("./output/interactive/");
EnsureDirectoryExists ("./output/desktop/");
+ EnsureDirectoryExists ("./output/gtk/");
// .NET Standard / .NET Core
RunNuGetRestore ("source/SkiaSharpSource.NetStandard.sln");
@@ -125,10 +126,8 @@ Task ("libs")
CopyFileToDirectory ("./binding/HarfBuzzSharp.UWP/bin/Release/HarfBuzzSharp.pri", "./output/uwp/");
// SkiaSharp.Views
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.UWP/bin/Release/SkiaSharp.Views.UWP.dll", "./output/uwp/");
- CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.Desktop/bin/Release/SkiaSharp.Views.Desktop.dll", "./output/windows/");
- CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.WPF/bin/Release/SkiaSharp.Views.WPF.dll", "./output/windows/");
+ CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.WPF/bin/Release/SkiaSharp.Views.WPF.dll", "./output/wpf/");
// SkiaSharp.Views.Forms
- CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms/bin/Release/SkiaSharp.Views.Forms.dll", "./output/portable/");
CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.UWP/bin/Release/SkiaSharp.Views.Forms.dll", "./output/uwp/");
} else if (IsRunningOnMac ()) {
// fix for old MSBuild
@@ -152,20 +151,26 @@ Task ("libs")
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.Mac/bin/Release/SkiaSharp.Views.Mac.dll", "./output/osx/");
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.tvOS/bin/Release/SkiaSharp.Views.tvOS.dll", "./output/tvos/");
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.watchOS/bin/Release/SkiaSharp.Views.watchOS.dll", "./output/watchos/");
+ CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.Gtk/bin/Release/SkiaSharp.Views.Gtk.dll", "./output/gtk/");
// SkiaSharp.Views.Forms
- CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms/bin/Release/SkiaSharp.Views.Forms.dll", "./output/portable/");
CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Android/bin/Release/SkiaSharp.Views.Forms.dll", "./output/android/");
CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.iOS/bin/Release/SkiaSharp.Views.Forms.dll", "./output/ios/");
CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Mac/bin/Release/SkiaSharp.Views.Forms.dll", "./output/osx/");
} else if (IsRunningOnLinux ()) {
RunNuGetRestore ("./source/SkiaSharpSource.Linux.sln");
RunMSBuild ("./source/SkiaSharpSource.Linux.sln");
+ // SkiaSharp.Views
+ CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.Gtk/bin/Release/SkiaSharp.Views.Gtk.dll", "./output/gtk/");
}
// SkiaSharp
CopyFileToDirectory ("./binding/SkiaSharp.Desktop/bin/Release/SkiaSharp.dll", "./output/desktop/");
CopyFileToDirectory ("./binding/SkiaSharp.Desktop/bin/Release/nuget/build/net45/SkiaSharp.dll.config", "./output/desktop/");
CopyFileToDirectory ("./binding/SkiaSharp.Desktop/bin/Release/nuget/build/net45/SkiaSharp.Desktop.targets", "./output/desktop/");
CopyFileToDirectory ("./binding/SkiaSharp.Portable/bin/Release/SkiaSharp.dll", "./output/portable/");
+ // SkiaSharp.Views
+ CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.Desktop/bin/Release/SkiaSharp.Views.Desktop.dll", "./output/desktop/");
+ // SkiaSharp.Views.Forms
+ CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms/bin/Release/SkiaSharp.Views.Forms.dll", "./output/portable/");
// HarfBuzzSharp
CopyFileToDirectory ("./binding/HarfBuzzSharp.Desktop/bin/Release/HarfBuzzSharp.dll", "./output/desktop/");
CopyFileToDirectory ("./binding/HarfBuzzSharp.Desktop/bin/Release/nuget/build/net45/HarfBuzzSharp.dll.config", "./output/desktop/");
@@ -259,18 +264,41 @@ Task ("samples")
.Does (() =>
{
ClearSkiaSharpNuGetCache ();
- CleanDirectories ("./samples/*/*/packages/SkiaSharp.*");
+ CleanDirectories ("./samples/*/*/*/packages/SkiaSharp.*");
// zip the samples for the GitHub release notes
if (IS_ON_CI) {
Zip ("./samples", "./output/samples.zip");
}
- if (IsRunningOnLinux ()) {
+ // BASIC samples
+ RunNuGetRestore ("./samples/Basic/NetCore/SkiaSharpSample.sln");
+ RunMSBuild ("./samples/Basic/NetCore/SkiaSharpSample.sln");
+ // GALLERY samples
+
+ if (IsRunningOnLinux ()) {
+ // BASIC samples
+ RunNuGetRestore ("./samples/Basic/Gtk/SkiaSharpSample.sln");
+ RunMSBuild ("./samples/Basic/Gtk/SkiaSharpSample.sln");
+
+ // GALLERY samples
}
if (IsRunningOnMac ()) {
+ // BASIC samples
+ RunNuGetRestore ("./samples/Basic/Android/SkiaSharpSample.sln");
+ RunMSBuild ("./samples/Basic/Android/SkiaSharpSample.sln");
+ RunNuGetRestore ("./samples/Basic/iOS/SkiaSharpSample.sln");
+ RunMSBuildWithPlatform ("./samples/Basic/iOS/SkiaSharpSample.sln", "iPhone");
+ RunNuGetRestore ("./samples/Basic/macOS/SkiaSharpSample.sln");
+ RunMSBuild ("./samples/Basic/macOS/SkiaSharpSample.sln");
+ RunNuGetRestore ("./samples/Basic/tvOS/SkiaSharpSample.sln");
+ RunMSBuildWithPlatform ("./samples/Basic/tvOS/SkiaSharpSample.sln", "iPhoneSimulator");
+ RunNuGetRestore ("./samples/Basic/Gtk/SkiaSharpSample.sln");
+ RunMSBuild ("./samples/Basic/Gtk/SkiaSharpSample.sln");
+
+ // GALLERY samples
RunNuGetRestore ("./samples/Gallery/MacSample/MacSample.sln");
RunMSBuildWithPlatform ("./samples/Gallery/MacSample/MacSample.sln", "x86");
RunNuGetRestore ("./samples/Gallery/FormsSample/FormsSample.Mac.sln");
@@ -280,6 +308,9 @@ Task ("samples")
}
if (IsRunningOnWindows ()) {
+ // BASIC samples
+
+ // GALLERY samples
RunNuGetRestore ("./samples/Gallery/WPFSample/WPFSample.sln");
RunMSBuild ("./samples/Gallery/WPFSample/WPFSample.sln");
RunNuGetRestore ("./samples/Gallery/UWPSample/UWPSample.sln");
@@ -396,8 +427,8 @@ Task ("update-docs")
// add windows-specific assemblies
if (IsRunningOnWindows ()) {
assemblies = assemblies.Union (new FilePath [] {
- "./output/windows/SkiaSharp.Views.Desktop.dll",
- "./output/windows/SkiaSharp.Views.WPF.dll",
+ "./output/desktop/SkiaSharp.Views.Desktop.dll",
+ "./output/wpf/SkiaSharp.Views.WPF.dll",
"./output/android/SkiaSharp.Views.Android.dll",
"./output/ios/SkiaSharp.Views.iOS.dll",
"./output/osx/SkiaSharp.Views.Mac.dll",
@@ -409,6 +440,8 @@ Task ("update-docs")
// add mac-specific assemblies
if (IsRunningOnMac ()) {
assemblies = assemblies.Union (new FilePath [] {
+ "./output/desktop/SkiaSharp.Views.Desktop.dll",
+ "./output/gtk/SkiaSharp.Views.Gtk.dll",
"./output/android/SkiaSharp.Views.Android.dll",
"./output/ios/SkiaSharp.Views.iOS.dll",
"./output/osx/SkiaSharp.Views.Mac.dll",
@@ -416,6 +449,13 @@ Task ("update-docs")
"./output/watchos/SkiaSharp.Views.watchOS.dll",
}).ToArray ();
}
+ // add linux-specific assemblies
+ if (IsRunningOnLinux ()) {
+ assemblies = assemblies.Union (new FilePath [] {
+ "./output/desktop/SkiaSharp.Views.Desktop.dll",
+ "./output/gtk/SkiaSharp.Views.Gtk.dll",
+ }).ToArray ();
+ }
// print out the assemblies
foreach (var r in refs) {
@@ -493,6 +533,7 @@ Task ("nuget")
if (IsRunningOnLinux ()) {
PackageNuGet ("./nuget/SkiaSharp.Linux.nuspec", "./output/");
PackageNuGet ("./nuget/HarfBuzzSharp.Linux.nuspec", "./output/");
+ PackageNuGet ("./nuget/SkiaSharp.Views.Linux.nuspec", "./output/");
}
}
// HarfBuzz is a PCL
diff --git a/nuget/SkiaSharp.Views.Linux.nuspec b/nuget/SkiaSharp.Views.Linux.nuspec
new file mode 100644
index 00000000..7da46774
--- /dev/null
+++ b/nuget/SkiaSharp.Views.Linux.nuspec
@@ -0,0 +1,26 @@
+
+
+
+ SkiaSharp.Views
+ SkiaSharp Views & Layers (for Linux)
+ 1.60.0
+ Xamarin Inc.
+ Xamarin Inc.
+ false
+ SkiaSharp Views & Layers are a set of platform-specific views and containers that can be used to draw on the screen.
+ Copyright (c) Xamarin Inc. 2016
+ https://github.com/mono/SkiaSharp/blob/master/LICENSE.md
+ https://github.com/mono/SkiaSharp
+ https://cdn.rawgit.com/mono/SkiaSharp/v1.53.0/images/skia_256x256.png
+ ui,xamarin,graphics,ios,android,linux,windows,uwp,tvos,watchos,macos,cross-platform,skiasharp
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nuget/SkiaSharp.Views.Mac.nuspec b/nuget/SkiaSharp.Views.Mac.nuspec
index 8f9a3f49..fd573d6d 100644
--- a/nuget/SkiaSharp.Views.Mac.nuspec
+++ b/nuget/SkiaSharp.Views.Mac.nuspec
@@ -23,5 +23,7 @@
+
+
\ No newline at end of file
diff --git a/nuget/SkiaSharp.Views.Windows.nuspec b/nuget/SkiaSharp.Views.Windows.nuspec
index dd6f3a31..aadc5193 100644
--- a/nuget/SkiaSharp.Views.Windows.nuspec
+++ b/nuget/SkiaSharp.Views.Windows.nuspec
@@ -18,9 +18,10 @@
+
+
-
-
+
diff --git a/nuget/SkiaSharp.Views.nuspec b/nuget/SkiaSharp.Views.nuspec
index 352f4c55..262e3e2f 100644
--- a/nuget/SkiaSharp.Views.nuspec
+++ b/nuget/SkiaSharp.Views.nuspec
@@ -28,9 +28,12 @@
+
+
-
-
+
+
+
diff --git a/samples/Basic/Gtk/SkiaSharpSample.sln b/samples/Basic/Gtk/SkiaSharpSample.sln
new file mode 100644
index 00000000..250040da
--- /dev/null
+++ b/samples/Basic/Gtk/SkiaSharpSample.sln
@@ -0,0 +1,109 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26430.13
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Binding", "..\..\..\binding\Binding\Binding.shproj", "{9C502B9A-25D4-473F-89BD-5A13DDE16354}"
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "SkiaSharp.Views.Shared", "..\..\..\source\SkiaSharp.Views\SkiaSharp.Views.Shared\SkiaSharp.Views.Shared.shproj", "{5A67972C-1C04-4913-9950-06A03BFE9533}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "source", "source", "{C335869B-7CC8-4239-B4A5-8031AA9758D3}"
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Binding.Shared", "..\..\..\binding\Binding.Shared\Binding.Shared.shproj", "{6F8349DC-90AC-441D-8B8B-BE623F46BE6D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Desktop", "..\..\..\binding\SkiaSharp.Desktop\SkiaSharp.Desktop.csproj", "{EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}"
+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}"
+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}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharpSample", "SkiaSharpSample\SkiaSharpSample.csproj", "{17521786-7B50-46C5-BBCE-999FDEBB45A3}"
+EndProject
+Global
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Shared\SkiaSharp.Views.Forms.Shared.projitems*{1555d119-8598-4e4d-91ac-d313f94a1673}*SharedItemsImports = 4
+ ..\binding\HarfBuzzSharp.Shared\HarfBuzzSharp.Shared.projitems*{1aaa8f60-6138-4dfe-b240-5a0f3fb87e0f}*SharedItemsImports = 13
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{2ae5d8c5-eac6-4515-89f2-a4994b41c925}*SharedItemsImports = 4
+ ..\binding\HarfBuzzSharp.Shared\HarfBuzzSharp.Shared.projitems*{2ae5d8c5-eac6-4515-89f2-a4994b41c925}*SharedItemsImports = 4
+ SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Native.Shared\SkiaSharp.Views.Forms.Native.Shared.projitems*{2f94f024-1841-47e8-b521-74aa4e3eba54}*SharedItemsImports = 4
+ SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Shared\SkiaSharp.Views.Forms.Shared.projitems*{2f94f024-1841-47e8-b521-74aa4e3eba54}*SharedItemsImports = 4
+ SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Shared\SkiaSharp.Views.Forms.Shared.projitems*{314fb505-9858-4e03-b799-91b0ba627d05}*SharedItemsImports = 13
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{4588a759-3853-49b8-8a68-6c7917be9220}*SharedItemsImports = 4
+ ..\binding\Binding\Binding.projitems*{4588a759-3853-49b8-8a68-6c7917be9220}*SharedItemsImports = 4
+ SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Native.Shared\SkiaSharp.Views.Forms.Native.Shared.projitems*{4ac36d63-bf11-445f-81ee-107c0cef4fc9}*SharedItemsImports = 4
+ SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Shared\SkiaSharp.Views.Forms.Shared.projitems*{4ac36d63-bf11-445f-81ee-107c0cef4fc9}*SharedItemsImports = 4
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{5180e370-a455-42bb-99f9-97bd269b8a52}*SharedItemsImports = 4
+ ..\binding\Binding\Binding.projitems*{5180e370-a455-42bb-99f9-97bd269b8a52}*SharedItemsImports = 4
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{099A4BAD-6CF7-4898-9D16-266BDD844F95}*SharedItemsImports = 4
+ ..\binding\Binding\Binding.projitems*{099A4BAD-6CF7-4898-9D16-266BDD844F95}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.Shared\SkiaSharp.Views.Shared.projitems*{5a67972c-1c04-4913-9950-06a03bfe9533}*SharedItemsImports = 13
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{6a678cfb-21a7-4e81-8909-fd72abbfd408}*SharedItemsImports = 4
+ ..\binding\Binding\Binding.projitems*{6a678cfb-21a7-4e81-8909-fd72abbfd408}*SharedItemsImports = 4
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{6f8349dc-90ac-441d-8b8b-be623f46be6d}*SharedItemsImports = 13
+ SkiaSharp.Views\SkiaSharp.Views.AppleiOS\SkiaSharp.Views.AppleiOS.projitems*{74c78108-9199-4a7a-928c-fc4dc57d0ae4}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.Apple\SkiaSharp.Views.Apple.projitems*{74c78108-9199-4a7a-928c-fc4dc57d0ae4}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.Shared\SkiaSharp.Views.Shared.projitems*{74c78108-9199-4a7a-928c-fc4dc57d0ae4}*SharedItemsImports = 4
+ SkiaSharp.HarfBuzz\SkiaSharp.HarfBuzz.Shared\SkiaSharp.HarfBuzz.Shared.projitems*{7cad1912-05a5-42e5-b7ba-81bb051f0566}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.Apple\SkiaSharp.Views.Apple.projitems*{809a15dc-e675-4a24-83fa-df13160f7e4c}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.Shared\SkiaSharp.Views.Shared.projitems*{809a15dc-e675-4a24-83fa-df13160f7e4c}*SharedItemsImports = 4
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{8d646738-458a-441f-b69b-253ef058a812}*SharedItemsImports = 4
+ ..\binding\HarfBuzzSharp.Shared\HarfBuzzSharp.Shared.projitems*{8d646738-458a-441f-b69b-253ef058a812}*SharedItemsImports = 4
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{0C940695-4868-4CF7-7D16-266BDD88A812}*SharedItemsImports = 4
+ ..\binding\HarfBuzzSharp.Shared\HarfBuzzSharp.Shared.projitems*{0C940695-4868-4CF7-7D16-266BDD88A812}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.Shared\SkiaSharp.Views.Shared.projitems*{926c8d29-e047-4f4e-8b35-852e47bfa9f5}*SharedItemsImports = 4
+ ..\binding\Binding\Binding.projitems*{9c502b9a-25d4-473f-89bd-5a13dde16354}*SharedItemsImports = 13
+ SkiaSharp.HarfBuzz\SkiaSharp.HarfBuzz.Shared\SkiaSharp.HarfBuzz.Shared.projitems*{c3e63b2d-95d4-4c3f-b10f-7a0aacf94980}*SharedItemsImports = 13
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{c737dc80-5b71-4b26-a2dc-da30421788b0}*SharedItemsImports = 4
+ ..\binding\Binding\Binding.projitems*{c737dc80-5b71-4b26-a2dc-da30421788b0}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.Apple\SkiaSharp.Views.Apple.projitems*{cbca14e7-96c9-4697-909c-19b1ef7298f7}*SharedItemsImports = 13
+ SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Native.Shared\SkiaSharp.Views.Forms.Native.Shared.projitems*{cebd25fd-dd4f-4d5f-b809-d50d02176f41}*SharedItemsImports = 13
+ SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Native.Shared\SkiaSharp.Views.Forms.Native.Shared.projitems*{da5da4d8-4885-4af2-96bb-ae803c344ab0}*SharedItemsImports = 4
+ SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Shared\SkiaSharp.Views.Forms.Shared.projitems*{da5da4d8-4885-4af2-96bb-ae803c344ab0}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.AppleiOS\SkiaSharp.Views.AppleiOS.projitems*{e5973829-6c8b-43e4-b81b-c8492df26c90}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.Apple\SkiaSharp.Views.Apple.projitems*{e5973829-6c8b-43e4-b81b-c8492df26c90}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.Shared\SkiaSharp.Views.Shared.projitems*{e5973829-6c8b-43e4-b81b-c8492df26c90}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.AppleiOS\SkiaSharp.Views.AppleiOS.projitems*{9E850CCA-54CC-4CEB-B2C2-E32EF4A17D61}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.Apple\SkiaSharp.Views.Apple.projitems*{9E850CCA-54CC-4CEB-B2C2-E32EF4A17D61}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.Shared\SkiaSharp.Views.Shared.projitems*{9E850CCA-54CC-4CEB-B2C2-E32EF4A17D61}*SharedItemsImports = 4
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{e6b786c4-3bf9-4a42-9a4a-08002ae3fdad}*SharedItemsImports = 4
+ ..\binding\HarfBuzzSharp.Shared\HarfBuzzSharp.Shared.projitems*{e6b786c4-3bf9-4a42-9a4a-08002ae3fdad}*SharedItemsImports = 4
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{e8192110-fcf9-4972-9472-7408bc2ca56b}*SharedItemsImports = 4
+ ..\binding\HarfBuzzSharp.Shared\HarfBuzzSharp.Shared.projitems*{e8192110-fcf9-4972-9472-7408bc2ca56b}*SharedItemsImports = 4
+ ..\binding\Binding.Shared\Binding.Shared.projitems*{eb1bbdcc-fb07-40d5-8b9e-0079e2c2f2df}*SharedItemsImports = 4
+ ..\binding\Binding\Binding.projitems*{eb1bbdcc-fb07-40d5-8b9e-0079e2c2f2df}*SharedItemsImports = 4
+ SkiaSharp.Views\SkiaSharp.Views.AppleiOS\SkiaSharp.Views.AppleiOS.projitems*{ff4c9f9f-7a6a-44d1-8338-d30e39e4e9d4}*SharedItemsImports = 13
+ EndGlobalSection
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Release|Any CPU.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}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E5A90865-C185-45AD-88D1-6DA7D6004B03}.Release|Any CPU.Build.0 = Release|Any CPU
+ {17521786-7B50-46C5-BBCE-999FDEBB45A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {17521786-7B50-46C5-BBCE-999FDEBB45A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {17521786-7B50-46C5-BBCE-999FDEBB45A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {17521786-7B50-46C5-BBCE-999FDEBB45A3}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {5A67972C-1C04-4913-9950-06A03BFE9533} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
+ {9C502B9A-25D4-473F-89BD-5A13DDE16354} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
+ {6F8349DC-90AC-441D-8B8B-BE623F46BE6D} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
+ {EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
+ {E5A90865-C185-45AD-88D1-6DA7D6004B03} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
+ EndGlobalSection
+EndGlobal
diff --git a/samples/Basic/Gtk/SkiaSharpSample/MainWindow.cs b/samples/Basic/Gtk/SkiaSharpSample/MainWindow.cs
new file mode 100644
index 00000000..6b9e510e
--- /dev/null
+++ b/samples/Basic/Gtk/SkiaSharpSample/MainWindow.cs
@@ -0,0 +1,49 @@
+using System;
+using Gtk;
+using SkiaSharp;
+using SkiaSharp.Views.Desktop;
+
+public partial class MainWindow : Gtk.Window
+{
+ public MainWindow()
+ : base(Gtk.WindowType.Toplevel)
+ {
+ Build();
+
+ skiaView.PaintSurface += OnPaintSurface;
+ }
+
+ protected void OnDeleteEvent(object sender, DeleteEventArgs a)
+ {
+ Application.Quit();
+ a.RetVal = true;
+ }
+
+ private void OnPaintSurface(object sender, SKPaintSurfaceEventArgs e)
+ {
+ // the the canvas and properties
+ var canvas = e.Surface.Canvas;
+
+ // get the screen density for scaling
+ var scale = 1f;
+ var scaledSize = new SKSize(e.Info.Width / scale, e.Info.Height / scale);
+
+ // handle the device screen density
+ canvas.Scale(scale);
+
+ // make sure the canvas is blank
+ canvas.Clear(SKColors.White);
+
+ // draw some text
+ var paint = new SKPaint
+ {
+ Color = SKColors.Black,
+ IsAntialias = true,
+ Style = SKPaintStyle.Fill,
+ TextAlign = SKTextAlign.Center,
+ TextSize = 24
+ };
+ var coord = new SKPoint(scaledSize.Width / 2, (scaledSize.Height + paint.TextSize) / 2);
+ canvas.DrawText("SkiaSharp", coord, paint);
+ }
+}
diff --git a/samples/Basic/Gtk/SkiaSharpSample/Program.cs b/samples/Basic/Gtk/SkiaSharpSample/Program.cs
new file mode 100644
index 00000000..0523c5b0
--- /dev/null
+++ b/samples/Basic/Gtk/SkiaSharpSample/Program.cs
@@ -0,0 +1,16 @@
+using System;
+using Gtk;
+
+namespace SkiaSharpSample
+{
+ class MainClass
+ {
+ public static void Main(string[] args)
+ {
+ Application.Init();
+ MainWindow win = new MainWindow();
+ win.Show();
+ Application.Run();
+ }
+ }
+}
diff --git a/samples/Basic/Gtk/SkiaSharpSample/Properties/AssemblyInfo.cs b/samples/Basic/Gtk/SkiaSharpSample/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..12dec27a
--- /dev/null
+++ b/samples/Basic/Gtk/SkiaSharpSample/Properties/AssemblyInfo.cs
@@ -0,0 +1,26 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("SkiaSharpSample")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("(c) Matthew Leibowitz")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
diff --git a/samples/Basic/Gtk/SkiaSharpSample/SkiaSharpSample.csproj b/samples/Basic/Gtk/SkiaSharpSample/SkiaSharpSample.csproj
new file mode 100644
index 00000000..af1b8899
--- /dev/null
+++ b/samples/Basic/Gtk/SkiaSharpSample/SkiaSharpSample.csproj
@@ -0,0 +1,63 @@
+
+
+
+ {17521786-7B50-46C5-BBCE-999FDEBB45A3}
+ WinExe
+ v4.6.1
+ SkiaSharpSample
+
+
+ full
+ false
+ bin\Debug
+ DEBUG;
+ 4
+ false
+
+
+ true
+ bin\Release
+ 4
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}
+ SkiaSharp.Desktop
+
+
+ {E5A90865-C185-45AD-88D1-6DA7D6004B03}
+ SkiaSharp.Views.Desktop
+
+
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}
+ SkiaSharp.Views.Gtk
+
+
+
+
+ gui.stetic
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/Basic/Gtk/SkiaSharpSample/gtk-gui/MainWindow.cs b/samples/Basic/Gtk/SkiaSharpSample/gtk-gui/MainWindow.cs
new file mode 100644
index 00000000..7e55e8ec
--- /dev/null
+++ b/samples/Basic/Gtk/SkiaSharpSample/gtk-gui/MainWindow.cs
@@ -0,0 +1,28 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+
+public partial class MainWindow
+{
+ private global::SkiaSharp.Views.Gtk.SKWidget skiaView;
+
+ protected virtual void Build()
+ {
+ global::Stetic.Gui.Initialize(this);
+ // Widget MainWindow
+ this.Name = "MainWindow";
+ this.Title = global::Mono.Unix.Catalog.GetString("MainWindow");
+ this.WindowPosition = ((global::Gtk.WindowPosition)(4));
+ // Container child MainWindow.Gtk.Container+ContainerChild
+ this.skiaView = new global::SkiaSharp.Views.Gtk.SKWidget();
+ this.skiaView.Name = "skiaView";
+ this.Add(this.skiaView);
+ if ((this.Child != null))
+ {
+ this.Child.ShowAll();
+ }
+ this.DefaultWidth = 400;
+ this.DefaultHeight = 300;
+ this.Show();
+ this.DeleteEvent += new global::Gtk.DeleteEventHandler(this.OnDeleteEvent);
+ }
+}
diff --git a/samples/Basic/Gtk/SkiaSharpSample/gtk-gui/generated.cs b/samples/Basic/Gtk/SkiaSharpSample/gtk-gui/generated.cs
new file mode 100644
index 00000000..4842e95d
--- /dev/null
+++ b/samples/Basic/Gtk/SkiaSharpSample/gtk-gui/generated.cs
@@ -0,0 +1,30 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace Stetic
+{
+ internal class Gui
+ {
+ private static bool initialized;
+
+ internal static void Initialize(Gtk.Widget iconRenderer)
+ {
+ if ((Stetic.Gui.initialized == false))
+ {
+ Stetic.Gui.initialized = true;
+ }
+ }
+ }
+
+ internal class ActionGroups
+ {
+ public static Gtk.ActionGroup GetActionGroup(System.Type type)
+ {
+ return Stetic.ActionGroups.GetActionGroup(type.FullName);
+ }
+
+ public static Gtk.ActionGroup GetActionGroup(string name)
+ {
+ return null;
+ }
+ }
+}
diff --git a/samples/Basic/Gtk/SkiaSharpSample/gtk-gui/gui.stetic b/samples/Basic/Gtk/SkiaSharpSample/gtk-gui/gui.stetic
new file mode 100644
index 00000000..de020471
--- /dev/null
+++ b/samples/Basic/Gtk/SkiaSharpSample/gtk-gui/gui.stetic
@@ -0,0 +1,23 @@
+
+
+
+ ..
+ 2.12
+
+
+
+
+
+
+
+
+ MainWindow
+ CenterOnParent
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/source/SkiaSharp.Views/SkiaSharp.Views.Gtk/SKWidget.cs b/source/SkiaSharp.Views/SkiaSharp.Views.Gtk/SKWidget.cs
new file mode 100644
index 00000000..08b8400a
--- /dev/null
+++ b/source/SkiaSharp.Views/SkiaSharp.Views.Gtk/SKWidget.cs
@@ -0,0 +1,91 @@
+using System;
+using System.ComponentModel;
+using SkiaSharp.Views.Desktop;
+
+namespace SkiaSharp.Views.Gtk
+{
+ [ToolboxItem(true)]
+ public class SKWidget : global::Gtk.DrawingArea
+ {
+ private Gdk.Pixbuf pix;
+
+ public SKWidget()
+ {
+ DoubleBuffered = false;
+ }
+
+ public SKSize CanvasSize => pix == null ? SKSize.Empty : new SKSize(pix.Width, pix.Height);
+
+ [Category("Appearance")]
+ public event EventHandler PaintSurface;
+
+ protected override bool OnExposeEvent(Gdk.EventExpose evnt)
+ {
+ var window = evnt.Window;
+ var area = evnt.Area;
+
+ // get the pixbuf
+ CreatePixbuf();
+ var info = new SKImageInfo(pix.Width, pix.Height, SKImageInfo.PlatformColorType, SKAlphaType.Premul);
+
+ // create the surface
+ using (var surface = SKSurface.Create(info, pix.Pixels, info.RowBytes))
+ {
+ // start drawing
+ OnPaintSurface(new SKPaintSurfaceEventArgs(surface, info));
+
+ surface.Canvas.Flush();
+
+ // swap R and B
+ if (info.ColorType == SKColorType.Bgra8888)
+ {
+ using (var pixmap = surface.PeekPixels())
+ {
+ SKSwizzle.SwapRedBlue(pixmap.GetPixels(), pixmap.GetPixels(), info.BytesSize);
+ }
+ }
+ }
+
+ // write the pixbuf to the graphics
+ window.Clear();
+ window.DrawPixbuf(null, pix, 0, 0, 0, 0, -1, -1, Gdk.RgbDither.None, 0, 0);
+
+ return true;
+ }
+
+ protected virtual void OnPaintSurface(SKPaintSurfaceEventArgs e)
+ {
+ // invoke the event
+ PaintSurface?.Invoke(this, e);
+ }
+
+ public override void Dispose()
+ {
+ FreePixbuf();
+
+ base.Dispose();
+ }
+
+ private void CreatePixbuf()
+ {
+ var alloc = Allocation;
+ var w = alloc.Width;
+ var h = alloc.Height;
+ if (pix == null || pix.Width != w || pix.Height != h)
+ {
+ FreePixbuf();
+
+ pix = new Gdk.Pixbuf(Gdk.Colorspace.Rgb, true, 8, w, h);
+ }
+ }
+
+ private void FreePixbuf()
+ {
+ if (pix != null)
+ {
+ pix.Dispose();
+ pix = null;
+ }
+ }
+ }
+}
diff --git a/source/SkiaSharp.Views/SkiaSharp.Views.Gtk/SkiaSharp.Views.Gtk.csproj b/source/SkiaSharp.Views/SkiaSharp.Views.Gtk/SkiaSharp.Views.Gtk.csproj
new file mode 100644
index 00000000..302fc803
--- /dev/null
+++ b/source/SkiaSharp.Views/SkiaSharp.Views.Gtk/SkiaSharp.Views.Gtk.csproj
@@ -0,0 +1,68 @@
+
+
+
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}
+ Library
+ v4.5
+ SkiaSharp.Views.Gtk
+ SkiaSharp.Views.Gtk
+ true
+ ..\..\..\mono.snk
+
+
+ true
+ full
+ false
+ bin\Debug\
+ TRACE;DEBUG;__DESKTOP__;__GTK__
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE;__DESKTOP__;__GTK__
+ prompt
+ 4
+
+
+
+
+
+ gtk-sharp-2.0
+
+
+ gtk-sharp-2.0
+
+
+ glib-sharp-2.0
+
+
+ glade-sharp-2.0
+
+
+ gtk-sharp-2.0
+
+
+ gtk-sharp-2.0
+
+
+
+
+ {eb1bbdcc-fb07-40d5-8b9e-0079e2c2f2df}
+ SkiaSharp.Desktop
+
+
+ {E5A90865-C185-45AD-88D1-6DA7D6004B03}
+ SkiaSharp.Views.Desktop
+
+
+
+
+ Properties\SkiaSharpViewsAssemblyInfo.cs
+
+
+
+
+
\ No newline at end of file
diff --git a/source/SkiaSharp.Views/SkiaSharp.Views.Shared/Extensions.cs b/source/SkiaSharp.Views/SkiaSharp.Views.Shared/Extensions.cs
index 0690ddde..f33f5bad 100644
--- a/source/SkiaSharp.Views/SkiaSharp.Views.Shared/Extensions.cs
+++ b/source/SkiaSharp.Views/SkiaSharp.Views.Shared/Extensions.cs
@@ -7,7 +7,7 @@ namespace SkiaSharp.Views.tvOS
namespace SkiaSharp.Views.watchOS
#elif __IOS__
namespace SkiaSharp.Views.iOS
-#elif __DESKTOP__ || __WPF__
+#elif __DESKTOP__ || __WPF__ || __GTK__
namespace SkiaSharp.Views.Desktop
#elif WINDOWS_UWP
namespace SkiaSharp.Views.UWP
diff --git a/source/SkiaSharp.Views/SkiaSharp.Views.Shared/GlesInterop/Gles.cs b/source/SkiaSharp.Views/SkiaSharp.Views.Shared/GlesInterop/Gles.cs
index b3475eaa..c9ca9cc4 100644
--- a/source/SkiaSharp.Views/SkiaSharp.Views.Shared/GlesInterop/Gles.cs
+++ b/source/SkiaSharp.Views/SkiaSharp.Views.Shared/GlesInterop/Gles.cs
@@ -8,7 +8,7 @@ namespace SkiaSharp.Views.GlesInterop
private const string libGLESv2 = "/System/Library/Frameworks/OpenGL.framework/OpenGL";
#elif __IOS__ || __TVOS__ || __WATCHOS__
private const string libGLESv2 = "/System/Library/Frameworks/OpenGLES.framework/OpenGLES";
-#elif __DESKTOP__ || __WPF__
+#elif __DESKTOP__ || __WPF__ || __GTK__
private const string libGLESv2 = "opengl32.dll";
#elif __ANDROID__
private const string libGLESv2 = "libGLESv2.so";
diff --git a/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKGLDrawable.cs b/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKGLDrawable.cs
index 37319e4a..8b1e1deb 100644
--- a/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKGLDrawable.cs
+++ b/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKGLDrawable.cs
@@ -9,7 +9,7 @@ namespace SkiaSharp.Views.tvOS
namespace SkiaSharp.Views.watchOS
#elif __IOS__
namespace SkiaSharp.Views.iOS
-#elif __DESKTOP__ || __WPF__
+#elif __DESKTOP__ || __WPF__ || __GTK__
namespace SkiaSharp.Views.Desktop
#elif __MACOS__
namespace SkiaSharp.Views.Mac
diff --git a/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKPaintGLSurfaceEventArgs.cs b/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKPaintGLSurfaceEventArgs.cs
index cecd3281..d634fd31 100644
--- a/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKPaintGLSurfaceEventArgs.cs
+++ b/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKPaintGLSurfaceEventArgs.cs
@@ -8,7 +8,7 @@ namespace SkiaSharp.Views.tvOS
namespace SkiaSharp.Views.watchOS
#elif __IOS__
namespace SkiaSharp.Views.iOS
-#elif __DESKTOP__ || __WPF__
+#elif __DESKTOP__ || __WPF__ || __GTK__
namespace SkiaSharp.Views.Desktop
#elif WINDOWS_UWP
namespace SkiaSharp.Views.UWP
diff --git a/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKPaintSurfaceEventArgs.cs b/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKPaintSurfaceEventArgs.cs
index 4ed07f58..f04080b4 100644
--- a/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKPaintSurfaceEventArgs.cs
+++ b/source/SkiaSharp.Views/SkiaSharp.Views.Shared/SKPaintSurfaceEventArgs.cs
@@ -8,7 +8,7 @@ namespace SkiaSharp.Views.tvOS
namespace SkiaSharp.Views.watchOS
#elif __IOS__
namespace SkiaSharp.Views.iOS
-#elif __DESKTOP__ || __WPF__
+#elif __DESKTOP__ || __WPF__ || __GTK__
namespace SkiaSharp.Views.Desktop
#elif WINDOWS_UWP
namespace SkiaSharp.Views.UWP
diff --git a/source/SkiaSharpSource.Linux.sln b/source/SkiaSharpSource.Linux.sln
index 1aea0e92..273fd0e9 100644
--- a/source/SkiaSharpSource.Linux.sln
+++ b/source/SkiaSharpSource.Linux.sln
@@ -37,6 +37,8 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "SkiaSharp.Views.Shared", "S
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Desktop", "SkiaSharp.Views\SkiaSharp.Views.Desktop\SkiaSharp.Views.Desktop.csproj", "{E5A90865-C185-45AD-88D1-6DA7D6004B03}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Gtk", "SkiaSharp.Views\SkiaSharp.Views.Gtk\SkiaSharp.Views.Gtk.csproj", "{67A502A4-E8B2-419A-811E-5A634B29C8D7}"
+EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SkiaSharp.Views.Forms", "SkiaSharp.Views.Forms", "{B3C4E4EC-68C7-4AFB-A6D4-1B2B0EB8C421}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "SkiaSharp.Views.Forms.Shared", "SkiaSharp.Views.Forms\SkiaSharp.Views.Forms.Shared\SkiaSharp.Views.Forms.Shared.shproj", "{314FB505-9858-4E03-B799-91B0BA627D05}"
@@ -95,6 +97,10 @@ Global
{E5A90865-C185-45AD-88D1-6DA7D6004B03}.Debug|Any CPU.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
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Release|Any CPU.Build.0 = Release|Any CPU
{1555D119-8598-4E4D-91AC-D313F94A1673}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1555D119-8598-4E4D-91AC-D313F94A1673}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1555D119-8598-4E4D-91AC-D313F94A1673}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -116,6 +122,7 @@ Global
{EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
{5A67972C-1C04-4913-9950-06A03BFE9533} = {4F5EBFFB-DD81-43B9-8531-156ED3639C91}
{E5A90865-C185-45AD-88D1-6DA7D6004B03} = {4F5EBFFB-DD81-43B9-8531-156ED3639C91}
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7} = {4F5EBFFB-DD81-43B9-8531-156ED3639C91}
{314FB505-9858-4E03-B799-91B0BA627D05} = {B3C4E4EC-68C7-4AFB-A6D4-1B2B0EB8C421}
{1555D119-8598-4E4D-91AC-D313F94A1673} = {B3C4E4EC-68C7-4AFB-A6D4-1B2B0EB8C421}
{CEBD25FD-DD4F-4D5F-B809-D50D02176F41} = {B3C4E4EC-68C7-4AFB-A6D4-1B2B0EB8C421}
diff --git a/source/SkiaSharpSource.Mac.sln b/source/SkiaSharpSource.Mac.sln
index c82b63f5..a123c3f8 100644
--- a/source/SkiaSharpSource.Mac.sln
+++ b/source/SkiaSharpSource.Mac.sln
@@ -83,6 +83,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HarfBuzzSharp.Desktop", "..
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Desktop", "..\binding\SkiaSharp.Desktop\SkiaSharp.Desktop.csproj", "{EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Gtk", "SkiaSharp.Views\SkiaSharp.Views.Gtk\SkiaSharp.Views.Gtk.csproj", "{67A502A4-E8B2-419A-811E-5A634B29C8D7}"
+EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Views.Desktop", "SkiaSharp.Views\SkiaSharp.Views.Desktop\SkiaSharp.Views.Desktop.csproj", "{E5A90865-C185-45AD-88D1-6DA7D6004B03}"
EndProject
Global
@@ -245,6 +247,10 @@ Global
{EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7}.Release|Any CPU.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}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -288,6 +294,7 @@ Global
{89736865-5272-4A42-A7FB-D802C6345502} = {DF72A8D3-0A12-49C9-BBD2-4ACC9EB1A544}
{2AE5D8C5-EAC6-4515-89F2-A4994B41C925} = {56AE868D-7AD9-4DFC-BD27-6BBA8DC9F75A}
{EB1BBDCC-FB07-40D5-8B9E-0079E2C2F2DF} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
+ {67A502A4-E8B2-419A-811E-5A634B29C8D7} = {F19E1537-81B2-4D4F-A69E-78DC73ACC141}
{E5A90865-C185-45AD-88D1-6DA7D6004B03} = {F19E1537-81B2-4D4F-A69E-78DC73ACC141}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution