diff --git a/Directory.build.props b/Directory.build.props new file mode 100644 index 000000000..5c32e9e62 --- /dev/null +++ b/Directory.build.props @@ -0,0 +1,70 @@ + + + Copyright (c) Daniel Luberda + MIT + https://github.com/luberda-molinet/FFImageLoading + https://raw.githubusercontent.com/luberda-molinet/FFImageLoading/master/icon.png + Daniel Luberda, Fabien Molinet + Daniel Luberda, Fabien Molinet + xamarin, android, ios, mac, windows, image, cache, caching, memory, bitmap, lru, load, loading, save, effects, photo + https://github.com/luberda-molinet/FFImageLoading/releases + false + + https://github.com/luberda-molinet/FFImageLoading + git + $(AssemblyName) ($(TargetFramework)) + en + 2.5.0 + AnyCPU + + 7.3 + $(NoWarn);1591;1701;1702;1705;VSX1000;NU1603 + + $(MSBuildProjectName.Contains('UnitTest')) + true + + + + false + true + true + portable + true + + + + full + true + + + + + + true + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + + + + + + + + + + + + + All + + + + + + + + All + + + \ No newline at end of file diff --git a/Directory.build.targets b/Directory.build.targets new file mode 100644 index 000000000..c46e85457 --- /dev/null +++ b/Directory.build.targets @@ -0,0 +1,39 @@ + + + $(DefineConstants);NETSTANDARD;PORTABLE + + + $(DefineConstants);NET;WPF;XAML + + + $(DefineConstants);NETFX_CORE;XAML;WINDOWS;WINDOWS_UWP + 10.0.16299.0 + 10.0.16299.0 + + + $(DefineConstants);MONO;UIKIT;COCOA;IOS + + + $(DefineConstants);MONO;COCOA;MAC + + + $(DefineConstants);MONO;COCOA;TVOS + + + $(DefineConstants);MONO;COCOA;WATCHOS + + + $(DefineConstants);MONO;ANDROID + Resources + Resource + Resources\Resource.designer.cs + + + $(DefineConstants);NETCOREAPP + + + $(DefineConstants);TIZEN + Tizen + v4.0 + + \ No newline at end of file diff --git a/FFImageLoading.Forms/FFImageLoading.Forms.csproj b/FFImageLoading.Forms/FFImageLoading.Forms.csproj new file mode 100644 index 000000000..0b012776e --- /dev/null +++ b/FFImageLoading.Forms/FFImageLoading.Forms.csproj @@ -0,0 +1,117 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading.Forms + FFImageLoading.Forms + Xamarin.FFImageLoading.Forms + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FFImageLoading.Forms/readme.txt b/FFImageLoading.Forms/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading.Forms/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj b/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj new file mode 100644 index 000000000..c7b2afb9e --- /dev/null +++ b/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj @@ -0,0 +1,118 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading.MvvmCross + FFImageLoading.MvvmCross + Xamarin.FFImageLoading.MvvmCross + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Cross/MvxCachedImageView.cs b/FFImageLoading.MvvmCross/MvxCachedImageView.cs similarity index 100% rename from source/FFImageLoading.Cross/MvxCachedImageView.cs rename to FFImageLoading.MvvmCross/MvxCachedImageView.cs diff --git a/source/FFImageLoading.Cross.Svg/MvxSvgCachedImageView.cs b/FFImageLoading.MvvmCross/MvxSvgCachedImageView.cs similarity index 100% rename from source/FFImageLoading.Cross.Svg/MvxSvgCachedImageView.cs rename to FFImageLoading.MvvmCross/MvxSvgCachedImageView.cs diff --git a/FFImageLoading.MvvmCross/readme.txt b/FFImageLoading.MvvmCross/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading.MvvmCross/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj b/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj new file mode 100644 index 000000000..686d41321 --- /dev/null +++ b/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj @@ -0,0 +1,115 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms + Xamarin.FFImageLoading.Svg.Forms + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FFImageLoading.Svg.Forms/readme.txt b/FFImageLoading.Svg.Forms/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading.Svg.Forms/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/FFImageLoading.Svg/FFImageLoading.Svg.csproj b/FFImageLoading.Svg/FFImageLoading.Svg.csproj new file mode 100644 index 000000000..45245aaf2 --- /dev/null +++ b/FFImageLoading.Svg/FFImageLoading.Svg.csproj @@ -0,0 +1,117 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading.Svg + FFImageLoading.Svg + Xamarin.FFImageLoading.Svg + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FFImageLoading.Svg/readme.txt b/FFImageLoading.Svg/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading.Svg/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj b/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj new file mode 100644 index 000000000..b070284e4 --- /dev/null +++ b/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj @@ -0,0 +1,113 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading.Transformations + FFImageLoading.Transformations + Xamarin.FFImageLoading.Transformations + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FFImageLoading.Transformations/readme.txt b/FFImageLoading.Transformations/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading.Transformations/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/FFImageLoading.sln b/FFImageLoading.sln index 38646eb5e..55a92e3aa 100644 --- a/FFImageLoading.sln +++ b/FFImageLoading.sln @@ -1,1321 +1,642 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27004.2002 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading", "source\FFImageLoading.Common\FFImageLoading.csproj", "{51CA3BE2-DF00-4F49-8054-E5C776992B61}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Shared", "source\FFImageLoading.Shared\FFImageLoading.Shared.shproj", "{E72AC4ED-03A8-465C-95A2-38B0544B37DB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Droid", "source\FFImageLoading.Droid\FFImageLoading.Droid.csproj", "{74BF9402-3E13-4003-8923-BC20A1294CE2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Touch", "source\FFImageLoading.Touch\FFImageLoading.Touch.csproj", "{1597F7D4-432C-4F26-B508-0F6FAF0B9711}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B48F3C95-B33F-4EF5-B223-06356D749A80}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.Android.Sample", "samples\ImageLoading.Sample\Simple.Android.Sample.csproj", "{F898A684-E9C1-4154-9F80-6037287233F5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Droid", "samples\ImageLoading.Forms.Sample\Droid\FFImageLoading.Forms.Sample.Droid.csproj", "{9F816002-DBA1-4175-A0CA-0DFD9E086786}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.iOS", "samples\ImageLoading.Forms.Sample\iOS\FFImageLoading.Forms.Sample.iOS.csproj", "{626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample", "samples\ImageLoading.Forms.Sample\Shared\FFImageLoading.Forms.Sample.csproj", "{3A682234-5918-4F58-B02B-598A59C6A7BD}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.Universal.Sample", "samples\Simple.WinUniversal.Sample\Simple.Universal.Sample.csproj", "{4B964916-47F4-4876-8A6B-9048B8A0D148}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.iOS.Sample", "samples\Simple.iOS.Sample\Simple.iOS.Sample.csproj", "{B67D0516-5951-4DE9-B07F-AD3407D8CA90}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Windows", "source\FFImageLoading.Windows\FFImageLoading.Windows.csproj", "{610543A5-D06F-4BCA-9443-E6ADDFF06C71}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Forms", "Forms", "{F7C14B24-556B-413B-B418-4CD194766A26}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms", "source\FFImageLoading.Forms\FFImageLoading.Forms.csproj", "{3D6C1F12-68D7-44C2-A7DE-8E7942627A01}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Droid", "source\FFImageLoading.Forms.Droid\FFImageLoading.Forms.Droid.csproj", "{7014FEB6-0338-4A47-B600-4A1B48127C5C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Touch", "source\FFImageLoading.Forms.Touch\FFImageLoading.Forms.Touch.csproj", "{1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.WinUWP", "source\FFImageLoading.Forms.WinUWP\FFImageLoading.Forms.WinUWP.csproj", "{B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transformations", "Transformations", "{8F977FC5-CA16-4EEF-9222-2C77F88A7125}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations", "source\FFImageLoading.Transformations\FFImageLoading.Transformations.csproj", "{E68FD3BB-5851-45CC-9B33-DE6AB28B9984}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Droid", "source\FFImageLoading.Transformations.Droid\FFImageLoading.Transformations.Droid.csproj", "{BD3CEB96-93D6-47BD-9474-01DFCD320897}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Touch", "source\FFImageLoading.Transformations.Touch\FFImageLoading.Transformations.Touch.csproj", "{A19942AA-BE22-4CF5-9173-4A78D6B0EB06}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MvvmCross", "MvvmCross", "{1AFB4004-0EB7-4518-9B65-F1008B7962FC}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Cross", "source\FFImageLoading.Cross\FFImageLoading.Cross.shproj", "{3C58B37D-EDB7-4778-AA48-F3AD9A571059}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Svg", "Svg", "{EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Touch", "source\FFImageLoading.Svg.Touch\FFImageLoading.Svg.Touch.csproj", "{AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Droid", "source\FFImageLoading.Svg.Droid\FFImageLoading.Svg.Droid.csproj", "{0BF13419-BA9C-4004-812C-EB22E41927D9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms", "source\FFImageLoading.Svg.Forms\FFImageLoading.Svg.Forms.csproj", "{DE555E87-187D-4768-8053-B2D3195B6792}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Svg.Shared", "source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.shproj", "{488664FA-5BC5-4868-9FC4-44DB7294EC5A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Touch", "source\FFImageLoading.Svg.Forms.Touch\FFImageLoading.Svg.Forms.Touch.csproj", "{A73A1EA8-E709-474D-9102-DCB2482950AB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Droid", "source\FFImageLoading.Svg.Forms.Droid\FFImageLoading.Svg.Forms.Droid.csproj", "{CCA629E9-55E3-414A-91AF-79A0CB845CD5}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Svg.Forms.Shared", "source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.shproj", "{3F817BAD-EDFB-44E3-A9EF-1FDED55ED787}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg", "source\FFImageLoading.Svg\FFImageLoading.Svg.csproj", "{E5C8FBB7-595D-43FE-B900-46027D0D4F69}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Windows", "source\FFImageLoading.Svg.Windows\FFImageLoading.Svg.Windows.csproj", "{5140739D-209C-41A7-9503-5D5733F4C091}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Windows", "source\FFImageLoading.Svg.Forms.Windows\FFImageLoading.Svg.Forms.Windows.csproj", "{6D4F9DFA-012E-4966-A6E8-01C3464B537E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{A420B061-9AF1-40EC-A728-60536C59031E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.Core", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.Core\FFImageLoading.MvvmCross.Sample.Core.csproj", "{087DE224-30F0-4FEF-A960-F93F04182BA6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.Droid", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.Droid\FFImageLoading.MvvmCross.Sample.Droid.csproj", "{A3760566-B91D-435F-94A6-31ADF4C7812F}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Cross.Svg", "source\FFImageLoading.Cross.Svg\FFImageLoading.Cross.Svg.shproj", "{60678181-1544-4276-9B2A-6239C1046EA5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.iOS", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.iOS\FFImageLoading.MvvmCross.Sample.iOS.csproj", "{8701A65C-0F63-4BE7-B3F7-D2365BB6366E}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Shared.IosMac", "source\FFImageLoading.Shared.IosMac\FFImageLoading.Shared.IosMac.shproj", "{26F4DB3B-EC7F-46DE-8D51-2CB4BA187A16}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Mac", "source\FFImageLoading.Forms.Mac\FFImageLoading.Forms.Mac.csproj", "{EC240D61-70B0-4561-BB43-F8FB8FD11BF2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Mac", "samples\ImageLoading.Forms.Sample\Mac\FFImageLoading.Forms.Sample.Mac.csproj", "{75D24499-446D-47DD-9C9A-295E40010CF1}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Tests", "source\Tests\FFImageLoading.Tests\FFImageLoading.Tests.csproj", "{844EF512-7E52-4515-AC00-5FF50800F2B5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mock", "source\FFImageLoading.Mock\FFImageLoading.Mock.csproj", "{32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mac", "source\FFImageLoading.Mac\FFImageLoading.Mac.csproj", "{91825F9F-8F2D-4848-8375-68FCAA8C0DC6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nuspec", "Nuspec", "{5C360F03-BA00-4697-B698-73682B8F510F}" - ProjectSection(SolutionItems) = preProject - nuget\Xamarin.FFImageLoading.Forms.nuspec = nuget\Xamarin.FFImageLoading.Forms.nuspec - nuget\Xamarin.FFImageLoading.nuspec = nuget\Xamarin.FFImageLoading.nuspec - nuget\Xamarin.FFImageLoading.Svg.Forms.nuspec = nuget\Xamarin.FFImageLoading.Svg.Forms.nuspec - nuget\Xamarin.FFImageLoading.Svg.nuspec = nuget\Xamarin.FFImageLoading.Svg.nuspec - nuget\Xamarin.FFImageLoading.Transformations.nuspec = nuget\Xamarin.FFImageLoading.Transformations.nuspec - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Mac", "source\FFImageLoading.Transformations.Mac\FFImageLoading.Transformations.Mac.csproj", "{CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Tizen", "source\FFImageLoading.Forms.Tizen\FFImageLoading.Forms.Tizen.csproj", "{FF334AE1-1B61-4979-8C8E-FD486B246859}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Tizen", "source\FFImageLoading.Transformations.Tizen\FFImageLoading.Transformations.Tizen.csproj", "{CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Tizen", "source\FFImageLoading.Svg.Tizen\FFImageLoading.Svg.Tizen.csproj", "{B27E52FA-74DC-42C7-ACBC-5A893271AFFE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Tizen", "source\FFImageLoading.Svg.Forms.Tizen\FFImageLoading.Svg.Forms.Tizen.csproj", "{CB1F7760-C8A6-40A3-9B90-F05628B62C2D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Tizen", "source\FFImageLoading.Tizen\FFImageLoading.Tizen.csproj", "{DCC22B65-C384-4101-B61B-1A8515D68F06}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Mac", "source\FFImageLoading.Svg.Mac\FFImageLoading.Svg.Mac.csproj", "{EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Mac", "source\FFImageLoading.Svg.Forms.Mac\FFImageLoading.Svg.Forms.Mac.csproj", "{411B82F4-4F6B-49A0-8E28-260FB65B386F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Mock", "source\FFImageLoading.Forms.Mock\FFImageLoading.Forms.Mock.csproj", "{957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Windows", "source\FFImageLoading.Transformations.Windows\FFImageLoading.Transformations.Windows.csproj", "{399E7E28-5A3D-471F-B6FC-D5770EBB6762}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Tizen", "samples\ImageLoading.Forms.Sample\Tizen\FFImageLoading.Forms.Sample.Tizen.csproj", "{26980B5F-05B3-4070-A2A7-28749166E44C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.TizenForms.Sample", "samples\Simple.TizenForms.Sample\Simple.TizenForms.Sample.csproj", "{01B928BA-5E3B-46C6-B172-624A60ECC534}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mac.Sample", "samples\FFImageLoading.Mac.Sample\FFImageLoading.Mac.Sample.csproj", "{8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.WinUWP", "samples\ImageLoading.Forms.Sample\WinUWP\FFImageLoading.Forms.Sample.WinUWP.csproj", "{8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}" -EndProject -Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{1597f7d4-432c-4f26-b508-0f6faf0b9711}*SharedItemsImports = 4 - source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{1597f7d4-432c-4f26-b508-0f6faf0b9711}*SharedItemsImports = 4 - source\FFImageLoading.Shared.IosMac\FFImageLoading.Shared.IosMac.projitems*{26f4db3b-ec7f-46de-8d51-2cb4ba187a16}*SharedItemsImports = 13 - source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{3c58b37d-edb7-4778-aa48-f3ad9a571059}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.projitems*{3f817bad-edfb-44e3-a9ef-1fded55ed787}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.projitems*{488664fa-5bc5-4868-9fc4-44db7294ec5a}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.projitems*{5140739d-209c-41a7-9503-5d5733f4c091}*SharedItemsImports = 4 - source\FFImageLoading.Cross.Svg\FFImageLoading.Cross.Svg.projitems*{60678181-1544-4276-9b2a-6239c1046ea5}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.projitems*{6d4f9dfa-012e-4966-a6e8-01c3464b537e}*SharedItemsImports = 4 - source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 - source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 - source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{e72ac4ed-03a8-465c-95a2-38b0544b37db}*SharedItemsImports = 13 - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|ARM = Debug|ARM - Debug|iPhone = Debug|iPhone - Debug|iPhoneSimulator = Debug|iPhoneSimulator - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|ARM = Release|ARM - Release|iPhone = Release|iPhone - Release|iPhoneSimulator = Release|iPhoneSimulator - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|ARM.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|ARM.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhone.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x64.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x64.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x86.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x86.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|Any CPU.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|ARM.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|ARM.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhone.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhone.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x64.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x64.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x86.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x86.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|ARM.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|ARM.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhone.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x64.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x64.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x86.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x86.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|Any CPU.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|ARM.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|ARM.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhone.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhone.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x64.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x64.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x86.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x86.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|ARM.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhone.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x64.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x64.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x86.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x86.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|Any CPU.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|ARM.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|ARM.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhone.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhone.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x64.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x64.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x86.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x86.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.Build.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.Deploy.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhone.Build.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.Build.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.Deploy.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.Build.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.Deploy.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|Any CPU.Deploy.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.Deploy.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhone.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhone.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.Deploy.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.Deploy.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.Deploy.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhone.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.Deploy.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.Deploy.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.Build.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.Deploy.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhone.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhone.Build.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.Build.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.Deploy.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.Build.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.Deploy.0 = Release|Any CPU - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhone.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhone.Build.0 = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|ARM.ActiveCfg = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhone.ActiveCfg = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhone.Build.0 = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|x64.ActiveCfg = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|x86.ActiveCfg = Release|iPhoneSimulator - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|ARM.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|ARM.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhone.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x64.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x64.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x86.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x86.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|ARM.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|ARM.Build.0 = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhone.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhone.Build.0 = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x64.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x64.Build.0 = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x86.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x86.Build.0 = Release|Any CPU - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.ActiveCfg = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.Deploy.0 = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.ActiveCfg = Debug|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.Build.0 = Debug|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.Deploy.0 = Debug|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|iPhone.ActiveCfg = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.ActiveCfg = Debug|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.Build.0 = Debug|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.Deploy.0 = Debug|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.ActiveCfg = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.Build.0 = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.Deploy.0 = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|Any CPU.ActiveCfg = Release|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.ActiveCfg = Release|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.Build.0 = Release|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.Deploy.0 = Release|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|iPhone.ActiveCfg = Release|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|iPhoneSimulator.ActiveCfg = Release|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.ActiveCfg = Release|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.Build.0 = Release|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.Deploy.0 = Release|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.ActiveCfg = Release|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.Build.0 = Release|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.Deploy.0 = Release|x86 - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|ARM.Build.0 = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhone.ActiveCfg = Debug|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhone.Build.0 = Debug|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x64.Build.0 = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x86.Build.0 = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|Any CPU.ActiveCfg = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|ARM.ActiveCfg = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|ARM.Build.0 = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhone.ActiveCfg = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhone.Build.0 = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x64.ActiveCfg = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x64.Build.0 = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.ActiveCfg = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.Build.0 = Release|iPhone - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|Any CPU.Build.0 = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|ARM.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|x64.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|x86.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|Any CPU.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|Any CPU.Build.0 = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|ARM.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|iPhone.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|x64.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|x86.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|ARM.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|ARM.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhone.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x64.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x64.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x86.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x86.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|Any CPU.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|ARM.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|ARM.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhone.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhone.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x64.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x64.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x86.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x86.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|ARM.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|ARM.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhone.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x64.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x64.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x86.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x86.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|Any CPU.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|ARM.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|ARM.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhone.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhone.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x64.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x64.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x86.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x86.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|ARM.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhone.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x64.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x64.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x86.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x86.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|Any CPU.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|ARM.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|ARM.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhone.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhone.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x64.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x64.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x86.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x86.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|ARM.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|ARM.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhone.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x64.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x64.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x86.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x86.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|Any CPU.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|ARM.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|ARM.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhone.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhone.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x64.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x64.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x86.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x86.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|ARM.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|ARM.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhone.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x64.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x64.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x86.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x86.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|Any CPU.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|ARM.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|ARM.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhone.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhone.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x64.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x64.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x86.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x86.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|ARM.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|ARM.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhone.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x64.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x64.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x86.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x86.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|Any CPU.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|ARM.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|ARM.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhone.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhone.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x64.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x64.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x86.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x86.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|ARM.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhone.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x64.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x64.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x86.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x86.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|Any CPU.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|ARM.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|ARM.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhone.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhone.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x64.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x64.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x86.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x86.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|ARM.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|ARM.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhone.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x64.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x64.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x86.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x86.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|Any CPU.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|ARM.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|ARM.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhone.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhone.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x64.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x64.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x86.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x86.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|ARM.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|ARM.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhone.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x64.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x64.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x86.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x86.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|Any CPU.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|ARM.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|ARM.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhone.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhone.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x64.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x64.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x86.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x86.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|ARM.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhone.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x64.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x64.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x86.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x86.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|Any CPU.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|ARM.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|ARM.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhone.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhone.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x64.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x64.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x86.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x86.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|ARM.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhone.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x64.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x64.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x86.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x86.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|Any CPU.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|ARM.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|ARM.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhone.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhone.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x64.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x64.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x86.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x86.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|ARM.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhone.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x64.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x64.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x86.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x86.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|Any CPU.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|ARM.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|ARM.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhone.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhone.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x64.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x64.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x86.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x86.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|ARM.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|ARM.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhone.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x64.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x64.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x86.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x86.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|Any CPU.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|ARM.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|ARM.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhone.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhone.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x64.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x64.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x86.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x86.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|ARM.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhone.Build.0 = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|x64.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|x86.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|Any CPU.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|ARM.ActiveCfg = Release|ARM - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|ARM.Build.0 = Release|ARM - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhone.ActiveCfg = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhone.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x64.ActiveCfg = Release|x64 - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x64.Build.0 = Release|x64 - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x86.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|ARM.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhone.Build.0 = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|x64.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|x86.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|Any CPU.Build.0 = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|ARM.ActiveCfg = Release|ARM - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|ARM.Build.0 = Release|ARM - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhone.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhone.Build.0 = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x64.ActiveCfg = Release|x64 - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x64.Build.0 = Release|x64 - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x86.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x86.Build.0 = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.Build.0 = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhone.Build.0 = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x64.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x64.Build.0 = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x86.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x86.Build.0 = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|ARM.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|ARM.Build.0 = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhone.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhone.Build.0 = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x64.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x64.Build.0 = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x86.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x86.Build.0 = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|ARM.Build.0 = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhone.Build.0 = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x64.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x64.Build.0 = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x86.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x86.Build.0 = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|ARM.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|ARM.Build.0 = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhone.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhone.Build.0 = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x64.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x64.Build.0 = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x86.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x86.Build.0 = Release|Any CPU - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|ARM.Build.0 = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhone.ActiveCfg = Debug|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhone.Build.0 = Debug|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x64.Build.0 = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x86.Build.0 = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|Any CPU.ActiveCfg = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|ARM.ActiveCfg = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|ARM.Build.0 = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhone.ActiveCfg = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhone.Build.0 = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x64.ActiveCfg = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x64.Build.0 = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x86.ActiveCfg = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x86.Build.0 = Release|iPhone - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|ARM.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|ARM.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhone.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x64.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x64.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x86.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x86.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|Any CPU.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|ARM.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|ARM.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhone.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhone.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x64.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x64.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x86.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x86.Build.0 = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|ARM.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|ARM.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhone.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x64.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x64.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x86.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x86.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|ARM.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|ARM.Build.0 = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhone.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhone.Build.0 = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x64.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x64.Build.0 = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x86.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x86.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|ARM.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|ARM.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhone.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x64.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x64.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x86.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x86.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|Any CPU.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|ARM.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|ARM.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhone.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhone.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x64.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x64.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x86.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x86.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|ARM.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|ARM.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhone.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x64.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x64.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x86.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x86.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|Any CPU.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|ARM.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|ARM.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhone.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhone.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x64.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x64.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x86.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x86.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|ARM.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|ARM.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhone.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x64.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x64.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x86.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x86.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|Any CPU.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|ARM.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|ARM.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhone.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhone.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x64.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x64.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x86.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x86.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|ARM.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhone.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x64.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x64.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x86.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x86.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|Any CPU.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|ARM.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|ARM.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhone.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhone.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x64.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x64.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x86.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x86.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|ARM.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|ARM.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhone.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x64.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x64.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x86.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x86.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|Any CPU.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|ARM.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|ARM.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhone.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhone.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x64.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x64.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x86.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x86.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|ARM.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhone.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x64.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x64.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x86.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x86.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|Any CPU.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|ARM.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|ARM.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhone.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhone.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x64.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x64.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x86.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x86.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|ARM.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|ARM.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhone.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x64.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x64.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x86.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x86.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|Any CPU.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|ARM.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|ARM.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhone.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhone.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x64.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x64.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x86.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x86.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|ARM.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhone.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x64.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x64.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x86.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x86.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|Any CPU.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|ARM.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|ARM.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhone.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhone.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x64.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x64.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x86.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x86.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|ARM.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhone.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x64.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x64.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x86.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x86.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|Any CPU.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|ARM.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|ARM.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhone.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhone.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x64.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x64.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x86.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x86.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|ARM.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|ARM.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhone.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x64.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x64.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x86.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x86.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|Any CPU.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|ARM.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|ARM.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhone.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhone.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x64.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x64.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x86.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x86.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|ARM.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|ARM.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhone.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x64.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x64.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x86.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x86.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|Any CPU.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|ARM.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|ARM.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhone.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhone.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x64.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x64.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x86.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x86.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|ARM.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|ARM.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhone.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x64.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x64.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x86.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x86.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|Any CPU.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|ARM.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|ARM.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhone.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhone.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x64.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x64.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x86.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x86.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|Any CPU.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|ARM.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|ARM.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhone.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x64.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x64.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x86.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x86.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|Any CPU.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|Any CPU.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|ARM.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|ARM.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhone.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhone.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x64.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x64.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x86.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x86.Build.0 = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|ARM.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|ARM.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhone.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x64.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x64.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x86.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x86.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|ARM.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|ARM.Build.0 = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhone.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhone.Build.0 = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x64.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x64.Build.0 = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x86.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x86.Build.0 = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|ARM.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|ARM.Build.0 = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhone.Build.0 = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x64.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x64.Build.0 = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x86.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x86.Build.0 = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|Any CPU.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|ARM.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|ARM.Build.0 = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhone.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhone.Build.0 = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x64.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x64.Build.0 = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x86.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x86.Build.0 = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|ARM.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|ARM.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhone.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x64.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x64.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x86.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x86.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|ARM.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|ARM.Build.0 = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhone.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhone.Build.0 = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x64.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x64.Build.0 = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x86.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x86.Build.0 = Release|Any CPU - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.ActiveCfg = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.Build.0 = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.Deploy.0 = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.ActiveCfg = Debug|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.Build.0 = Debug|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.Deploy.0 = Debug|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|iPhone.ActiveCfg = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.ActiveCfg = Debug|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.Build.0 = Debug|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.Deploy.0 = Debug|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.ActiveCfg = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.Build.0 = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.Deploy.0 = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|Any CPU.ActiveCfg = Release|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.ActiveCfg = Release|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.Build.0 = Release|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.Deploy.0 = Release|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|iPhone.ActiveCfg = Release|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|iPhoneSimulator.ActiveCfg = Release|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.ActiveCfg = Release|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.Build.0 = Release|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.Deploy.0 = Release|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.ActiveCfg = Release|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Build.0 = Release|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Deploy.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {F898A684-E9C1-4154-9F80-6037287233F5} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {9F816002-DBA1-4175-A0CA-0DFD9E086786} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {3A682234-5918-4F58-B02B-598A59C6A7BD} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {4B964916-47F4-4876-8A6B-9048B8A0D148} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {B67D0516-5951-4DE9-B07F-AD3407D8CA90} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} = {F7C14B24-556B-413B-B418-4CD194766A26} - {7014FEB6-0338-4A47-B600-4A1B48127C5C} = {F7C14B24-556B-413B-B418-4CD194766A26} - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} = {F7C14B24-556B-413B-B418-4CD194766A26} - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659} = {F7C14B24-556B-413B-B418-4CD194766A26} - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {BD3CEB96-93D6-47BD-9474-01DFCD320897} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {3C58B37D-EDB7-4778-AA48-F3AD9A571059} = {1AFB4004-0EB7-4518-9B65-F1008B7962FC} - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {0BF13419-BA9C-4004-812C-EB22E41927D9} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {DE555E87-187D-4768-8053-B2D3195B6792} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {488664FA-5BC5-4868-9FC4-44DB7294EC5A} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {A73A1EA8-E709-474D-9102-DCB2482950AB} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {CCA629E9-55E3-414A-91AF-79A0CB845CD5} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {3F817BAD-EDFB-44E3-A9EF-1FDED55ED787} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {E5C8FBB7-595D-43FE-B900-46027D0D4F69} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {5140739D-209C-41A7-9503-5D5733F4C091} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {6D4F9DFA-012E-4966-A6E8-01C3464B537E} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {087DE224-30F0-4FEF-A960-F93F04182BA6} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {A3760566-B91D-435F-94A6-31ADF4C7812F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {60678181-1544-4276-9B2A-6239C1046EA5} = {1AFB4004-0EB7-4518-9B65-F1008B7962FC} - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} = {F7C14B24-556B-413B-B418-4CD194766A26} - {75D24499-446D-47DD-9C9A-295E40010CF1} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {844EF512-7E52-4515-AC00-5FF50800F2B5} = {A420B061-9AF1-40EC-A728-60536C59031E} - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {FF334AE1-1B61-4979-8C8E-FD486B246859} = {F7C14B24-556B-413B-B418-4CD194766A26} - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {411B82F4-4F6B-49A0-8E28-260FB65B386F} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4} = {F7C14B24-556B-413B-B418-4CD194766A26} - {399E7E28-5A3D-471F-B6FC-D5770EBB6762} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {26980B5F-05B3-4070-A2A7-28749166E44C} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {01B928BA-5E3B-46C6-B172-624A60ECC534} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {4BF56189-8DC5-41A9-9440-3C7B9F57E151} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29318.209 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B48F3C95-B33F-4EF5-B223-06356D749A80}" + ProjectSection(SolutionItems) = preProject + samples\Directory.build.props = samples\Directory.build.props + samples\Directory.build.targets = samples\Directory.build.targets + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.Android.Sample", "samples\ImageLoading.Sample\Simple.Android.Sample.csproj", "{F898A684-E9C1-4154-9F80-6037287233F5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Droid", "samples\ImageLoading.Forms.Sample\Droid\FFImageLoading.Forms.Sample.Droid.csproj", "{9F816002-DBA1-4175-A0CA-0DFD9E086786}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.iOS", "samples\ImageLoading.Forms.Sample\iOS\FFImageLoading.Forms.Sample.iOS.csproj", "{626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Forms.Sample", "samples\ImageLoading.Forms.Sample\Shared\FFImageLoading.Forms.Sample.csproj", "{3A682234-5918-4F58-B02B-598A59C6A7BD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.Universal.Sample", "samples\Simple.WinUniversal.Sample\Simple.Universal.Sample.csproj", "{4B964916-47F4-4876-8A6B-9048B8A0D148}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.iOS.Sample", "samples\Simple.iOS.Sample\Simple.iOS.Sample.csproj", "{B67D0516-5951-4DE9-B07F-AD3407D8CA90}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.Core", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.Core\FFImageLoading.MvvmCross.Sample.Core.csproj", "{087DE224-30F0-4FEF-A960-F93F04182BA6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.Droid", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.Droid\FFImageLoading.MvvmCross.Sample.Droid.csproj", "{A3760566-B91D-435F-94A6-31ADF4C7812F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.iOS", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.iOS\FFImageLoading.MvvmCross.Sample.iOS.csproj", "{8701A65C-0F63-4BE7-B3F7-D2365BB6366E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Mac", "samples\ImageLoading.Forms.Sample\Mac\FFImageLoading.Forms.Sample.Mac.csproj", "{75D24499-446D-47DD-9C9A-295E40010CF1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Tests", "source\Tests\FFImageLoading.Tests\FFImageLoading.Tests.csproj", "{844EF512-7E52-4515-AC00-5FF50800F2B5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nuspec", "Nuspec", "{5C360F03-BA00-4697-B698-73682B8F510F}" + ProjectSection(SolutionItems) = preProject + nuget\Xamarin.FFImageLoading.Forms.nuspec = nuget\Xamarin.FFImageLoading.Forms.nuspec + nuget\Xamarin.FFImageLoading.nuspec = nuget\Xamarin.FFImageLoading.nuspec + nuget\Xamarin.FFImageLoading.Svg.Forms.nuspec = nuget\Xamarin.FFImageLoading.Svg.Forms.nuspec + nuget\Xamarin.FFImageLoading.Svg.nuspec = nuget\Xamarin.FFImageLoading.Svg.nuspec + nuget\Xamarin.FFImageLoading.Transformations.nuspec = nuget\Xamarin.FFImageLoading.Transformations.nuspec + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Forms.Sample.Tizen", "samples\ImageLoading.Forms.Sample\Tizen\FFImageLoading.Forms.Sample.Tizen.csproj", "{26980B5F-05B3-4070-A2A7-28749166E44C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Simple.TizenForms.Sample", "samples\Simple.TizenForms.Sample\Simple.TizenForms.Sample.csproj", "{01B928BA-5E3B-46C6-B172-624A60ECC534}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mac.Sample", "samples\FFImageLoading.Mac.Sample\FFImageLoading.Mac.Sample.csproj", "{8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.WinUWP", "samples\ImageLoading.Forms.Sample\WinUWP\FFImageLoading.Forms.Sample.WinUWP.csproj", "{8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Wpf", "samples\ImageLoading.Forms.Sample\Wpf\FFImageLoading.Forms.Sample.Wpf.csproj", "{9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionItems", "{D3951530-EEDE-4F9C-BACC-0DEF2BDB879D}" + ProjectSection(SolutionItems) = preProject + build.cake = build.cake + Directory.build.props = Directory.build.props + Directory.build.targets = Directory.build.targets + global.json = global.json + README.md = README.md + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading", "FFImageLoading\FFImageLoading.csproj", "{1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Forms", "FFImageLoading.Forms\FFImageLoading.Forms.csproj", "{31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.MvvmCross", "FFImageLoading.MvvmCross\FFImageLoading.MvvmCross.csproj", "{E4083182-0C9F-49AC-BB91-238FCF9766AC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Svg", "FFImageLoading.Svg\FFImageLoading.Svg.csproj", "{F34D2449-A570-40CA-97E9-AE0653451C2C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Svg.Forms", "FFImageLoading.Svg.Forms\FFImageLoading.Svg.Forms.csproj", "{7308034E-C291-47B2-B34A-083B80C1F5E1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Transformations", "FFImageLoading.Transformations\FFImageLoading.Transformations.csproj", "{0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|iPhone = Debug|iPhone + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|iPhone = Release|iPhone + Release|iPhoneSimulator = Release|iPhoneSimulator + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.Build.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.Deploy.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhone.Build.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.Build.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.Deploy.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.Build.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.Deploy.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.Build.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.Deploy.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhone.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhone.Build.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.Build.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.Deploy.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.Build.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.Deploy.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.Deploy.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhone.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.Deploy.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.Deploy.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.Build.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.Deploy.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhone.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhone.Build.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.Build.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.Deploy.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.Build.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.Deploy.0 = Release|Any CPU + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhone.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhone.Build.0 = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|ARM.ActiveCfg = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhone.ActiveCfg = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhone.Build.0 = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|x64.ActiveCfg = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|x86.ActiveCfg = Release|iPhoneSimulator + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|ARM.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|ARM.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhone.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x64.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x64.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x86.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x86.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|ARM.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|ARM.Build.0 = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhone.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhone.Build.0 = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x64.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x64.Build.0 = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x86.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x86.Build.0 = Release|Any CPU + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.ActiveCfg = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.Build.0 = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.Deploy.0 = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.ActiveCfg = Debug|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.Build.0 = Debug|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.Deploy.0 = Debug|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|iPhone.ActiveCfg = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.ActiveCfg = Debug|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.Build.0 = Debug|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.Deploy.0 = Debug|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.ActiveCfg = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.Build.0 = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.Deploy.0 = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|Any CPU.ActiveCfg = Release|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.ActiveCfg = Release|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.Build.0 = Release|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.Deploy.0 = Release|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|iPhone.ActiveCfg = Release|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|iPhoneSimulator.ActiveCfg = Release|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.ActiveCfg = Release|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.Build.0 = Release|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.Deploy.0 = Release|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.ActiveCfg = Release|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.Build.0 = Release|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.Deploy.0 = Release|x86 + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|ARM.Build.0 = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhone.ActiveCfg = Debug|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhone.Build.0 = Debug|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x64.Build.0 = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x86.Build.0 = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|Any CPU.ActiveCfg = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|ARM.ActiveCfg = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|ARM.Build.0 = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhone.ActiveCfg = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhone.Build.0 = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x64.ActiveCfg = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x64.Build.0 = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.ActiveCfg = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.Build.0 = Release|iPhone + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.Build.0 = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhone.Build.0 = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x64.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x64.Build.0 = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x86.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x86.Build.0 = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|ARM.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|ARM.Build.0 = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhone.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhone.Build.0 = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x64.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x64.Build.0 = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x86.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x86.Build.0 = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|ARM.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhone.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x64.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x64.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x86.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x86.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|ARM.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|ARM.Build.0 = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhone.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhone.Build.0 = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x64.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x64.Build.0 = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x86.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x86.Build.0 = Release|Any CPU + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|ARM.Build.0 = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhone.ActiveCfg = Debug|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhone.Build.0 = Debug|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x64.Build.0 = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x86.Build.0 = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|Any CPU.ActiveCfg = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|ARM.ActiveCfg = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|ARM.Build.0 = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhone.ActiveCfg = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhone.Build.0 = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x64.ActiveCfg = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x64.Build.0 = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x86.ActiveCfg = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x86.Build.0 = Release|iPhone + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|ARM.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|ARM.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhone.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x64.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x64.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x86.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x86.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|ARM.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|ARM.Build.0 = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhone.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhone.Build.0 = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x64.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x64.Build.0 = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x86.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x86.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|ARM.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|ARM.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhone.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x64.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x64.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x86.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x86.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|Any CPU.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|ARM.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|ARM.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhone.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhone.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x64.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x64.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x86.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x86.Build.0 = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|ARM.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhone.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x64.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x64.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x86.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x86.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|ARM.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|ARM.Build.0 = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhone.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhone.Build.0 = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x64.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x64.Build.0 = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x86.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x86.Build.0 = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|ARM.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|ARM.Build.0 = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhone.Build.0 = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x64.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x64.Build.0 = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x86.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x86.Build.0 = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|ARM.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|ARM.Build.0 = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhone.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhone.Build.0 = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x64.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x64.Build.0 = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x86.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x86.Build.0 = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|ARM.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|ARM.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhone.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x64.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x64.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x86.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x86.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|ARM.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|ARM.Build.0 = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhone.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhone.Build.0 = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x64.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x64.Build.0 = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x86.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x86.Build.0 = Release|Any CPU + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.ActiveCfg = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.Build.0 = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.Deploy.0 = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.ActiveCfg = Debug|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.Build.0 = Debug|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.Deploy.0 = Debug|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|iPhone.ActiveCfg = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.ActiveCfg = Debug|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.Build.0 = Debug|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.Deploy.0 = Debug|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.ActiveCfg = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.Build.0 = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.Deploy.0 = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|Any CPU.ActiveCfg = Release|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.ActiveCfg = Release|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.Build.0 = Release|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.Deploy.0 = Release|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|iPhone.ActiveCfg = Release|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|iPhoneSimulator.ActiveCfg = Release|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.ActiveCfg = Release|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.Build.0 = Release|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.Deploy.0 = Release|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.ActiveCfg = Release|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Build.0 = Release|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Deploy.0 = Release|x86 + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|ARM.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhone.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x64.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x64.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhone.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhone.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x64.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x64.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|ARM.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|ARM.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|iPhone.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|x64.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|x64.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|x86.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|x86.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|Any CPU.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|ARM.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|ARM.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|iPhone.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|iPhone.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|x64.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|x64.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|x86.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|x86.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|ARM.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|ARM.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|iPhone.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|x64.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|x64.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|x86.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|x86.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|Any CPU.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|ARM.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|ARM.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|iPhone.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|iPhone.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|x64.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|x64.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|x86.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|x86.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|ARM.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|ARM.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|iPhone.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|x64.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|x64.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|x86.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|x86.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|Any CPU.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|ARM.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|ARM.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|iPhone.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|iPhone.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|x64.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|x64.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|x86.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|x86.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|ARM.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|iPhone.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|x64.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|x64.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|x86.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|x86.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|Any CPU.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|ARM.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|ARM.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|iPhone.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|iPhone.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|x64.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|x64.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|x86.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|x86.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|ARM.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|ARM.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|iPhone.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|x64.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|x64.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|x86.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|x86.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|Any CPU.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|ARM.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|ARM.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|iPhone.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|iPhone.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|x64.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|x64.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|x86.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|x86.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|ARM.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|iPhone.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|x64.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|x64.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|x86.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|x86.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|Any CPU.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|ARM.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|ARM.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|iPhone.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|iPhone.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|x64.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|x64.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|x86.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {F898A684-E9C1-4154-9F80-6037287233F5} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {9F816002-DBA1-4175-A0CA-0DFD9E086786} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {3A682234-5918-4F58-B02B-598A59C6A7BD} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {4B964916-47F4-4876-8A6B-9048B8A0D148} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {B67D0516-5951-4DE9-B07F-AD3407D8CA90} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {087DE224-30F0-4FEF-A960-F93F04182BA6} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {A3760566-B91D-435F-94A6-31ADF4C7812F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {75D24499-446D-47DD-9C9A-295E40010CF1} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {26980B5F-05B3-4070-A2A7-28749166E44C} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {01B928BA-5E3B-46C6-B172-624A60ECC534} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4BF56189-8DC5-41A9-9440-3C7B9F57E151} + EndGlobalSection +EndGlobal diff --git a/FFImageLoading/FFImageLoading.csproj b/FFImageLoading/FFImageLoading.csproj new file mode 100644 index 000000000..b7b60e794 --- /dev/null +++ b/FFImageLoading/FFImageLoading.csproj @@ -0,0 +1,109 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading + FFImageLoading + Xamarin.FFImageLoading + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FFImageLoading/readme.txt b/FFImageLoading/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md index a749837bd..fa04eb5c1 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015 Daniel Luberda & Fabien Molinet +Copyright (c) 2019 Daniel Luberda & Fabien Molinet Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/README.md b/README.md index dbf9cca20..e62ea5685 100644 --- a/README.md +++ b/README.md @@ -1,88 +1,88 @@ # FFImageLoading - Fast & Furious Image Loading -[![AppVeyor][ci-img]][ci-link] Buy Me A Coffee - -Library to load images quickly & easily on Xamarin.iOS, Xamarin.Android, Xamarin.Forms, Xamarin.Mac / Xamarin.Tizen and Windows (UWP, WinRT). - -*Authors: Daniel Luberda, Fabien Molinet. If you would like to help maintaining the project, just let us know!* - -| iOS / Android / Mac / Windows / Tizen | Xamarin.Forms | -|:--------------------------------:|:-------------:| -| [![NuGet][ffil-img]][ffil-link] [![NuGet][preffil-img]][preffil-link] | [![NuGet][forms-img]][forms-link] [![NuGet][preforms-img]][preforms-link] | -| [![][demo-droid-img]][demo-droid-src] [![][demo-win-img]][demo-win-src] [![][demo-mvvmcross-img]][demo-mvvmcross-src] | [![][demo-forms-img]][demo-forms-src] | - -| Addon | iOS / Android / Mac / Tizen / Windows | Xamarin.Forms | -|:-----:|:-----------------------:|:-------------:| -| Transformations | [![NuGet][trans-img]][trans-link] [![NuGet][pretrans-img]][pretrans-link] | [![NuGet][trans-img]][trans-link] [![NuGet][pretrans-img]][pretrans-link] | -| SVG support | [![NuGet][svg-img]][svg-link] [![NuGet][presvg-img]][presvg-link] | [![NuGet][svgforms-img]][svgforms-link] [![NuGet][presvgforms-img]][presvgforms-link] | - -[![NuGet][ffimageloading]][ffimageloading_large] - -## Features - -- Xamarin.iOS, Xamarin.Android, Xamarin.Forms, Xamarin.Mac, Xamarin.Tizen and Windows (WinRT, UWP) support -- Configurable disk and memory caching -- Multiple image views using the same image source (url, path, resource) will use only one bitmap which is cached in memory (less memory usage) -- Deduplication of similar download/load requests. *(If 100 similar requests arrive at same time then one real loading will be performed while 99 others will wait).* -- Error and loading placeholders support -- Images can be automatically downsampled to specified size (less memory usage) -- Fluent API which is inspired by Picasso naming -- SVG / WebP / GIF support -- Image loading Fade-In animations support -- Can retry image downloads (RetryCount, RetryDelay) -- Android bitmap optimization. Saves 50% of memory by trying not to use transparency channel when possible. -- Transformations support - - BlurredTransformation - - CircleTransformation, RoundedTransformation, CornersTransformation, CropTransformation - - ColorSpaceTransformation, GrayscaleTransformation, SepiaTransformation, TintTransformation - - FlipTransformation, RotateTransformation - - Supports custom transformations (native platform `ITransformation` implementations) - -## Documentation - -https://github.com/luberda-molinet/FFImageLoading/wiki - -[what-is-this]: various_images_and_image_links - -[ci-img]: https://img.shields.io/appveyor/ci/daniel-luberda/ffimageloading.svg -[ci-link]: https://ci.appveyor.com/project/daniel-luberda/ffimageloading - -[donate-img]: https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png -[donate-link]: https://www.buymeacoffee.com/AU3KQCy6N - -[ffil-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.svg -[ffil-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading -[forms-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Forms.svg -[forms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Forms -[trans-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Transformations.svg -[trans-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Transformations -[svg-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Svg.svg -[svg-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg -[svgforms-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Svg.Forms.svg -[svgforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg.Forms - -[preffil-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.svg -[preffil-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading -[preforms-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Forms.svg -[preforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Forms -[pretrans-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Transformations.svg -[pretrans-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Transformations -[presvg-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Svg.svg -[presvg-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg -[presvgforms-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Svg.Forms.svg -[presvgforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg.Forms - -[ffimageloading_large]: https://raw.githubusercontent.com/luberda-molinet/FFImageLoading/master/samples/Screenshots/ffimageloading_large.png -[ffimageloading]: https://raw.githubusercontent.com/luberda-molinet/FFImageLoading/master/samples/Screenshots/ffimageloading.png - -[demo-forms-img]: https://img.shields.io/badge/demo-xamarin.forms-orange.svg -[demo-forms-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.Forms.Sample -[demo-droid-img]: https://img.shields.io/badge/demo-android-orange.svg -[demo-droid-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.MvvmCross.Sample -[demo-mvvmcross-img]: https://img.shields.io/badge/demo-mvvmcross-orange.svg -[demo-mvvmcross-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.Sample -[demo-win-img]: https://img.shields.io/badge/demo-win-orange.svg -[demo-win-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/Simple.WinPhone.Sample -[dev-nugets-img]: https://img.shields.io/badge/nugets-dev-yellow.svg -[dev-nugets]: https://github.com/luberda-molinet/FFImageLoading/wiki/Dev-NuGet-packages - +[![AppVeyor][ci-img]][ci-link] Buy Me A Coffee + +Library to load images quickly & easily on Xamarin.iOS, Xamarin.Android, Xamarin.Forms, Xamarin.Mac / Xamarin.Tizen and Windows (UWP, WinRT). + +*Authors: Daniel Luberda, Fabien Molinet. If you would like to help maintaining the project, just let us know!* + +| iOS / Android / Mac / Windows / Tizen | Xamarin.Forms | +|:--------------------------------:|:-------------:| +| [![NuGet][ffil-img]][ffil-link] [![NuGet][preffil-img]][preffil-link] | [![NuGet][forms-img]][forms-link] [![NuGet][preforms-img]][preforms-link] | +| [![][demo-droid-img]][demo-droid-src] [![][demo-win-img]][demo-win-src] [![][demo-mvvmcross-img]][demo-mvvmcross-src] | [![][demo-forms-img]][demo-forms-src] | + +| Addon | iOS / Android / Mac / Tizen / Windows | Xamarin.Forms | +|:-----:|:-----------------------:|:-------------:| +| Transformations | [![NuGet][trans-img]][trans-link] [![NuGet][pretrans-img]][pretrans-link] | [![NuGet][trans-img]][trans-link] [![NuGet][pretrans-img]][pretrans-link] | +| SVG support | [![NuGet][svg-img]][svg-link] [![NuGet][presvg-img]][presvg-link] | [![NuGet][svgforms-img]][svgforms-link] [![NuGet][presvgforms-img]][presvgforms-link] | + +[![NuGet][ffimageloading]][ffimageloading_large] + +## Features + +- Xamarin.iOS, Xamarin.Android, Xamarin.Forms, Xamarin.Mac, Xamarin.Tizen and Windows (WinRT, UWP) support +- Configurable disk and memory caching +- Multiple image views using the same image source (url, path, resource) will use only one bitmap which is cached in memory (less memory usage) +- Deduplication of similar download/load requests. *(If 100 similar requests arrive at same time then one real loading will be performed while 99 others will wait).* +- Error and loading placeholders support +- Images can be automatically downsampled to specified size (less memory usage) +- Fluent API which is inspired by Picasso naming +- SVG / WebP / GIF support +- Image loading Fade-In animations support +- Can retry image downloads (RetryCount, RetryDelay) +- Android bitmap optimization. Saves 50% of memory by trying not to use transparency channel when possible. +- Transformations support + - BlurredTransformation + - CircleTransformation, RoundedTransformation, CornersTransformation, CropTransformation + - ColorSpaceTransformation, GrayscaleTransformation, SepiaTransformation, TintTransformation + - FlipTransformation, RotateTransformation + - Supports custom transformations (native platform `ITransformation` implementations) + +## Documentation + +https://github.com/luberda-molinet/FFImageLoading/wiki + +[what-is-this]: various_images_and_image_links + +[ci-img]: https://img.shields.io/appveyor/ci/daniel-luberda/ffimageloading.svg +[ci-link]: https://ci.appveyor.com/project/daniel-luberda/ffimageloading + +[donate-img]: https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png +[donate-link]: https://www.buymeacoffee.com/AU3KQCy6N + +[ffil-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.svg +[ffil-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading +[forms-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Forms.svg +[forms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Forms +[trans-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Transformations.svg +[trans-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Transformations +[svg-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Svg.svg +[svg-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg +[svgforms-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Svg.Forms.svg +[svgforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg.Forms + +[preffil-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.svg +[preffil-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading +[preforms-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Forms.svg +[preforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Forms +[pretrans-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Transformations.svg +[pretrans-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Transformations +[presvg-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Svg.svg +[presvg-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg +[presvgforms-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Svg.Forms.svg +[presvgforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg.Forms + +[ffimageloading_large]: https://raw.githubusercontent.com/luberda-molinet/FFImageLoading/master/samples/Screenshots/ffimageloading_large.png +[ffimageloading]: https://raw.githubusercontent.com/luberda-molinet/FFImageLoading/master/samples/Screenshots/ffimageloading.png + +[demo-forms-img]: https://img.shields.io/badge/demo-xamarin.forms-orange.svg +[demo-forms-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.Forms.Sample +[demo-droid-img]: https://img.shields.io/badge/demo-android-orange.svg +[demo-droid-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.MvvmCross.Sample +[demo-mvvmcross-img]: https://img.shields.io/badge/demo-mvvmcross-orange.svg +[demo-mvvmcross-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.Sample +[demo-win-img]: https://img.shields.io/badge/demo-win-orange.svg +[demo-win-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/Simple.WinPhone.Sample +[dev-nugets-img]: https://img.shields.io/badge/nugets-dev-yellow.svg +[dev-nugets]: https://github.com/luberda-molinet/FFImageLoading/wiki/Dev-NuGet-packages + diff --git a/global.json b/global.json new file mode 100644 index 000000000..6c7a82eea --- /dev/null +++ b/global.json @@ -0,0 +1,5 @@ +{ + "msbuild-sdks": { + "MSBuild.Sdk.Extras": "2.0.46" + } +} \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 000000000..7a8dc1428 Binary files /dev/null and b/icon.png differ diff --git a/samples/Directory.build.props b/samples/Directory.build.props new file mode 100644 index 000000000..2b17a3247 --- /dev/null +++ b/samples/Directory.build.props @@ -0,0 +1,18 @@ + + + Copyright (c) Daniel Luberda + Daniel Luberda, Fabien Molinet + Daniel Luberda, Fabien Molinet + $(AssemblyName) ($(TargetFramework)) + en + 1.0.0 + + latest + $(NoWarn);1591;1701;1702;1705;VSX1000;NU1603 + + AnyCPU + full + + $(MSBuildProjectName.Contains('.Forms')) + + \ No newline at end of file diff --git a/samples/Directory.build.targets b/samples/Directory.build.targets new file mode 100644 index 000000000..4dd262a5a --- /dev/null +++ b/samples/Directory.build.targets @@ -0,0 +1,39 @@ + + + $(DefineConstants);NETSTANDARD;PORTABLE + + + $(DefineConstants);NET;WPF;XAML + + + $(DefineConstants);NETFX_CORE;XAML;WINDOWS;WINDOWS_UWP + 10.0.16299.0 + 10.0.16299.0 + + + $(DefineConstants);MONO;UIKIT;COCOA;IOS + + + $(DefineConstants);MONO;COCOA;MAC + + + $(DefineConstants);MONO;COCOA;TVOS + + + $(DefineConstants);MONO;COCOA;WATCHOS + + + $(DefineConstants);MONO;ANDROID + Resources + Resource + Resources\Resource.designer.cs + + + $(DefineConstants);NETCOREAPP + + + $(DefineConstants);TIZEN + Tizen + v4.0 + + \ No newline at end of file diff --git a/samples/FFImageLoading.Mac.Sample/FFImageLoading.Mac.Sample.csproj b/samples/FFImageLoading.Mac.Sample/FFImageLoading.Mac.Sample.csproj index e19c816d6..67e8b649e 100644 --- a/samples/FFImageLoading.Mac.Sample/FFImageLoading.Mac.Sample.csproj +++ b/samples/FFImageLoading.Mac.Sample/FFImageLoading.Mac.Sample.csproj @@ -1,101 +1,94 @@ - - - - Debug - AnyCPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Exe - FFImageLoading.Mac.Sample - FFImageLoading.Mac.Sample - v2.0 - Xamarin.Mac - Resources - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - Mac Developer - false - false - false - true - true - HttpClientHandler - None - - None - - - pdbonly - true - bin\Release - - prompt - 4 - false - true - false - true - true - true - SdkOnly - HttpClientHandler - - None - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ViewController.cs - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - + + + + Debug + AnyCPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Exe + FFImageLoading.Mac.Sample + FFImageLoading.Mac.Sample + v2.0 + Xamarin.Mac + Resources + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + false + Mac Developer + false + false + false + true + true + HttpClientHandler + None + + + None + + + pdbonly + true + bin\Release + + + prompt + 4 + false + true + false + true + true + true + SdkOnly + HttpClientHandler + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ViewController.cs + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj b/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj index 9e69cbe8d..c92bca50b 100644 --- a/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj +++ b/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj @@ -1,314 +1,102 @@ - - - - - Debug - AnyCPU - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {9F816002-DBA1-4175-A0CA-0DFD9E086786} - Library - FFImageLoading.Forms.Sample.Droid - Assets - Resources - Resource - Resources\Resource.designer.cs - True - FFImageLoading.Forms.Sample.Droid - Properties\AndroidManifest.xml - v9.0 - 1G - - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - None - false - 1G - armeabi-v7a;x86;x86_64 - Xamarin.Android.Net.AndroidClientHandler - btls - true - - - full - true - bin\Release - prompt - 4 - false - false - 1G - Xamarin.Android.Net.AndroidClientHandler - btls - true - - - - - - - - - - ..\..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\..\packages\Xamarin.Android.Support.Exif.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Exif.dll - - - ..\..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll - - - ..\..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Transition.dll - - - ..\..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.Palette.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll - - - ..\..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Design.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.MediaRouter.dll - - - ..\..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\FormsViewGroup.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Core.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.Android.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Xaml.dll - - - - ..\..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll - - - ..\..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll - - - ..\..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll - - - ..\..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll - - - ..\..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll - - - ..\..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll - - - ..\..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll - - - ..\..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll - - - ..\..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll - - - ..\..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll - - - ..\..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll - - - ..\..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - - - ..\..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomTabs.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {3A682234-5918-4F58-B02B-598A59C6A7BD} - FFImageLoading.Forms.Sample - - - {7014FEB6-0338-4A47-B600-4A1B48127C5C} - FFImageLoading.Forms.Droid - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {BD3CEB96-93D6-47BD-9474-01DFCD320897} - FFImageLoading.Transformations.Droid - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - {0BF13419-BA9C-4004-812C-EB22E41927D9} - FFImageLoading.Svg.Droid - - - {CCA629E9-55E3-414A-91AF-79A0CB845CD5} - FFImageLoading.Svg.Forms.Droid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + Debug + AnyCPU + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {9F816002-DBA1-4175-A0CA-0DFD9E086786} + Library + FFImageLoading.Forms.Sample.Droid + Assets + Resources + Resource + Resources\Resource.designer.cs + True + FFImageLoading.Forms.Sample.Droid + Properties\AndroidManifest.xml + v9.0 + 1G + + + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + None + false + 1G + armeabi-v7a;x86;x86_64 + Xamarin.Android.Net.AndroidClientHandler + btls + true + false + false + false + false + true + d8 + r8 + + + full + true + bin\Release + prompt + 4 + false + false + 1G + Xamarin.Android.Net.AndroidClientHandler + btls + true + false + false + false + false + true + d8 + r8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Droid/Properties/AndroidManifest.xml b/samples/ImageLoading.Forms.Sample/Droid/Properties/AndroidManifest.xml index 164d65108..7800fa862 100644 --- a/samples/ImageLoading.Forms.Sample/Droid/Properties/AndroidManifest.xml +++ b/samples/ImageLoading.Forms.Sample/Droid/Properties/AndroidManifest.xml @@ -1,6 +1,6 @@  - - + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Droid/app.config b/samples/ImageLoading.Forms.Sample/Droid/app.config deleted file mode 100644 index 86de0f2b6..000000000 --- a/samples/ImageLoading.Forms.Sample/Droid/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Droid/packages.config b/samples/ImageLoading.Forms.Sample/Droid/packages.config deleted file mode 100644 index 58a1600e9..000000000 --- a/samples/ImageLoading.Forms.Sample/Droid/packages.config +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj b/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj index 1b5f38b00..5729d0f24 100644 --- a/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj +++ b/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj @@ -1,162 +1,111 @@ - - - - - Debug - AnyCPU - {75D24499-446D-47DD-9C9A-295E40010CF1} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Exe - FFImageLoading.Forms.Sample.Mac - FFImageLoading.Forms.Sample.Mac - v2.0 - Xamarin.Mac - Resources - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - Mac Developer - false - false - false - true - true - - - - 3rd Party Mac Developer Installer - None - - - pdbonly - true - bin\Release - - prompt - 4 - false - true - false - true - true - true - SdkOnly - - - None - - - - - - - ..\..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.Mac20\WebP.Mac.dll - - - ..\..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ViewController.cs - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} - FFImageLoading.Forms.Mac - - - {3A682234-5918-4F58-B02B-598A59C6A7BD} - FFImageLoading.Forms.Sample - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0} - FFImageLoading.Transformations.Mac - - - {411B82F4-4F6B-49A0-8E28-260FB65B386F} - FFImageLoading.Svg.Forms.Mac - - - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} - FFImageLoading.Svg.Mac - - - - - - - - - - - - - + + + + Debug + AnyCPU + {75D24499-446D-47DD-9C9A-295E40010CF1} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Exe + FFImageLoading.Forms.Sample.Mac + FFImageLoading.Forms.Sample.Mac + v2.0 + Xamarin.Mac + Resources + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + false + Mac Developer + false + false + false + true + true + + + + + + + 3rd Party Mac Developer Installer + None + + + pdbonly + true + bin\Release + + + prompt + 4 + false + true + false + true + true + true + SdkOnly + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ViewController.cs + + + + + + + + {3A682234-5918-4F58-B02B-598A59C6A7BD} + FFImageLoading.Forms.Sample + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Mac/packages.config b/samples/ImageLoading.Forms.Sample/Mac/packages.config deleted file mode 100644 index 190d02600..000000000 --- a/samples/ImageLoading.Forms.Sample/Mac/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj b/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj index a829e9662..c0d21de71 100644 --- a/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj +++ b/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj @@ -1,52 +1,30 @@ - + - - netstandard2.0 - Shared - Shared - false - false - false - false - false - false - false - false - false - 2.0.2 - + + + netstandard2.0 + true + + + + pdbonly + true + + - - + - + + - - - - - - - - - - - + - - - - + tenor.gif - - - - - - + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Shared/Properties/AssemblyInfo.cs b/samples/ImageLoading.Forms.Sample/Shared/Properties/AssemblyInfo.cs deleted file mode 100644 index 54a34c1e2..000000000 --- a/samples/ImageLoading.Forms.Sample/Shared/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,27 +0,0 @@ -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("Shared")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("Daniel Luberda")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. - -[assembly: AssemblyVersion("1.0.0")] - -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. - -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] - diff --git a/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj b/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj index fe5a05051..0cefe1dec 100644 --- a/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj +++ b/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj @@ -1,4 +1,4 @@ - + Exe @@ -10,18 +10,10 @@ Runtime - - - - - - - - diff --git a/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj b/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj index d6f3a2074..3fa0e10c9 100644 --- a/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj +++ b/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj @@ -1,195 +1,167 @@ - - - - - Debug - x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F} - AppContainerExe - Properties - WinUWP - WinUWP - en-US - UAP - 10.0.17134.0 - 10.0.17134.0 - 14 - 512 - {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - true - WinUWP_TemporaryKey.pfx - - - true - bin\x86\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - x86 - false - prompt - true - - - bin\x86\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - x86 - false - prompt - true - true - - - true - bin\ARM\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - ARM - false - prompt - true - - - bin\ARM\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - ARM - false - prompt - true - true - - - true - bin\x64\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - x64 - false - prompt - true - - - bin\x64\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - x64 - false - prompt - true - true - - - PackageReference - - - - App.xaml - - - MainPage.xaml - - - - - - Designer - - - - - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - - - 6.1.5 - - - 1.68.0 - - - 3.6.0.344457 - - - 1.0.5 - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - {b8be9fe7-2d07-40b5-8dae-ba52f944c659} - FFImageLoading.Forms.WinUWP - - - {3d6c1f12-68d7-44c2-a7de-8e7942627a01} - FFImageLoading.Forms - - - {6d4f9dfa-012e-4966-a6e8-01c3464b537e} - FFImageLoading.Svg.Forms.Windows - - - {5140739d-209c-41a7-9503-5d5733f4c091} - FFImageLoading.Svg.Windows - - - {399e7e28-5a3d-471f-b6fc-d5770ebb6762} - FFImageLoading.Transformations.Windows - - - {610543a5-d06f-4bca-9443-e6addff06c71} - FFImageLoading.Windows - - - {3a682234-5918-4f58-b02b-598a59c6a7bd} - FFImageLoading.Forms.Sample - - - - 14.0 - - - - - - - + + + + + Debug + x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F} + AppContainerExe + Properties + WinUWP + WinUWP + en-US + UAP + 10.0.17134.0 + 10.0.17134.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true + WinUWP_TemporaryKey.pfx + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + PackageReference + + + + App.xaml + + + MainPage.xaml + + + + + + Designer + + + + + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + 6.2.9 + + + 1.68.0 + + + 4.0.0.709238 + + + 1.0.5 + + + + + {3a682234-5918-4f58-b02b-598a59c6a7bd} + FFImageLoading.Forms.Sample + + + + 14.0 + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/WinUWP/Properties/Default.rd.xml b/samples/ImageLoading.Forms.Sample/WinUWP/Properties/Default.rd.xml index 74b03e3f8..af00722cd 100644 --- a/samples/ImageLoading.Forms.Sample/WinUWP/Properties/Default.rd.xml +++ b/samples/ImageLoading.Forms.Sample/WinUWP/Properties/Default.rd.xml @@ -1,31 +1,31 @@ - - - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/App.config b/samples/ImageLoading.Forms.Sample/Wpf/App.config new file mode 100644 index 000000000..787dcbecc --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/App.xaml b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml new file mode 100644 index 000000000..fd0965690 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/samples/ImageLoading.Forms.Sample/Wpf/App.xaml.cs b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml.cs new file mode 100644 index 000000000..703fcfe00 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using System.Windows; + +namespace Wpf +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + protected override void OnStartup(StartupEventArgs e) + { + base.OnStartup(e); + FFImageLoading.Forms.Platform.CachedImageRenderer.Init(); + + var config = new FFImageLoading.Config.Configuration() + { + VerboseLogging = true, + VerbosePerformanceLogging = true, + VerboseMemoryCacheLogging = true, + VerboseLoadingCancelledLogging = true, + }; + FFImageLoading.ImageService.Instance.Initialize(config); + List assembliesToInclude = new List(); + assembliesToInclude.Add(typeof(FFImageLoading.Forms.Platform.CachedImageRenderer).GetTypeInfo().Assembly); + Xamarin.Forms.Forms.Init(assembliesToInclude); + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Assets/error.png b/samples/ImageLoading.Forms.Sample/Wpf/Assets/error.png new file mode 100644 index 000000000..b791d4392 Binary files /dev/null and b/samples/ImageLoading.Forms.Sample/Wpf/Assets/error.png differ diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Assets/loading.png b/samples/ImageLoading.Forms.Sample/Wpf/Assets/loading.png new file mode 100644 index 000000000..3f9cde526 Binary files /dev/null and b/samples/ImageLoading.Forms.Sample/Wpf/Assets/loading.png differ diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Assets/sample.svg b/samples/ImageLoading.Forms.Sample/Wpf/Assets/sample.svg new file mode 100644 index 000000000..4ab9b8eea --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Assets/sample.svg @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + all logos are copyright of their respective owners + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj b/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj new file mode 100644 index 000000000..2db7048eb --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj @@ -0,0 +1,117 @@ + + + + + Debug + AnyCPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F} + WinExe + Wpf + Wpf + v4.7.1 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + 4.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + MainWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + 4.0.0.709238 + + + 4.0.0.709238 + + + + + {3a682234-5918-4f58-b02b-598a59c6a7bd} + FFImageLoading.Forms.Sample + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml new file mode 100644 index 000000000..aa0b1c3c2 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml @@ -0,0 +1,14 @@ + + + + + + diff --git a/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml.cs b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml.cs new file mode 100644 index 000000000..aa9dbb184 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml.cs @@ -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.Platform.WPF; + +namespace Wpf +{ + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : FormsApplicationPage + { + public MainWindow() + { + MinWidth = 1000; + MinHeight = 450; + InitializeComponent(); + LoadApplication(new FFImageLoading.Forms.Sample.App()); + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/AssemblyInfo.cs b/samples/ImageLoading.Forms.Sample/Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..56a1c5331 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.Designer.cs b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.Designer.cs new file mode 100644 index 000000000..66bdd5844 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Wpf.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Wpf.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.resx b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.resx new file mode 100644 index 000000000..af7dbebba --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.Designer.cs b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.Designer.cs new file mode 100644 index 000000000..12a08fa37 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Wpf.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.settings b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.settings new file mode 100644 index 000000000..033d7a5e9 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj b/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj index 94d3a9d7c..2d2e46906 100644 --- a/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj +++ b/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj @@ -1,172 +1,122 @@ - - - - - Debug - iPhoneSimulator - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF} - Exe - FFImageLoading.Forms.Sample.iOS - Resources - FFImageLoadingFormsSampleiOS - - - true - full - false - bin\iPhoneSimulator\Debug - DEBUG;ENABLE_TEST_CLOUD; - prompt - 4 - false - i386, x86_64 - None - true - iPhone Developer - true - true - NSUrlSessionHandler - - - full - true - bin\iPhone\Release - prompt - 4 - false - ARMv7, ARM64 - Entitlements.plist - true - iPhone Developer - - - full - true - bin\iPhoneSimulator\Release - prompt - 4 - false - i386 - None - iPhone Developer - true - NSUrlSessionHandler - - - true - full - false - bin\iPhone\Debug - DEBUG;ENABLE_TEST_CLOUD; - prompt - 4 - false - ARMv7, ARM64 - Entitlements.plist - true - true - true - iPhone Developer - NSUrlSessionHandler - - - - - - - - - ..\..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll - - - ..\..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {3A682234-5918-4F58-B02B-598A59C6A7BD} - FFImageLoading.Forms.Sample - - - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} - FFImageLoading.Forms.Touch - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} - FFImageLoading.Transformations.Touch - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} - FFImageLoading.Svg.Touch - - - {A73A1EA8-E709-474D-9102-DCB2482950AB} - FFImageLoading.Svg.Forms.Touch - - - - - - - + + + + Debug + iPhoneSimulator + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF} + Exe + FFImageLoading.Forms.Sample.iOS + Resources + FFImageLoadingFormsSampleiOS + + + true + full + false + bin\iPhoneSimulator\Debug + DEBUG;ENABLE_TEST_CLOUD; + prompt + 4 + false + i386, x86_64 + None + true + iPhone Developer + true + true + NSUrlSessionHandler + true + true + + + full + true + bin\iPhone\Release + prompt + 4 + false + ARMv7, ARM64 + Entitlements.plist + true + iPhone Developer + + + full + true + bin\iPhoneSimulator\Release + prompt + 4 + false + i386 + SdkOnly + iPhone Developer + true + NSUrlSessionHandler + + + true + full + false + bin\iPhone\Debug + DEBUG;ENABLE_TEST_CLOUD; + prompt + 4 + false + ARMv7, ARM64 + Entitlements.plist + true + true + true + iPhone Developer + NSUrlSessionHandler + + + + + + + + + + + + + + false + + + false + + + false + + + + + + + + + + + + + + + + + + + + + + + + + {3A682234-5918-4F58-B02B-598A59C6A7BD} + FFImageLoading.Forms.Sample + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/iOS/app.config b/samples/ImageLoading.Forms.Sample/iOS/app.config deleted file mode 100644 index 86de0f2b6..000000000 --- a/samples/ImageLoading.Forms.Sample/iOS/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/iOS/packages.config b/samples/ImageLoading.Forms.Sample/iOS/packages.config deleted file mode 100644 index 9d0818851..000000000 --- a/samples/ImageLoading.Forms.Sample/iOS/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj index 3cf21893c..c6e7a9752 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj @@ -1,68 +1,14 @@ - - - - Debug - AnyCPU - {087DE224-30F0-4FEF-A960-F93F04182BA6} - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - true - Library - FFImageLoading.MvvmCross.Sample.Core - FFImageLoading.MvvmCross.Sample.Core - v4.5 - Profile111 - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - - - true - bin\Release - prompt - 4 - - - - - - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984} - FFImageLoading.Transformations - - - - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Platform.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Core.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Binding.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Localization.dll - - - - - - + + + + + netstandard2.0 + true + + + + pdbonly + true + + \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/Properties/AssemblyInfo.cs b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/Properties/AssemblyInfo.cs deleted file mode 100644 index 16ceb5839..000000000 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,26 +0,0 @@ -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("FFImageLoading.MvvmCross.Sample.Core")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("(c) Daniel Luberda")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. - -[assembly: AssemblyVersion("1.0.0")] - -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. - -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/packages.config b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/packages.config deleted file mode 100644 index 798da64af..000000000 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj index fcc68c4f0..036e26837 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj @@ -1,229 +1,93 @@ - - - - Debug - AnyCPU - {A3760566-B91D-435F-94A6-31ADF4C7812F} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.MvvmCross.Sample.Droid - FFImageLoading.MvvmCross.Sample.Droid - v9.0 - True - Resources\Resource.designer.cs - Resource - Properties\AndroidManifest.xml - Resources - Assets - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - None - arm64-v8a;armeabi;armeabi-v7a;x86 - - - true - pdbonly - true - bin\Release - prompt - 4 - true - false - - - - - - - - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\MonoAndroid\MvvmCross.Platform.dll - - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\MonoAndroid\MvvmCross.Platform.Droid.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\MonoAndroid\MvvmCross.Core.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\MonoAndroid\MvvmCross.Droid.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Binding.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Binding.Droid.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Localization.dll - - - ..\..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\..\packages\MvvmCross.Droid.Support.V7.RecyclerView.5.6.3\lib\MonoAndroid70\MvvmCross.Droid.Support.V7.RecyclerView.dll - - - - ..\..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll - - - ..\..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll - - - ..\..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll - - - ..\..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll - - - ..\..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll - - - ..\..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll - - - ..\..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll - - - ..\..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll - - - ..\..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll - - - ..\..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll - - - ..\..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {087DE224-30F0-4FEF-A960-F93F04182BA6} - FFImageLoading.MvvmCross.Sample.Core - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - {BD3CEB96-93D6-47BD-9474-01DFCD320897} - FFImageLoading.Transformations.Droid - - - {0BF13419-BA9C-4004-812C-EB22E41927D9} - FFImageLoading.Svg.Droid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + Debug + AnyCPU + {A3760566-B91D-435F-94A6-31ADF4C7812F} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.MvvmCross.Sample.Droid + FFImageLoading.MvvmCross.Sample.Droid + v9.0 + True + Resources\Resource.designer.cs + Resource + Properties\AndroidManifest.xml + Resources + Assets + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + None + arm64-v8a;armeabi;armeabi-v7a;x86 + false + false + false + false + true + d8 + r8 + true + 1G + + + false + pdbonly + true + bin\Release + prompt + 4 + true + false + false + false + false + false + true + d8 + r8 + true + 1G + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/Properties/AndroidManifest.xml b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/Properties/AndroidManifest.xml index 887b52661..80b2fd47b 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/Properties/AndroidManifest.xml +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@  - - - + + + \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/packages.config b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/packages.config deleted file mode 100644 index 50b117505..000000000 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/packages.config +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj index f957e877f..f4ccf7ff0 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj @@ -1,4 +1,4 @@ - + Debug @@ -26,28 +26,32 @@ 32830 None i386, x86_64 - HttpClientHandler + NSUrlSessionHandler + true pdbonly true bin\iPhone\Release - + + prompt 4 iPhone Developer - true - true + false + false Entitlements.plist SdkOnly ARMv7, ARM64 HttpClientHandler + true pdbonly true bin\iPhoneSimulator\Release - + + prompt 4 iPhone Developer @@ -82,38 +86,16 @@ - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\Xamarin.iOS10\MvvmCross.Platform.dll - - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\Xamarin.iOS10\MvvmCross.Platform.iOS.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\Xamarin.iOS10\MvvmCross.Core.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\Xamarin.iOS10\MvvmCross.iOS.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\Xamarin.iOS10\MvvmCross.Binding.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\Xamarin.iOS10\MvvmCross.Binding.iOS.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\Xamarin.iOS10\MvvmCross.Localization.dll - - - ..\..\..\packages\Cirrious.FluentLayout.2.9.0\lib\Xamarin.iOS10\Cirrious.FluentLayouts.Touch.dll - - - - - - + + false + + + false + + @@ -121,7 +103,6 @@ - @@ -139,27 +120,5 @@ - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {087DE224-30F0-4FEF-A960-F93F04182BA6} - FFImageLoading.MvvmCross.Sample.Core - - - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} - FFImageLoading.Svg.Touch - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} - FFImageLoading.Transformations.Touch - - \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/packages.config b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/packages.config deleted file mode 100644 index aec2e2f5c..000000000 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Sample/Properties/AndroidManifest.xml b/samples/ImageLoading.Sample/Properties/AndroidManifest.xml index 2c503bea9..baafca9db 100644 --- a/samples/ImageLoading.Sample/Properties/AndroidManifest.xml +++ b/samples/ImageLoading.Sample/Properties/AndroidManifest.xml @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/samples/ImageLoading.Sample/Simple.Android.Sample.csproj b/samples/ImageLoading.Sample/Simple.Android.Sample.csproj index 9e52fb88f..17b4e0c31 100644 --- a/samples/ImageLoading.Sample/Simple.Android.Sample.csproj +++ b/samples/ImageLoading.Sample/Simple.Android.Sample.csproj @@ -1,247 +1,107 @@ - - - - Debug - AnyCPU - {F898A684-E9C1-4154-9F80-6037287233F5} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - ImageLoading.Sample - ImageLoading.Sample - 512 - true - Resources\Resource.Designer.cs - Off - True - Properties\AndroidManifest.xml - v9.0 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - None - - - full - true - bin\Release\ - TRACE - prompt - 4 - False - - - - - - - - - - ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll - - - ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll - - - ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll - - - ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll - - - ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll - - - - ..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll - - - ..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll - - - ..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll - - - ..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll - - - ..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll - - - ..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll - - - ..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll - - - ..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll - - - ..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll - - - ..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll - - - ..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll - - - ..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll - - - ..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll - - - ..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll - - - ..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll - - - ..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - - - - - - - - - - - - - - - - - - - - - - AndroidResource - - - - - - - - - - - - - - - - - - - - - - - - - - {BD3CEB96-93D6-47BD-9474-01DFCD320897} - FFImageLoading.Transformations.Droid - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + Debug + AnyCPU + {F898A684-E9C1-4154-9F80-6037287233F5} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + ImageLoading.Sample + ImageLoading.Sample + 512 + true + Resources\Resource.Designer.cs + Off + True + Properties\AndroidManifest.xml + v9.0 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + None + false + false + false + false + true + d8 + r8 + true + 1G + + + + full + true + bin\Release\ + TRACE + prompt + 4 + False + false + false + false + false + true + d8 + r8 + true + 1G + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AndroidResource + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Sample/packages.config b/samples/ImageLoading.Sample/packages.config deleted file mode 100644 index 9553b45f5..000000000 --- a/samples/ImageLoading.Sample/packages.config +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj b/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj index 4a523686a..8f1a06681 100644 --- a/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj +++ b/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj @@ -10,15 +10,5 @@ Runtime - - - - - - - - - - diff --git a/samples/Simple.WinUniversal.Sample/Properties/Default.rd.xml b/samples/Simple.WinUniversal.Sample/Properties/Default.rd.xml index 461bc4c13..80a960ce3 100644 --- a/samples/Simple.WinUniversal.Sample/Properties/Default.rd.xml +++ b/samples/Simple.WinUniversal.Sample/Properties/Default.rd.xml @@ -1,31 +1,31 @@ - - - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj b/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj index 270134d09..4096ee27a 100644 --- a/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj +++ b/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj @@ -1,159 +1,145 @@ - - - - - Debug - x86 - x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148} - AppContainerExe - Properties - Simple.Universal.Sample - Simple.Universal.Sample - en-US - UAP - 10.0.17134.0 - 10.0.17134.0 - 14 - 512 - {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Simple.Universal.Sample_TemporaryKey.pfx - win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot - - - true - bin\x86\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - x86 - false - prompt - true - - - bin\x86\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - x86 - false - prompt - true - true - - - true - bin\ARM\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - ARM - false - prompt - true - - - bin\ARM\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - ARM - false - prompt - true - true - - - true - bin\x64\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - x64 - false - prompt - true - - - bin\x64\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - x64 - false - prompt - true - true - - - - App.xaml - - - MainPage.xaml - - - - - - Designer - - - - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - {1602a3cb-80c2-42bb-b21a-6beb87ed6ee2} - FFImageLoading.Transformations.Windows - - - {610543a5-d06f-4bca-9443-e6addff06c71} - FFImageLoading.Windows - - - - - 6.1.5 - - - - 14.0 - - - + + + + + Debug + x86 + x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148} + AppContainerExe + Properties + Simple.Universal.Sample + Simple.Universal.Sample + en-US + UAP + 10.0.17134.0 + 10.0.17134.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Simple.Universal.Sample_TemporaryKey.pfx + win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + + App.xaml + + + MainPage.xaml + + + + + + Designer + + + + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + 6.2.9 + + + + 14.0 + + + \ No newline at end of file diff --git a/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj b/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj index 3f96fd97b..3cdee9ff4 100644 --- a/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj +++ b/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj @@ -1,154 +1,140 @@ - - - - Debug - iPhoneSimulator - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {B67D0516-5951-4DE9-B07F-AD3407D8CA90} - Exe - Simple.iOS.Sample - Resources - SimpleiOSSample - - - true - full - false - bin\iPhoneSimulator\Debug - DEBUG;ENABLE_TEST_CLOUD; - prompt - 4 - false - x86_64 - None - true - true - iPhone Developer - - - full - true - bin\iPhone\Release - prompt - 4 - false - ARMv7, ARM64 - Entitlements.plist - true - iPhone Developer - - - full - true - bin\iPhoneSimulator\Release - prompt - 4 - false - i386 - None - iPhone Developer - - - true - full - false - bin\iPhone\Debug - DEBUG;ENABLE_TEST_CLOUD; - prompt - 4 - false - ARMv7, ARM64 - Entitlements.plist - true - iPhone Developer - true - true - true - - - - - - - - - ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll - - - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - - - - - - - - - - - - - - - - - ImagesViewController.cs - - - - ImageViewCell.cs - - - - ImageDetailsViewController.cs - - - - - - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} - FFImageLoading.Transformations.Touch - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - - - - - + + + + Debug + iPhoneSimulator + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {B67D0516-5951-4DE9-B07F-AD3407D8CA90} + Exe + Simple.iOS.Sample + Resources + SimpleiOSSample + + + true + full + false + bin\iPhoneSimulator\Debug + DEBUG;ENABLE_TEST_CLOUD; + prompt + 4 + false + x86_64 + None + true + true + iPhone Developer + true + true + true + + + full + true + bin\iPhone\Release + prompt + 4 + false + ARMv7, ARM64 + Entitlements.plist + false + iPhone Developer + true + + + full + true + bin\iPhoneSimulator\Release + prompt + 4 + false + i386 + None + iPhone Developer + + + true + full + false + bin\iPhone\Debug + DEBUG;ENABLE_TEST_CLOUD; + prompt + 4 + false + ARMv7, ARM64 + Entitlements.plist + true + iPhone Developer + true + true + true + + + + + + + + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + + + + + + + + + + + + + + + ImagesViewController.cs + + + + ImageViewCell.cs + + + + ImageDetailsViewController.cs + + + + + + + + \ No newline at end of file diff --git a/samples/Simple.iOS.Sample/packages.config b/samples/Simple.iOS.Sample/packages.config deleted file mode 100644 index 2fb8a33e6..000000000 --- a/samples/Simple.iOS.Sample/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Common/Helpers/PreserveAttribute.cs b/source/FFImageLoading.Common/Helpers/PreserveAttribute.cs index d22f347fe..c33f8eb3a 100644 --- a/source/FFImageLoading.Common/Helpers/PreserveAttribute.cs +++ b/source/FFImageLoading.Common/Helpers/PreserveAttribute.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("FFImageLoading.Transformations"), InternalsVisibleTo("FFImageLoading.Svg.Forms")] diff --git a/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.projitems b/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.projitems deleted file mode 100644 index 90129e828..000000000 --- a/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.projitems +++ /dev/null @@ -1,14 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - {60678181-1544-4276-9B2A-6239C1046EA5} - - - FFImageLoading.Cross.Svg - - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.shproj b/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.shproj deleted file mode 100644 index 5628d04c8..000000000 --- a/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.shproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - {60678181-1544-4276-9B2A-6239C1046EA5} - - - - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Cross/FFImageLoading.Cross.projitems b/source/FFImageLoading.Cross/FFImageLoading.Cross.projitems deleted file mode 100644 index 30092adcf..000000000 --- a/source/FFImageLoading.Cross/FFImageLoading.Cross.projitems +++ /dev/null @@ -1,14 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - {3C58B37D-EDB7-4778-AA48-F3AD9A571059} - - - FFImageLoading.Cross - - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Cross/FFImageLoading.Cross.shproj b/source/FFImageLoading.Cross/FFImageLoading.Cross.shproj deleted file mode 100644 index 27c8ffd96..000000000 --- a/source/FFImageLoading.Cross/FFImageLoading.Cross.shproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - {3C58B37D-EDB7-4778-AA48-F3AD9A571059} - - - - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Droid/FFImageLoading.Droid.csproj b/source/FFImageLoading.Droid/FFImageLoading.Droid.csproj index e30735d13..597059088 100644 --- a/source/FFImageLoading.Droid/FFImageLoading.Droid.csproj +++ b/source/FFImageLoading.Droid/FFImageLoading.Droid.csproj @@ -1,121 +1,121 @@ - - - - Debug - AnyCPU - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {74BF9402-3E13-4003-8923-BC20A1294CE2} - Library - FFImageLoading - Assets - Resources - Resource - FFImageLoading.Platform - v8.1 - 1701;1702;1705;1591;1587;NU1605;NU1605 - - - true - portable - false - bin\Debug - DEBUG;ANDROID;__ANDROID__ - prompt - 4 - None - false - DEBUG;ANDROID;__ANDROID__ - Latest - - - true - portable - true - bin\Release - prompt - 4 - false - false - bin\Release\FFImageLoading.Platform.xml - ANDROID;__ANDROID__ - Latest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Extensions\TaskParameterExtensions.cs - - - - - - - - - - - - - - - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - - - - + + + + Debug + AnyCPU + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {74BF9402-3E13-4003-8923-BC20A1294CE2} + Library + FFImageLoading + Assets + Resources + Resource + FFImageLoading.Platform + v8.1 + 1701;1702;1705;1591;1587;NU1605;NU1605 + + + true + portable + false + bin\Debug + DEBUG;ANDROID;__ANDROID__ + prompt + 4 + None + false + DEBUG;ANDROID;__ANDROID__ + Latest + + + true + portable + true + bin\Release + prompt + 4 + false + false + bin\Release\FFImageLoading.Platform.xml + ANDROID;__ANDROID__ + Latest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Extensions\TaskParameterExtensions.cs + + + + + + + + + + + + + + + + + + + + + + + {51CA3BE2-DF00-4F49-8054-E5C776992B61} + FFImageLoading + + + + + + diff --git a/source/FFImageLoading.Forms.Droid/FFImageLoading.Forms.Droid.csproj b/source/FFImageLoading.Forms.Droid/FFImageLoading.Forms.Droid.csproj index c32a72ef9..77785c726 100644 --- a/source/FFImageLoading.Forms.Droid/FFImageLoading.Forms.Droid.csproj +++ b/source/FFImageLoading.Forms.Droid/FFImageLoading.Forms.Droid.csproj @@ -1,183 +1,174 @@ - - - - - Debug - AnyCPU - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {7014FEB6-0338-4A47-B600-4A1B48127C5C} - Library - FFImageLoading.Forms.Platform - Assets - Resources - Resource - FFImageLoading.Forms.Platform - v8.1 - - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - DEBUG;ANDROID;__ANDROID__ - prompt - 4 - None - false - latest - - - true - portable - true - bin\Release - prompt - 4 - false - false - bin\Release\FFImageLoading.Forms.Platform.xml - ANDROID;__ANDROID__ - latest - - - - - - - - - - - - - - ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Annotations.dll - - - ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Core.UI.dll - - - ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Fragment.dll - - - ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Media.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Transition.dll - - - ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v4.dll - - - ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.CardView.dll - - - ..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.Palette.dll - - - ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Animated.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.AppCompat.dll - - - ..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Design.dll - - - ..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.MediaRouter.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\FormsViewGroup.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Platform.Android.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Xaml.dll - - - ..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.CustomTabs.dll - - - - - - - - - - - - - - - - - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + AnyCPU + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {7014FEB6-0338-4A47-B600-4A1B48127C5C} + Library + FFImageLoading.Forms.Platform + Assets + Resources + Resource + FFImageLoading.Forms.Platform + v8.1 + + + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + DEBUG;ANDROID;__ANDROID__ + prompt + 4 + None + false + latest + + + true + portable + true + bin\Release + prompt + 4 + false + false + bin\Release\FFImageLoading.Forms.Platform.xml + ANDROID;__ANDROID__ + latest + + + + + + + + + + + + + + ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Core.Common.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Lifecycle.Common.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Lifecycle.Runtime.dll + + + ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Annotations.dll + + + ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Compat.dll + + + ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Core.UI.dll + + + ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Core.Utils.dll + + + ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Fragment.dll + + + ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Media.Compat.dll + + + ..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Transition.dll + + + ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v4.dll + + + ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.CardView.dll + + + ..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.Palette.dll + + + ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.RecyclerView.dll + + + ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Vector.Drawable.dll + + + ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Animated.Vector.Drawable.dll + + + ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.AppCompat.dll + + + ..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Design.dll + + + ..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.MediaRouter.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\FormsViewGroup.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Platform.Android.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Xaml.dll + + + ..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.CustomTabs.dll + + + + + + + + + + + + + + + + + + + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} + FFImageLoading.Forms + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Droid/app.config b/source/FFImageLoading.Forms.Droid/app.config index 86de0f2b6..4dd3b43c8 100644 --- a/source/FFImageLoading.Forms.Droid/app.config +++ b/source/FFImageLoading.Forms.Droid/app.config @@ -1,11 +1,11 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Mac/FFImageLoading.Forms.Mac.csproj b/source/FFImageLoading.Forms.Mac/FFImageLoading.Forms.Mac.csproj index 280611d8c..23b0991d4 100644 --- a/source/FFImageLoading.Forms.Mac/FFImageLoading.Forms.Mac.csproj +++ b/source/FFImageLoading.Forms.Mac/FFImageLoading.Forms.Mac.csproj @@ -1,105 +1,99 @@ - - - - - Debug - AnyCPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Forms.Platform - FFImageLoading.Forms.Platform - v2.0 - Xamarin.Mac - Resources - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - DEBUG;__MACOS__; - prompt - 4 - false - false - false - false - false - HttpClientHandler - None - - None - latest - - - true - portable - true - bin\Release - __MACOS__; - prompt - 4 - bin\Release\FFImageLoading.Forms.Platform.xml - false - false - false - false - false - HttpClientHandler - None - - None - latest - - - - - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll - - - - - - CachedImageRenderer.cs - - - ImageSourceBinding.cs - - - FFImageLoadingImageSourceHandler.cs - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - - - - - - + + + + + Debug + AnyCPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Forms.Platform + FFImageLoading.Forms.Platform + v2.0 + Xamarin.Mac + Resources + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + DEBUG;__MACOS__; + prompt + 4 + false + false + false + false + false + HttpClientHandler + None + + + None + latest + + + true + portable + true + bin\Release + __MACOS__; + prompt + 4 + bin\Release\FFImageLoading.Forms.Platform.xml + false + false + false + false + false + HttpClientHandler + None + + + None + latest + + + + + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll + + + + + + CachedImageRenderer.cs + + + ImageSourceBinding.cs + + + FFImageLoadingImageSourceHandler.cs + + + + + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} + FFImageLoading.Forms + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Tizen/FFImageLoading.Forms.Tizen.csproj b/source/FFImageLoading.Forms.Tizen/FFImageLoading.Forms.Tizen.csproj index fd319e9fc..1f9e621b5 100644 --- a/source/FFImageLoading.Forms.Tizen/FFImageLoading.Forms.Tizen.csproj +++ b/source/FFImageLoading.Forms.Tizen/FFImageLoading.Forms.Tizen.csproj @@ -38,6 +38,5 @@ - \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Touch/FFImageLoading.Forms.Touch.csproj b/source/FFImageLoading.Forms.Touch/FFImageLoading.Forms.Touch.csproj index c461d154e..f994be346 100644 --- a/source/FFImageLoading.Forms.Touch/FFImageLoading.Forms.Touch.csproj +++ b/source/FFImageLoading.Forms.Touch/FFImageLoading.Forms.Touch.csproj @@ -1,85 +1,77 @@ - - - - - Debug - AnyCPU - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} - Library - FFImageLoading.Forms.Platform - Resources - FFImageLoading.Forms.Platform - 1591 - - - true - portable - false - bin\Debug - DEBUG;__UNIFIED__;__MOBILE__;__IOS__; - prompt - 4 - false - latest - - - true - portable - true - bin\Release - __UNIFIED__;__MOBILE__;__IOS__; - prompt - 4 - false - bin\Release\FFImageLoading.Forms.Platform.xml - latest - - - - - - - - ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll - - - - - - - - - - - - - - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - + + + + + Debug + AnyCPU + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} + Library + FFImageLoading.Forms.Platform + Resources + FFImageLoading.Forms.Platform + 1591 + + + true + portable + false + bin\Debug + DEBUG;__UNIFIED__;__MOBILE__;__IOS__; + prompt + 4 + false + latest + + + true + portable + true + bin\Release + __UNIFIED__;__MOBILE__;__IOS__; + prompt + 4 + false + bin\Release\FFImageLoading.Forms.Platform.xml + latest + + + + + + + + ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll + + + + + + + + + + + + + + + + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} + FFImageLoading.Forms + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Touch/app.config b/source/FFImageLoading.Forms.Touch/app.config index 86de0f2b6..4dd3b43c8 100644 --- a/source/FFImageLoading.Forms.Touch/app.config +++ b/source/FFImageLoading.Forms.Touch/app.config @@ -1,11 +1,11 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.WinUWP/FFImageLoading.Forms.WinUWP.csproj b/source/FFImageLoading.Forms.WinUWP/FFImageLoading.Forms.WinUWP.csproj index 4cb1d5e66..0ea23d49e 100644 --- a/source/FFImageLoading.Forms.WinUWP/FFImageLoading.Forms.WinUWP.csproj +++ b/source/FFImageLoading.Forms.WinUWP/FFImageLoading.Forms.WinUWP.csproj @@ -1,155 +1,147 @@ - - - - - Debug - AnyCPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659} - Library - PackageReference - Properties - FFImageLoading.Forms.Platform - FFImageLoading.Forms.Platform - FFImageLoading.Forms.Platform.UWP - en-US - UAP - 10.0.17134.0 - 10.0.16299.0 - 14 - 512 - {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot - 1701;1702;1705;1591;1587;NU1605 - - - AnyCPU - true - portable - false - bin\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - prompt - 4 - Latest - - - AnyCPU - true - portable - true - bin\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - prompt - 4 - bin\Release\FFImageLoading.Forms.Platform.xml - Latest - - - AnyCPU - true - portable - bin\ARM\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - AnyCPU - false - prompt - Latest - - - ARM - bin\ARM\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - ARM - false - prompt - bin\ARM\Release\FFImageLoading.Forms.Platform.xml - Latest - - - AnyCPU - bin\x64\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - portable - AnyCPU - false - prompt - Latest - - - x64 - bin\x64\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - x64 - bin\x64\Release\FFImageLoading.Forms.Platform.xml - false - prompt - Latest - - - AnyCPU - bin\x86\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - portable - AnyCPU - false - prompt - true - Latest - - - x86 - bin\x86\Release - bin\x86\Release\FFImageLoading.Forms.Platform.xml - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - x86 - false - prompt - true - Latest - - - - - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - {3d6c1f12-68d7-44c2-a7de-8e7942627a01} - FFImageLoading.Forms - - - {610543a5-d06f-4bca-9443-e6addff06c71} - FFImageLoading.Windows - - - - - - - - 14.0 - - - + + + + + Debug + AnyCPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659} + Library + PackageReference + Properties + FFImageLoading.Forms.Platform + FFImageLoading.Forms.Platform + FFImageLoading.Forms.Platform.UWP + en-US + UAP + 10.0.17134.0 + 10.0.16299.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot + 1701;1702;1705;1591;1587;NU1605 + + + AnyCPU + true + portable + false + bin\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + prompt + 4 + Latest + + + AnyCPU + true + portable + true + bin\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + prompt + 4 + bin\Release\FFImageLoading.Forms.Platform.xml + Latest + + + AnyCPU + true + portable + bin\ARM\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + AnyCPU + false + prompt + Latest + + + ARM + bin\ARM\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + ARM + false + prompt + bin\ARM\Release\FFImageLoading.Forms.Platform.xml + Latest + + + AnyCPU + bin\x64\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + portable + AnyCPU + false + prompt + Latest + + + x64 + bin\x64\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + x64 + bin\x64\Release\FFImageLoading.Forms.Platform.xml + false + prompt + Latest + + + AnyCPU + bin\x86\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + portable + AnyCPU + false + prompt + true + Latest + + + x86 + bin\x86\Release + bin\x86\Release\FFImageLoading.Forms.Platform.xml + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + x86 + false + prompt + true + Latest + + + + + + + + + {3d6c1f12-68d7-44c2-a7de-8e7942627a01} + FFImageLoading.Forms + + + + + + + + 14.0 + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs b/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs new file mode 100644 index 000000000..0c3e66f37 --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs @@ -0,0 +1,350 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Forms.Args; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using System; +using System.ComponentModel; +using System.IO; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using Xamarin.Forms; +using Xamarin.Forms.Platform.WPF; +using Image = System.Windows.Controls.Image; +using Size = Xamarin.Forms.Size; + +namespace FFImageLoading.Forms.Platform +{ + /// + /// CachedImage Implementation + /// + [Preserve(AllMembers = true)] + public class CachedImageRenderer : ViewRenderer + { + [RenderWith(typeof(CachedImageRenderer))] + internal class _CachedImageRenderer + { + } + + bool _isSizeSet; + private bool _measured; + private IScheduledWork _currentTask; + private ImageSourceBinding _lastImageSource; + private bool _isDisposed = false; + + /// + /// Used for registration with dependency service + /// + public static void Init() + { + CachedImage.IsRendererInitialized = true; +#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + ScaleHelper.InitAsync(); +#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + } + + public override SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint) + { + var bitmapSource = Control.Source as BitmapSource; + + if (bitmapSource == null) + return new SizeRequest(); + + _measured = true; + + return new SizeRequest(new Size() + { + Width = bitmapSource.PixelWidth, + Height = bitmapSource.PixelHeight + }); + } + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + base.OnElementChanged(e); + + if (Control == null && Element != null && !_isDisposed) + { + var control = new Image() + { + Stretch = GetStretch(Aspect.AspectFill), + }; + control.Loaded += OnImageOpened; + SetNativeControl(control); + + Control.HorizontalAlignment = HorizontalAlignment.Center; + Control.VerticalAlignment = VerticalAlignment.Center; + } + + if (e.OldElement != null) + { + e.OldElement.InternalReloadImage = null; + e.OldElement.InternalCancel = null; + e.OldElement.InternalGetImageAsJPG = null; + e.OldElement.InternalGetImageAsPNG = null; + } + + if (e.NewElement != null) + { + _isSizeSet = false; + e.NewElement.InternalReloadImage = new Action(ReloadImage); + e.NewElement.InternalCancel = new Action(CancelIfNeeded); + e.NewElement.InternalGetImageAsJPG = new Func>(GetImageAsJpgAsync); + e.NewElement.InternalGetImageAsPNG = new Func>(GetImageAsPngAsync); + + UpdateAspect(); + UpdateImage(Control, Element, e.OldElement); + } + } + + protected override void Dispose(bool disposing) + { + if (!_isDisposed) + { + _isDisposed = true; + if (Control != null) + { + Control.Loaded -= OnImageOpened; + } + CancelIfNeeded(); + } + + base.Dispose(disposing); + } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + + if (e.PropertyName == CachedImage.SourceProperty.PropertyName) + { + UpdateImage(Control, Element, null); + } + else if (e.PropertyName == CachedImage.AspectProperty.PropertyName) + { + UpdateAspect(); + } + } + + void OnImageOpened(object sender, RoutedEventArgs routedEventArgs) + { + if (_measured) + { + ((IVisualElementController)Element)?.InvalidateMeasure(Xamarin.Forms.Internals.InvalidationTrigger.RendererReady); + } + } + + async void UpdateImage(Image imageView, CachedImage image, CachedImage previousImage) + { + CancelIfNeeded(); + + if (image == null || imageView == null || _isDisposed) + return; + + var ffSource = await ImageSourceBinding.GetImageSourceBinding(image.Source, image).ConfigureAwait(false); + if (ffSource == null) + { + if (_lastImageSource == null) + return; + + _lastImageSource = null; + imageView.Source = null; + return; + } + + if (previousImage != null && !ffSource.Equals(_lastImageSource)) + { + _lastImageSource = null; + imageView.Source = null; + } + + image.SetIsLoading(true); + + var placeholderSource = await ImageSourceBinding.GetImageSourceBinding(image.LoadingPlaceholder, image).ConfigureAwait(false); + var errorPlaceholderSource = await ImageSourceBinding.GetImageSourceBinding(image.ErrorPlaceholder, image).ConfigureAwait(false); + TaskParameter imageLoader; + image.SetupOnBeforeImageLoading(out imageLoader, ffSource, placeholderSource, errorPlaceholderSource); + + if (imageLoader != null) + { + var finishAction = imageLoader.OnFinish; + var sucessAction = imageLoader.OnSuccess; + + imageLoader.Finish((work) => + { + finishAction?.Invoke(work); + ImageLoadingSizeChanged(image, false); + }); + + imageLoader.Success((imageInformation, loadingResult) => + { + sucessAction?.Invoke(imageInformation, loadingResult); + _lastImageSource = ffSource; + }); + + imageLoader.LoadingPlaceholderSet(() => ImageLoadingSizeChanged(image, true)); + + if (!_isDisposed) + _currentTask = imageLoader.Into(imageView); + } + } + + void UpdateAspect() + { + if (Control == null || Element == null || _isDisposed) + return; + Control.Stretch = GetStretch(Element.Aspect); + } + + static Stretch GetStretch(Aspect aspect) + { + switch (aspect) + { + case Aspect.AspectFill: + return Stretch.UniformToFill; + case Aspect.Fill: + return Stretch.Fill; + default: + return Stretch.Uniform; + } + } + + async void ImageLoadingSizeChanged(CachedImage element, bool isLoading) + { + if (element != null && !_isDisposed) + { + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() => + { + if (!isLoading || !_isSizeSet) + { + ((IVisualElementController)element)?.InvalidateMeasure(Xamarin.Forms.Internals.InvalidationTrigger.RendererReady); + _isSizeSet = true; + } + + if (!isLoading) + element.SetIsLoading(isLoading); + }); + } + } + + void ReloadImage() + { + UpdateImage(Control, Element, null); + } + + void CancelIfNeeded() + { + try + { + _currentTask?.Cancel(); + } + catch (Exception) { } + } + + Task GetImageAsJpgAsync(GetImageAsJpgArgs args) + { + return GetImageAsByteAsync(new JpegBitmapEncoder(), args.Quality, args.DesiredWidth, args.DesiredHeight); + } + + Task GetImageAsPngAsync(GetImageAsPngArgs args) + { + return GetImageAsByteAsync(new PngBitmapEncoder(), 90, args.DesiredWidth, args.DesiredHeight); + } + + async Task GetImageAsByteAsync(BitmapEncoder encoder, int quality, int desiredWidth, int desiredHeight) + { + if (Control?.Source == null) + return null; + + var bitmap = Control.Source as WriteableBitmap; + + if (bitmap == null) + return null; + + //byte[] pixels = null; + //uint pixelsWidth = (uint)bitmap.PixelWidth; + //uint pixelsHeight = (uint)bitmap.PixelHeight; + + WriteableBitmap source; + if (desiredWidth != 0 || desiredHeight != 0) + { + double widthRatio = (double)desiredWidth / (double)bitmap.PixelWidth; + double heightRatio = (double)desiredHeight / (double)bitmap.PixelHeight; + + double scaleRatio = Math.Min(widthRatio, heightRatio); + + if (desiredWidth == 0) + scaleRatio = heightRatio; + + if (desiredHeight == 0) + scaleRatio = widthRatio; + + var tr = new TransformedBitmap(bitmap, new ScaleTransform(scaleRatio, scaleRatio)); + + var bmp = new MemoryStream(); + BitmapEncoder enc = new BmpBitmapEncoder(); + enc.Frames.Add(BitmapFrame.Create(tr)); + enc.Save(bmp); + bmp.Seek(0, SeekOrigin.Begin); + //pixels = new byte[bmp.Length]; + source = await bmp.ToWriteableBitmap(); + //await bmp.ReadAsync(pixels, 0, (int)bmp.Length); + } + else + { + //pixels = await GetBytesFromBitmapAsync(bitmap); + source = bitmap; + } + + using (var stream = new MemoryStream()) + { + if (encoder is JpegBitmapEncoder enc) + { + //var propertySet = new BitmapPropertySet(); + //var qualityValue = new BitmapTypedValue((double)quality / 100d, Windows.Foundation.PropertyType.Single); + //propertySet.Add("ImageQuality", qualityValue); + + //encoder = await BitmapEncoder.CreateAsync(format, stream, propertySet); + enc.QualityLevel = quality; + } + //else + //{ + // encoder = await BitmapEncoder.CreateAsync(format, stream); + //} + + encoder.Frames.Add(BitmapFrame.Create(source)); + encoder.Save(stream); + //encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, + // pixelsWidth, pixelsHeight, 96, 96, pixels); + //await encoder.FlushAsync(); + stream.Seek(0,SeekOrigin.Begin); + + var bytes = new byte[stream.Length]; + await stream.ReadAsync(bytes, 0,bytes.Length); + + return bytes; + } + } + + async Task GetBytesFromBitmapAsync(WriteableBitmap bitmap) + { + var width = bitmap.PixelWidth; + var height = bitmap.PixelHeight; + var stride = width * ((bitmap.Format.BitsPerPixel + 7) / 8); + + var bitmapData = new byte[height * stride]; + + bitmap.CopyPixels(bitmapData, stride, 0); + return bitmapData; + //byte[] tempPixels; + //using (var sourceStream = bitmap.PixelBuffer.AsStream()) + //{ + // tempPixels = new byte[sourceStream.Length]; + // await sourceStream.ReadAsync(tempPixels, 0, tempPixels.Length).ConfigureAwait(false); + //} + + //return tempPixels; + } + } +} diff --git a/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj b/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj new file mode 100644 index 000000000..4e93e1ada --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj @@ -0,0 +1,67 @@ + + + + + Debug + AnyCPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5} + Library + Properties + FFImageLoading.Forms.Platform + FFImageLoading.Forms.Platform + v4.7.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + {0e77b5d3-dba5-46d3-af16-7c209c952bd0} + FFImageLoading.Forms + + + + + 3.6.0.22065 + + + 3.6.0.22065 + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Wpf/ImageSourceBinding.cs b/source/FFImageLoading.Forms.Wpf/ImageSourceBinding.cs new file mode 100644 index 000000000..1474281e4 --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/ImageSourceBinding.cs @@ -0,0 +1,150 @@ +using System; +using Xamarin.Forms; +using System.Threading.Tasks; +using System.IO; +using System.Threading; + +namespace FFImageLoading.Forms.Platform +{ + public class ImageSourceBinding : IImageSourceBinding + { + public ImageSourceBinding(FFImageLoading.Work.ImageSource imageSource, string path) + { + ImageSource = imageSource; + Path = path; + } + + public ImageSourceBinding(Func> stream) + { + ImageSource = FFImageLoading.Work.ImageSource.Stream; + Stream = stream; + } + + public FFImageLoading.Work.ImageSource ImageSource { get; private set; } + + public string Path { get; private set; } + + public Func> Stream { get; private set; } + + internal static async Task GetImageSourceBinding(ImageSource source, CachedImage element) + { + if (source == null) + { + return null; + } + + var uriImageSource = source as UriImageSource; + if (uriImageSource != null) + { + var uri = uriImageSource.Uri?.OriginalString; + if (string.IsNullOrWhiteSpace(uri)) + return null; + + return new ImageSourceBinding(Work.ImageSource.Url, uri); + } + + var fileImageSource = source as FileImageSource; + if (fileImageSource != null) + { + if (string.IsNullOrWhiteSpace(fileImageSource.File)) + return null; + + if (!string.IsNullOrWhiteSpace(System.IO.Path.GetDirectoryName(fileImageSource.File)) && File.Exists(fileImageSource.File)) + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.Filepath, fileImageSource.File); + + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.ApplicationBundle, fileImageSource.File); + } + + var streamImageSource = source as StreamImageSource; + if (streamImageSource != null) + { + return new ImageSourceBinding(streamImageSource.Stream); + } + + var embeddedResoureSource = source as EmbeddedResourceImageSource; + if (embeddedResoureSource != null) + { + var uri = embeddedResoureSource.Uri?.OriginalString; + if (string.IsNullOrWhiteSpace(uri)) + return null; + + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.EmbeddedResource, uri); + } + + var dataUrlSource = source as DataUrlImageSource; + if (dataUrlSource != null) + { + if (string.IsNullOrWhiteSpace(dataUrlSource.DataUrl)) + return null; + + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.Url, dataUrlSource.DataUrl); + } + + var vectorSource = source as IVectorImageSource; + if (vectorSource != null) + { + if (vectorSource.VectorHeight == 0 && vectorSource.VectorHeight == 0) + { + if (element.Height > 0d && !double.IsInfinity(element.Height)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorHeight = (int)element.Height; + } + else if (element.Width > 0d && !double.IsInfinity(element.Width)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorWidth = (int)element.Width; + } + else if (element.HeightRequest > 0d && !double.IsInfinity(element.HeightRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorHeight = (int)element.HeightRequest; + } + else if (element.WidthRequest > 0d && !double.IsInfinity(element.WidthRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorWidth = (int)element.WidthRequest; + } + else if (element.MinimumHeightRequest > 0d && !double.IsInfinity(element.MinimumHeightRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorHeight = (int)element.MinimumHeightRequest; + } + else if (element.MinimumWidthRequest > 0d && !double.IsInfinity(element.MinimumWidthRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorWidth = (int)element.MinimumWidthRequest; + } + } + + return await GetImageSourceBinding(vectorSource.ImageSource, element).ConfigureAwait(false); + } + + throw new NotImplementedException("ImageSource type not supported"); + } + + public override bool Equals(object obj) + { + var item = obj as ImageSourceBinding; + + if (item == null) + { + return false; + } + + return this.ImageSource == item.ImageSource && this.Path == item.Path && this.Stream == item.Stream; + } + + public override int GetHashCode() + { + unchecked + { + int hash = 17; + hash = hash * 23 + this.ImageSource.GetHashCode(); + hash = hash * 23 + Path.GetHashCode(); + hash = hash * 23 + Stream.GetHashCode(); + return hash; + } + } + } +} \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Wpf/Properties/AssemblyInfo.cs b/source/FFImageLoading.Forms.Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..daf5ac6f9 --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FFImageLoading.Forms.Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FFImageLoading.Forms.Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("0aa5a427-adc8-4685-aa8c-fea26ebd31f5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/FFImageLoading.Forms/FFImageLoading.Forms.csproj b/source/FFImageLoading.Forms/FFImageLoading.Forms.csproj index 371ccc11a..f91b19d4e 100644 --- a/source/FFImageLoading.Forms/FFImageLoading.Forms.csproj +++ b/source/FFImageLoading.Forms/FFImageLoading.Forms.csproj @@ -38,9 +38,7 @@ - - diff --git a/source/FFImageLoading.Mac/FFImageLoading.Mac.csproj b/source/FFImageLoading.Mac/FFImageLoading.Mac.csproj index ca1a19ddf..97dd9ec11 100644 --- a/source/FFImageLoading.Mac/FFImageLoading.Mac.csproj +++ b/source/FFImageLoading.Mac/FFImageLoading.Mac.csproj @@ -1,97 +1,90 @@ - - - - Debug - AnyCPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading - FFImageLoading.Platform - v2.0 - Xamarin.Mac - Resources - 1591 - - - true - portable - false - bin\Debug - DEBUG;__MACOS__ - prompt - 4 - false - false - false - false - false - HttpClientHandler - None - - None - Latest - - - true - portable - true - bin\Release - __MACOS__ - prompt - 4 - bin\Release\FFImageLoading.Platform.xml - false - false - false - false - false - HttpClientHandler - None - - None - __MACOS__ - Latest - - - - - - - - - ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.Mac20\WebP.Mac.dll - - - - - - - Extensions\TaskParameterExtensions.cs - - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - - - - - - - - - - - - - + + + + Debug + AnyCPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading + FFImageLoading.Platform + v2.0 + Xamarin.Mac + Resources + 1591 + + + true + portable + false + bin\Debug + DEBUG;__MACOS__ + prompt + 4 + false + false + false + false + false + HttpClientHandler + None + + + None + Latest + + + true + portable + true + bin\Release + __MACOS__ + prompt + 4 + bin\Release\FFImageLoading.Platform.xml + false + false + false + false + false + HttpClientHandler + None + + + None + __MACOS__ + Latest + + + + + + + + + ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.Mac20\WebP.Mac.dll + + + + + + + Extensions\TaskParameterExtensions.cs + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Mock/FFImageLoading.Mock.csproj b/source/FFImageLoading.Mock/FFImageLoading.Mock.csproj index d10558063..3588e248c 100644 --- a/source/FFImageLoading.Mock/FFImageLoading.Mock.csproj +++ b/source/FFImageLoading.Mock/FFImageLoading.Mock.csproj @@ -33,8 +33,4 @@ - - - - diff --git a/source/FFImageLoading.Svg.Droid/FFImageLoading.Svg.Droid.csproj b/source/FFImageLoading.Svg.Droid/FFImageLoading.Svg.Droid.csproj index ae8b2efbd..a7456ad58 100644 --- a/source/FFImageLoading.Svg.Droid/FFImageLoading.Svg.Droid.csproj +++ b/source/FFImageLoading.Svg.Droid/FFImageLoading.Svg.Droid.csproj @@ -1,74 +1,64 @@ - - - - Debug - AnyCPU - {0BF13419-BA9C-4004-812C-EB22E41927D9} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg.Platform - FFImageLoading.Svg.Platform - v9.0 - Resources\Resource.designer.cs - Resource - Resources - Assets - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Release - DEBUG;ANDROID;__ANDROID__ - prompt - 4 - None - DEBUG;ANDROID;__ANDROID__ - latest - - - true - portable - true - bin\Release - prompt - 4 - bin\Release\FFImageLoading.Svg.Platform.xml - true - false - ANDROID;__ANDROID__ - latest - - - - - - - - - ..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll - - - - - - MvxSvgCachedImageView.cs - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - - - - - + + + + Debug + AnyCPU + {0BF13419-BA9C-4004-812C-EB22E41927D9} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg.Platform + FFImageLoading.Svg.Platform + v9.0 + Resources\Resource.designer.cs + Resource + Resources + Assets + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Release + DEBUG;ANDROID;__ANDROID__ + prompt + 4 + None + DEBUG;ANDROID;__ANDROID__ + latest + + + true + portable + true + bin\Release + prompt + 4 + bin\Release\FFImageLoading.Svg.Platform.xml + true + false + ANDROID;__ANDROID__ + latest + + + + + + + + + ..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll + + + + + + MvxSvgCachedImageView.cs + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Forms.Droid/FFImageLoading.Svg.Forms.Droid.csproj b/source/FFImageLoading.Svg.Forms.Droid/FFImageLoading.Svg.Forms.Droid.csproj index d64fd3b37..fd2c998ed 100644 --- a/source/FFImageLoading.Svg.Forms.Droid/FFImageLoading.Svg.Forms.Droid.csproj +++ b/source/FFImageLoading.Svg.Forms.Droid/FFImageLoading.Svg.Forms.Droid.csproj @@ -1,255 +1,239 @@ - - - - - Debug - AnyCPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg.Forms - FFImageLoading.Svg.Forms - v9.0 - Resources\Resource.designer.cs - Resource - Resources - Assets - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Release - DEBUG; - prompt - 4 - None - latest - - - true - portable - true - bin\Release - prompt - 4 - bin\Release\FFImageLoading.Svg.Forms.xml - true - false - latest - - - - - - - - - ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll - - - ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll - - - ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Transition.dll - - - ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll - - - ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll - - - ..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.Palette.dll - - - ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll - - - ..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Design.dll - - - ..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.MediaRouter.dll - - - ..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\FormsViewGroup.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.Android.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Xaml.dll - - - - ..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll - - - ..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll - - - ..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll - - - ..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll - - - ..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll - - - ..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll - - - ..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll - - - ..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll - - - ..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll - - - ..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll - - - ..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll - - - ..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll - - - ..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll - - - ..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll - - - ..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll - - - ..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - - - ..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomTabs.dll - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - {7014FEB6-0338-4A47-B600-4A1B48127C5C} - FFImageLoading.Forms.Droid - - - {0BF13419-BA9C-4004-812C-EB22E41927D9} - FFImageLoading.Svg.Droid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + AnyCPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms + v9.0 + Resources\Resource.designer.cs + Resource + Resources + Assets + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Release + DEBUG; + prompt + 4 + None + latest + + + true + portable + true + bin\Release + prompt + 4 + bin\Release\FFImageLoading.Svg.Forms.xml + true + false + latest + + + + + + + + + ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll + + + ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll + + + ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll + + + ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll + + + ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll + + + ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll + + + ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll + + + ..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Transition.dll + + + ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll + + + ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll + + + ..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.Palette.dll + + + ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll + + + ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll + + + ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll + + + ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll + + + ..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Design.dll + + + ..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.MediaRouter.dll + + + ..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\FormsViewGroup.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.Android.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Xaml.dll + + + + ..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll + + + ..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll + + + ..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll + + + ..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll + + + ..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll + + + ..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll + + + ..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll + + + ..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll + + + ..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll + + + ..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll + + + ..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll + + + ..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll + + + ..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll + + + ..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll + + + ..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll + + + ..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll + + + ..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomTabs.dll + + + + + + + + {0BF13419-BA9C-4004-812C-EB22E41927D9} + FFImageLoading.Svg.Droid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Forms.Mac/FFImageLoading.Svg.Forms.Mac.csproj b/source/FFImageLoading.Svg.Forms.Mac/FFImageLoading.Svg.Forms.Mac.csproj index b0645aee9..57bb92193 100644 --- a/source/FFImageLoading.Svg.Forms.Mac/FFImageLoading.Svg.Forms.Mac.csproj +++ b/source/FFImageLoading.Svg.Forms.Mac/FFImageLoading.Svg.Forms.Mac.csproj @@ -1,109 +1,95 @@ - - - - - - Debug - AnyCPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg.Forms - FFImageLoading.Svg.Forms - v2.0 - Xamarin.Mac - Resources - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - DEBUG;__MACOS__ - prompt - 4 - false - false - false - false - false - HttpClientHandler - None - - None - latest - - - true - portable - true - bin\Release - __MACOS__ - prompt - 4 - bin\Release\FFImageLoading.Svg.Forms.xml - false - false - false - false - false - HttpClientHandler - None - - None - __MACOS__ - latest - - - - - - - ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} - FFImageLoading.Forms.Mac - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} - FFImageLoading.Svg.Mac - - - - - - - - + + + + + + Debug + AnyCPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms + v2.0 + Xamarin.Mac + Resources + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + DEBUG;__MACOS__ + prompt + 4 + false + false + false + false + false + HttpClientHandler + None + + + None + latest + + + true + portable + true + bin\Release + __MACOS__ + prompt + 4 + bin\Release\FFImageLoading.Svg.Forms.xml + false + false + false + false + false + HttpClientHandler + None + + + None + __MACOS__ + latest + + + + + + + ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll + + + + + + + + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} + FFImageLoading.Svg.Mac + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Forms.Tizen/FFImageLoading.Svg.Forms.Tizen.csproj b/source/FFImageLoading.Svg.Forms.Tizen/FFImageLoading.Svg.Forms.Tizen.csproj index f3de5cf01..e38635679 100644 --- a/source/FFImageLoading.Svg.Forms.Tizen/FFImageLoading.Svg.Forms.Tizen.csproj +++ b/source/FFImageLoading.Svg.Forms.Tizen/FFImageLoading.Svg.Forms.Tizen.csproj @@ -32,9 +32,6 @@ - - - diff --git a/source/FFImageLoading.Svg.Forms.Touch/FFImageLoading.Svg.Forms.Touch.csproj b/source/FFImageLoading.Svg.Forms.Touch/FFImageLoading.Svg.Forms.Touch.csproj index 61a639e19..02fa4c64a 100644 --- a/source/FFImageLoading.Svg.Forms.Touch/FFImageLoading.Svg.Forms.Touch.csproj +++ b/source/FFImageLoading.Svg.Forms.Touch/FFImageLoading.Svg.Forms.Touch.csproj @@ -1,97 +1,83 @@ - - - - Debug - AnyCPU - {A73A1EA8-E709-474D-9102-DCB2482950AB} - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg.Forms - FFImageLoading.Svg.Forms - Resources - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - prompt - 4 - SdkOnly - HttpClientHandler - Default - DEBUG;__UNIFIED__;__MOBILE__;__IOS__ - latest - - - true - portable - true - bin\Release - __UNIFIED__;__MOBILE__;__IOS__ - prompt - 4 - bin\Release\FFImageLoading.Svg.Forms.xml - SdkOnly - HttpClientHandler - Default - __UNIFIED__;__MOBILE__;__IOS__ - latest - - - - - - - - - - ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} - FFImageLoading.Svg.Touch - - - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} - FFImageLoading.Forms.Touch - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - - - - - - - + + + + Debug + AnyCPU + {A73A1EA8-E709-474D-9102-DCB2482950AB} + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms + Resources + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + prompt + 4 + SdkOnly + HttpClientHandler + Default + DEBUG;__UNIFIED__;__MOBILE__;__IOS__ + latest + + + true + portable + true + bin\Release + __UNIFIED__;__MOBILE__;__IOS__ + prompt + 4 + bin\Release\FFImageLoading.Svg.Forms.xml + SdkOnly + HttpClientHandler + Default + __UNIFIED__;__MOBILE__;__IOS__ + latest + + + + + + + + + + ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll + + + + + + + + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} + FFImageLoading.Svg.Touch + false + false + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Forms.Windows/FFImageLoading.Svg.Forms.Windows.csproj b/source/FFImageLoading.Svg.Forms.Windows/FFImageLoading.Svg.Forms.Windows.csproj index b51b4dd7f..bb956b44b 100644 --- a/source/FFImageLoading.Svg.Forms.Windows/FFImageLoading.Svg.Forms.Windows.csproj +++ b/source/FFImageLoading.Svg.Forms.Windows/FFImageLoading.Svg.Forms.Windows.csproj @@ -1,159 +1,147 @@ - - - - - Debug - AnyCPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E} - Library - Properties - FFImageLoading.Svg.Forms - FFImageLoading.Svg.Forms - FFImageLoading.Svg.Forms.Windows - en-US - PackageReference - UAP - 10.0.17134.0 - 10.0.16299.0 - 14 - latest - 512 - {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot - - - AnyCPU - true - portable - false - bin\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - prompt - 4 - - - AnyCPU - true - portable - true - bin\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - prompt - 4 - bin\Release\FFImageLoading.Svg.Forms.xml - - - x86 - true - portable - bin\x86\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - ;2008 - x86 - false - prompt - - - x86 - bin\x86\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - ;2008 - true - portable - x86 - false - prompt - - - ARM - true - portable - bin\ARM\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - ;2008 - ARM - false - prompt - - - ARM - bin\ARM\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - ;2008 - true - portable - ARM - false - prompt - - - AnyCPU - true - portable - bin\x64\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - ;2008 - AnyCPU - false - prompt - - - AnyCPU - bin\x64\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - ;2008 - true - portable - AnyCPU - false - prompt - - - - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - {3d6c1f12-68d7-44c2-a7de-8e7942627a01} - FFImageLoading.Forms - - - {5140739d-209c-41a7-9503-5d5733f4c091} - FFImageLoading.Svg.Windows - - - {610543a5-d06f-4bca-9443-e6addff06c71} - FFImageLoading.Windows - - - - - 6.1.5 - - - 1.68.0 - - - 3.6.0.344457 - - - - - 14.0 - - - + + + + + Debug + AnyCPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E} + Library + Properties + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms.Windows + en-US + PackageReference + UAP + 10.0.17134.0 + 10.0.16299.0 + 14 + latest + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot + + + AnyCPU + true + portable + false + bin\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + prompt + 4 + + + AnyCPU + true + portable + true + bin\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + prompt + 4 + bin\Release\FFImageLoading.Svg.Forms.xml + + + x86 + true + portable + bin\x86\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + ;2008 + x86 + false + prompt + + + x86 + bin\x86\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + ;2008 + true + portable + x86 + false + prompt + + + ARM + true + portable + bin\ARM\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + ;2008 + ARM + false + prompt + + + ARM + bin\ARM\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + ;2008 + true + portable + ARM + false + prompt + + + AnyCPU + true + portable + bin\x64\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + ;2008 + AnyCPU + false + prompt + + + AnyCPU + bin\x64\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + ;2008 + true + portable + AnyCPU + false + prompt + + + + + + + + {5140739d-209c-41a7-9503-5d5733f4c091} + FFImageLoading.Svg.Windows + + + + + 6.1.5 + + + 1.68.0 + + + 3.6.0.344457 + + + + + 14.0 + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Forms.Windows/Properties/FFImageLoading.Svg.Forms.Windows.rd.xml b/source/FFImageLoading.Svg.Forms.Windows/Properties/FFImageLoading.Svg.Forms.Windows.rd.xml index e00028317..f5a1a8202 100644 --- a/source/FFImageLoading.Svg.Forms.Windows/Properties/FFImageLoading.Svg.Forms.Windows.rd.xml +++ b/source/FFImageLoading.Svg.Forms.Windows/Properties/FFImageLoading.Svg.Forms.Windows.rd.xml @@ -1,33 +1,33 @@ - - - - - - - - - + + + + + + + + + diff --git a/source/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj b/source/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj index d077040b7..0f5be02be 100644 --- a/source/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj +++ b/source/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj @@ -38,11 +38,7 @@ - - - - diff --git a/source/FFImageLoading.Svg.Mac/FFImageLoading.Svg.Mac.csproj b/source/FFImageLoading.Svg.Mac/FFImageLoading.Svg.Mac.csproj index 5d9311a09..32c315ad5 100644 --- a/source/FFImageLoading.Svg.Mac/FFImageLoading.Svg.Mac.csproj +++ b/source/FFImageLoading.Svg.Mac/FFImageLoading.Svg.Mac.csproj @@ -1,85 +1,77 @@ - - - - Debug - AnyCPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg - FFImageLoading.Svg.Platform - v2.0 - Xamarin.Mac - Resources - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - DEBUG;__MACOS__ - prompt - 4 - false - false - false - false - false - HttpClientHandler - None - - None - latest - - - true - portable - true - bin\Release - __MACOS__ - prompt - 4 - bin\Release\FFImageLoading.Svg.Platform.xml - false - false - false - false - false - HttpClientHandler - None - - None - __MACOS__ - latest - - - - - - - - - ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - - - - - - + + + + Debug + AnyCPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg + FFImageLoading.Svg.Platform + v2.0 + Xamarin.Mac + Resources + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + DEBUG;__MACOS__ + prompt + 4 + false + false + false + false + false + HttpClientHandler + None + + + None + latest + + + true + portable + true + bin\Release + __MACOS__ + prompt + 4 + bin\Release\FFImageLoading.Svg.Platform.xml + false + false + false + false + false + HttpClientHandler + None + + + None + __MACOS__ + latest + + + + + + + + + ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Tizen/FFImageLoading.Svg.Tizen.csproj b/source/FFImageLoading.Svg.Tizen/FFImageLoading.Svg.Tizen.csproj index 78aeca7fd..bfb88e5ed 100644 --- a/source/FFImageLoading.Svg.Tizen/FFImageLoading.Svg.Tizen.csproj +++ b/source/FFImageLoading.Svg.Tizen/FFImageLoading.Svg.Tizen.csproj @@ -31,11 +31,6 @@ - - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Touch/FFImageLoading.Svg.Touch.csproj b/source/FFImageLoading.Svg.Touch/FFImageLoading.Svg.Touch.csproj index c058bd7d1..75932c852 100644 --- a/source/FFImageLoading.Svg.Touch/FFImageLoading.Svg.Touch.csproj +++ b/source/FFImageLoading.Svg.Touch/FFImageLoading.Svg.Touch.csproj @@ -1,74 +1,70 @@ - - - - Debug - AnyCPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg.Platform - FFImageLoading.Svg.Platform - Resources - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Release - prompt - 4 - - - - DEBUG;__UNIFIED__;__MOBILE__;__IOS__; - latest - - - true - portable - true - bin\Release - __UNIFIED__;__MOBILE__;__IOS__; - prompt - 4 - bin\Release\FFImageLoading.Svg.Platform.xml - - - - __UNIFIED__;__MOBILE__;__IOS__; - latest - - - - - - - - - - ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll - - - - - - MvxSvgCachedImageView.cs - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - - - - - + + + + Debug + AnyCPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg.Platform + FFImageLoading.Svg.Platform + Resources + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Release + prompt + 4 + + + + + + + DEBUG;__UNIFIED__;__MOBILE__;__IOS__; + latest + + + true + portable + true + bin\Release + __UNIFIED__;__MOBILE__;__IOS__; + prompt + 4 + bin\Release\FFImageLoading.Svg.Platform.xml + + + + + + + __UNIFIED__;__MOBILE__;__IOS__; + latest + + + + + + + + + + ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll + + + + + + MvxSvgCachedImageView.cs + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Windows/FFImageLoading.Svg.Windows.csproj b/source/FFImageLoading.Svg.Windows/FFImageLoading.Svg.Windows.csproj index 0f874654f..9468a0387 100644 --- a/source/FFImageLoading.Svg.Windows/FFImageLoading.Svg.Windows.csproj +++ b/source/FFImageLoading.Svg.Windows/FFImageLoading.Svg.Windows.csproj @@ -1,146 +1,136 @@ - - - - - Debug - AnyCPU - {5140739D-209C-41A7-9503-5D5733F4C091} - Library - Properties - FFImageLoading.Svg.Platform - FFImageLoading.Svg.Platform - FFImageLoading.Svg.Platform.Windows - en-US - UAP - 10.0.17134.0 - 10.0.16299.0 - 14 - PackageReference - latest - 512 - {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot - 1701;1702;1705;1591;1587;NU1605 - - - AnyCPU - true - portable - false - bin\Debug - TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; - prompt - 4 - - - AnyCPU - true - portable - true - bin\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; - prompt - 4 - bin\Release\FFImageLoading.Svg.Platform.xml - - - x86 - true - portable - bin\x86\Debug - TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; - x86 - false - prompt - - - x86 - bin\x86\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - x86 - false - prompt - - - ARM - true - portable - bin\ARM\Debug - TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; - ARM - false - prompt - - - ARM - bin\ARM\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - ARM - false - prompt - - - AnyCPU - true - portable - bin\x64\Debug - TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; - AnyCPU - false - prompt - - - AnyCPU - bin\x64\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - AnyCPU - false - prompt - - - - MvxSvgCachedImageView.cs - - - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - {610543a5-d06f-4bca-9443-e6addff06c71} - FFImageLoading.Windows - - - - - 6.1.5 - - - 1.68.0 - - - - - 14.0 - - - + + + + + Debug + AnyCPU + {5140739D-209C-41A7-9503-5D5733F4C091} + Library + Properties + FFImageLoading.Svg.Platform + FFImageLoading.Svg.Platform + FFImageLoading.Svg.Platform.Windows + en-US + UAP + 10.0.17134.0 + 10.0.16299.0 + 14 + PackageReference + latest + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot + 1701;1702;1705;1591;1587;NU1605 + + + AnyCPU + true + portable + false + bin\Debug + TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; + prompt + 4 + + + AnyCPU + true + portable + true + bin\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; + prompt + 4 + bin\Release\FFImageLoading.Svg.Platform.xml + + + x86 + true + portable + bin\x86\Debug + TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; + x86 + false + prompt + + + x86 + bin\x86\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + x86 + false + prompt + + + ARM + true + portable + bin\ARM\Debug + TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; + ARM + false + prompt + + + ARM + bin\ARM\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + ARM + false + prompt + + + AnyCPU + true + portable + bin\x64\Debug + TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; + AnyCPU + false + prompt + + + AnyCPU + bin\x64\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + AnyCPU + false + prompt + + + + MvxSvgCachedImageView.cs + + + + + + + 6.1.5 + + + 1.68.0 + + + + + 14.0 + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Windows/Properties/FFImageLoading.Svg.Windows.rd.xml b/source/FFImageLoading.Svg.Windows/Properties/FFImageLoading.Svg.Windows.rd.xml index a1e5c44cc..dfcef96a4 100644 --- a/source/FFImageLoading.Svg.Windows/Properties/FFImageLoading.Svg.Windows.rd.xml +++ b/source/FFImageLoading.Svg.Windows/Properties/FFImageLoading.Svg.Windows.rd.xml @@ -1,33 +1,33 @@ - - - - - - - - - + + + + + + + + + diff --git a/source/FFImageLoading.Svg/FFImageLoading.Svg.csproj b/source/FFImageLoading.Svg/FFImageLoading.Svg.csproj index a3f35fddd..b0d6d9648 100644 --- a/source/FFImageLoading.Svg/FFImageLoading.Svg.csproj +++ b/source/FFImageLoading.Svg/FFImageLoading.Svg.csproj @@ -34,8 +34,4 @@ - - - - diff --git a/source/FFImageLoading.Tizen/FFImageLoading.Tizen.csproj b/source/FFImageLoading.Tizen/FFImageLoading.Tizen.csproj index 1b1678e47..06c362214 100644 --- a/source/FFImageLoading.Tizen/FFImageLoading.Tizen.csproj +++ b/source/FFImageLoading.Tizen/FFImageLoading.Tizen.csproj @@ -29,10 +29,6 @@ - - - - diff --git a/source/FFImageLoading.Touch/FFImageLoading.Touch.csproj b/source/FFImageLoading.Touch/FFImageLoading.Touch.csproj index 98603feb7..eeb0a3969 100644 --- a/source/FFImageLoading.Touch/FFImageLoading.Touch.csproj +++ b/source/FFImageLoading.Touch/FFImageLoading.Touch.csproj @@ -1,88 +1,78 @@ - - - - Debug - AnyCPU - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - Library - FFImageLoading - Resources - FFImageLoading.Platform - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - DEBUG;__UNIFIED__;__MOBILE__;__IOS__ - prompt - 4 - false - Latest - - - true - portable - true - bin\Release - prompt - 4 - false - bin\Release\FFImageLoading.Platform.xml - __UNIFIED__;__MOBILE__;__IOS__ - Latest - - - - - - - - - ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll - - - - - - - - - - - - - - Extensions\TaskParameterExtensions.cs - - - - - - - - - - - - - - - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - - - + + + + Debug + AnyCPU + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {1597F7D4-432C-4F26-B508-0F6FAF0B9711} + Library + FFImageLoading + Resources + FFImageLoading.Platform + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + DEBUG;__UNIFIED__;__MOBILE__;__IOS__ + prompt + 4 + false + Latest + + + true + portable + true + bin\Release + prompt + 4 + false + bin\Release\FFImageLoading.Platform.xml + __UNIFIED__;__MOBILE__;__IOS__ + Latest + + + + + + + + + ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll + + + + + + + + + + + + Extensions\TaskParameterExtensions.cs + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Droid/FFImageLoading.Transformations.Droid.csproj b/source/FFImageLoading.Transformations.Droid/FFImageLoading.Transformations.Droid.csproj index e9dcbc7f2..2669f8ac1 100644 --- a/source/FFImageLoading.Transformations.Droid/FFImageLoading.Transformations.Droid.csproj +++ b/source/FFImageLoading.Transformations.Droid/FFImageLoading.Transformations.Droid.csproj @@ -1,81 +1,71 @@ - - - - Debug - AnyCPU - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {BD3CEB96-93D6-47BD-9474-01DFCD320897} - Library - FFImageLoading.Transformations - Assets - Resources - Resource - FFImageLoading.Transformations - v9.0 - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - ANDROID;__ANDROID__; - prompt - 4 - None - false - ANDROID;__ANDROID__; - latest - - - true - portable - true - bin\Release - ANDROID;__ANDROID__; - prompt - 4 - false - false - bin\Release\FFImageLoading.Transformations.xml - ANDROID;__ANDROID__; - latest - - - - - - - - - - - - - - - - FlipType.cs - - - - - CornerTransformType.cs - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - + + + + Debug + AnyCPU + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {BD3CEB96-93D6-47BD-9474-01DFCD320897} + Library + FFImageLoading.Transformations + Assets + Resources + Resource + FFImageLoading.Transformations + v9.0 + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + ANDROID;__ANDROID__; + prompt + 4 + None + false + ANDROID;__ANDROID__; + latest + + + true + portable + true + bin\Release + ANDROID;__ANDROID__; + prompt + 4 + false + false + bin\Release\FFImageLoading.Transformations.xml + ANDROID;__ANDROID__; + latest + + + + + + + + + + + + + + + + FlipType.cs + + + + + CornerTransformType.cs + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Mac/FFImageLoading.Transformations.Mac.csproj b/source/FFImageLoading.Transformations.Mac/FFImageLoading.Transformations.Mac.csproj index 56a4b7e9d..b4fd8e582 100644 --- a/source/FFImageLoading.Transformations.Mac/FFImageLoading.Transformations.Mac.csproj +++ b/source/FFImageLoading.Transformations.Mac/FFImageLoading.Transformations.Mac.csproj @@ -1,103 +1,93 @@ - - - - Debug - AnyCPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Transformations - FFImageLoading.Transformations - v2.0 - Xamarin.Mac - Resources - 1591 - - - true - portable - false - bin\Debug - DEBUG;__MACOS__ - prompt - 4 - false - false - false - false - false - HttpClientHandler - None - None - None - - false - latest - - - true - portable - true - bin\Release - __MACOS__ - prompt - 4 - false - bin\Release\FFImageLoading.Transformations.xml - false - false - false - false - false - HttpClientHandler - None - - None - __MACOS__ - false - anycpu - latest - - - - - - - - - - - - - - - - - - - - - CornerTransformType.cs - - - FlipType.cs - - - - - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - - - - - + + + + Debug + AnyCPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Transformations + FFImageLoading.Transformations + v2.0 + Xamarin.Mac + Resources + 1591 + + + true + portable + false + bin\Debug + DEBUG;__MACOS__ + prompt + 4 + false + false + false + false + false + HttpClientHandler + None + None + None + + + false + latest + + + true + portable + true + bin\Release + __MACOS__ + prompt + 4 + false + bin\Release\FFImageLoading.Transformations.xml + false + false + false + false + false + HttpClientHandler + None + + + None + __MACOS__ + false + anycpu + latest + + + + + + + + + + + + + + + + + + + + + CornerTransformType.cs + + + FlipType.cs + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Tizen/FFImageLoading.Transformations.Tizen.csproj b/source/FFImageLoading.Transformations.Tizen/FFImageLoading.Transformations.Tizen.csproj index 6b47cf6dc..cd062c901 100644 --- a/source/FFImageLoading.Transformations.Tizen/FFImageLoading.Transformations.Tizen.csproj +++ b/source/FFImageLoading.Transformations.Tizen/FFImageLoading.Transformations.Tizen.csproj @@ -20,9 +20,4 @@ - - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Touch/FFImageLoading.Transformations.Touch.csproj b/source/FFImageLoading.Transformations.Touch/FFImageLoading.Transformations.Touch.csproj index 2c64e2aa4..81ebd2fa3 100644 --- a/source/FFImageLoading.Transformations.Touch/FFImageLoading.Transformations.Touch.csproj +++ b/source/FFImageLoading.Transformations.Touch/FFImageLoading.Transformations.Touch.csproj @@ -1,78 +1,68 @@ - - - - Debug - AnyCPU - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} - Library - FFImageLoading.Transformations - Resources - FFImageLoading.Transformations - 1591 - - - true - portable - false - bin\Debug - prompt - 4 - false - DEBUG;__UNIFIED__;__MOBILE__;__IOS__; - latest - - - true - portable - true - bin\Release - prompt - 4 - false - bin\Release\FFImageLoading.Transformations.xml - __UNIFIED__;__MOBILE__;__IOS__; - latest - - - - - - - - - - - - - - - - - - - - - FlipType.cs - - - - CornerTransformType.cs - - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - + + + + Debug + AnyCPU + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} + Library + FFImageLoading.Transformations + Resources + FFImageLoading.Transformations + 1591 + + + true + portable + false + bin\Debug + prompt + 4 + false + DEBUG;__UNIFIED__;__MOBILE__;__IOS__; + latest + + + true + portable + true + bin\Release + prompt + 4 + false + bin\Release\FFImageLoading.Transformations.xml + __UNIFIED__;__MOBILE__;__IOS__; + latest + + + + + + + + + + + + + + + + + + + + + FlipType.cs + + + + CornerTransformType.cs + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Windows/FFImageLoading.Transformations.Windows.csproj b/source/FFImageLoading.Transformations.Windows/FFImageLoading.Transformations.Windows.csproj index 0f76693ba..612d02789 100644 --- a/source/FFImageLoading.Transformations.Windows/FFImageLoading.Transformations.Windows.csproj +++ b/source/FFImageLoading.Transformations.Windows/FFImageLoading.Transformations.Windows.csproj @@ -36,11 +36,6 @@ - - - - - CornerTransformType.cs diff --git a/source/FFImageLoading.Transformations.Wpf/BlurredTransformation.cs b/source/FFImageLoading.Transformations.Wpf/BlurredTransformation.cs new file mode 100644 index 000000000..f957186e3 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/BlurredTransformation.cs @@ -0,0 +1,126 @@ +using System; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class BlurredTransformation : TransformationBase + { + public BlurredTransformation() + { + Radius = 20d; + } + + public BlurredTransformation(double radius) + { + Radius = radius; + } + + public double Radius { get; set; } + + public override string Key + { + get { return string.Format("BlurredTransformation,radius={0}", Radius); } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, ImageSource source, bool isPlaceholder, string key) + { + + ToLegacyBlurred(bitmapSource, (int)Radius); + + return bitmapSource; + } + + // Source: http://incubator.quasimondo.com/processing/superfast_blur.php + public static void ToLegacyBlurred(BitmapHolder source, int radius) + { + int w = source.Width; + int h = source.Height; + int wm = w - 1; + int hm = h - 1; + int wh = w * h; + int div = radius + radius + 1; + int[] r = new int[wh]; + int[] g = new int[wh]; + int[] b = new int[wh]; + int rsum, gsum, bsum, x, y, i, yp, yi, yw; + int[] vmin = new int[Math.Max(w, h)]; + int[] vmax = new int[Math.Max(w, h)]; + + int[] dv = new int[256 * div]; + for (i = 0; i < 256 * div; i++) + { + dv[i] = (i / div); + } + + yw = yi = 0; + + for (y = 0; y < h; y++) + { + rsum = gsum = bsum = 0; + for (i = -radius; i <= radius; i++) + { + var p = source.GetPixel(yi + Math.Min(wm, Math.Max(i, 0))); + rsum += p.R; + gsum += p.G; + bsum += p.B; + } + for (x = 0; x < w; x++) + { + + r[yi] = dv[rsum]; + g[yi] = dv[gsum]; + b[yi] = dv[bsum]; + + if (y == 0) + { + vmin[x] = Math.Min(x + radius + 1, wm); + vmax[x] = Math.Max(x - radius, 0); + } + var p1 = source.GetPixel(yw + vmin[x]); + var p2 = source.GetPixel(yw + vmax[x]); + + rsum += p1.R - p2.R; + gsum += p1.G - p2.G; + bsum += p1.B - p2.B; + yi++; + } + yw += w; + } + + for (x = 0; x < w; x++) + { + rsum = gsum = bsum = 0; + yp = -radius * w; + for (i = -radius; i <= radius; i++) + { + yi = Math.Max(0, yp) + x; + rsum += r[yi]; + gsum += g[yi]; + bsum += b[yi]; + yp += w; + } + yi = x; + for (y = 0; y < h; y++) + { + // Preserve alpha channel: ( 0xff000000 & pix[yi] ) + var oldColor = source.GetPixel(yi); + var newColor = new ColorHolder(oldColor.A, dv[rsum], dv[gsum], dv[bsum]); + source.SetPixel(yi, newColor); + if (x == 0) + { + vmin[y] = Math.Min(y + radius + 1, hm) * w; + vmax[y] = Math.Max(y - radius, 0) * w; + } + var p1 = x + vmin[y]; + var p2 = x + vmax[y]; + + rsum += r[p1] - r[p2]; + gsum += g[p1] - g[p2]; + bsum += b[p1] - b[p2]; + + yi += w; + } + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/CircleTransformation.cs b/source/FFImageLoading.Transformations.Wpf/CircleTransformation.cs new file mode 100644 index 000000000..e5e2a68e7 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CircleTransformation.cs @@ -0,0 +1,31 @@ +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class CircleTransformation : TransformationBase + { + public CircleTransformation() : this(0d, null) + { + } + + public CircleTransformation(double borderSize, string borderHexColor) + { + BorderSize = borderSize; + BorderHexColor = borderHexColor; + } + + public double BorderSize { get; set; } + public string BorderHexColor { get; set; } + + + public override string Key + { + get { return string.Format("CircleTransformation,borderSize={0},borderHexColor={1}", BorderSize, BorderHexColor); } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return RoundedTransformation.ToRounded(bitmapSource, 0, 1f, 1f, BorderSize, BorderHexColor); + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/ColorFillTransformation.cs b/source/FFImageLoading.Transformations.Wpf/ColorFillTransformation.cs new file mode 100644 index 000000000..d82eb2295 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/ColorFillTransformation.cs @@ -0,0 +1,47 @@ +using System; +using FFImageLoading.Work; +using FFImageLoading.Extensions; + +namespace FFImageLoading.Transformations +{ + public class ColorFillTransformation : TransformationBase + { + public ColorFillTransformation() : this("#000000") + { + } + + public ColorFillTransformation(string hexColor) + { + HexColor = hexColor; + } + + public string HexColor { get; set; } + + public override string Key => string.Format("ColorFillTransformation,hexColor={0}", HexColor); + + public static ColorHolder BlendColor(ColorHolder color, ColorHolder backColor) + { + float amount = (float)color.A / 255; + + byte r = (byte)((color.R * amount) + backColor.R * (1 - amount)); + byte g = (byte)((color.G * amount) + backColor.G * (1 - amount)); + byte b = (byte)((color.B * amount) + backColor.B * (1 - amount)); + + return new ColorHolder(r, g, b); + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, ImageSource source, bool isPlaceholder, string key) + { + var len = bitmapSource.PixelCount; + var backColor = HexColor.ToColorFromHex(); + + for (var i = 0; i < len; i++) + { + var color = bitmapSource.GetPixel(i); + bitmapSource.SetPixel(i, BlendColor(color, backColor)); + } + + return bitmapSource; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/ColorSpaceTransformation.cs b/source/FFImageLoading.Transformations.Wpf/ColorSpaceTransformation.cs new file mode 100644 index 000000000..772dd8c23 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/ColorSpaceTransformation.cs @@ -0,0 +1,103 @@ +using FFImageLoading.Work; +using System; +using System.Linq; + +namespace FFImageLoading.Transformations +{ + public class ColorSpaceTransformation : TransformationBase + { + float[][] _rgbawMatrix; + + public ColorSpaceTransformation() : this(FFColorMatrix.InvertColorMatrix) + { + } + + public ColorSpaceTransformation(float[][] rgbawMatrix) + { + if (rgbawMatrix.Length != 5 || rgbawMatrix.Any(v => v.Length != 5)) + throw new ArgumentException("Wrong size of RGBAW color matrix"); + + RGBAWMatrix = rgbawMatrix; + } + + public float[][] RGBAWMatrix + { + get + { + return _rgbawMatrix; + } + + set + { + if (value.Length != 5 || value.Any(v => v.Length != 5)) + throw new ArgumentException("Wrong size of RGBAW color matrix"); + + _rgbawMatrix = value; + } + } + + public override string Key + { + get + { + return string.Format("ColorSpaceTransformation,rgbawMatrix={0}", + string.Join(",", _rgbawMatrix.Select(x => string.Join(",", x)).ToArray())); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + ToColorSpace(bitmapSource, _rgbawMatrix); + + return bitmapSource; + } + + public static void ToColorSpace(BitmapHolder bmp, float[][] rgbawMatrix) + { + var r0 = rgbawMatrix[0][0]; + var r1 = rgbawMatrix[0][1]; + var r2 = rgbawMatrix[0][2]; + var r3 = rgbawMatrix[0][3]; + + var g0 = rgbawMatrix[1][0]; + var g1 = rgbawMatrix[1][1]; + var g2 = rgbawMatrix[1][2]; + var g3 = rgbawMatrix[1][3]; + + var b0 = rgbawMatrix[2][0]; + var b1 = rgbawMatrix[2][1]; + var b2 = rgbawMatrix[2][2]; + var b3 = rgbawMatrix[2][3]; + + var a0 = rgbawMatrix[3][0]; + var a1 = rgbawMatrix[3][1]; + var a2 = rgbawMatrix[3][2]; + var a3 = rgbawMatrix[3][3]; + + var rOffset = rgbawMatrix[4][0]; + var gOffset = rgbawMatrix[4][1]; + var bOffset = rgbawMatrix[4][2]; + var aOffset = rgbawMatrix[4][3]; + + var nWidth = bmp.Width; + var nHeight = bmp.Height; + var len = bmp.PixelCount; + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + var a = color.A; + var r = color.R; + var g = color.G; + var b = color.B; + + var rNew = (int)(r * r0 + g * g0 + b * b0 + a * a0 + rOffset); + var gNew = (int)(r * r1 + g * g1 + b * b1 + a * a1 + gOffset); + var bNew = (int)(r * r2 + g * g2 + b * b2 + a * a2 + bOffset); + var aNew = (int)(r * r3 + g * g3 + b * b3 + a * a3 + aOffset); + + bmp.SetPixel(i, new ColorHolder(aNew, rNew, gNew, bNew)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/CornerTransformType.cs b/source/FFImageLoading.Transformations.Wpf/CornerTransformType.cs new file mode 100644 index 000000000..8abfcdaa4 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CornerTransformType.cs @@ -0,0 +1,31 @@ +using System; + +namespace FFImageLoading.Transformations +{ + [Flags] + public enum CornerTransformType + { + TopLeftCut = 0x1, + TopRightCut = 0x2, + BottomLeftCut = 0x4, + BottomRightCut = 0x8, + + TopLeftRounded = 0x10, + TopRightRounded = 0x20, + BottomLeftRounded = 0x40, + BottomRightRounded = 0x80, + + AllCut = TopLeftCut | TopRightCut | BottomLeftCut | BottomRightCut, + LeftCut = TopLeftCut | BottomLeftCut, + RightCut = TopRightCut | BottomRightCut, + TopCut = TopLeftCut | TopRightCut, + BottomCut = BottomLeftCut | BottomRightCut, + + AllRounded = TopLeftRounded | TopRightRounded | BottomLeftRounded | BottomRightRounded, + LeftRounded = TopLeftRounded | BottomLeftRounded, + RightRounded = TopRightRounded | BottomRightRounded, + TopRounded = TopLeftRounded | TopRightRounded, + BottomRounded = BottomLeftRounded | BottomRightRounded, + } +} + diff --git a/source/FFImageLoading.Transformations.Wpf/CornersTransformation.cs b/source/FFImageLoading.Transformations.Wpf/CornersTransformation.cs new file mode 100644 index 000000000..21adcb2f3 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CornersTransformation.cs @@ -0,0 +1,251 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class CornersTransformation : TransformationBase + { + public CornersTransformation() : this(20d, CornerTransformType.TopRightRounded) + { + } + + public CornersTransformation(double cornersSize, CornerTransformType cornersTransformType) + : this(cornersSize, cornersSize, cornersSize, cornersSize, cornersTransformType, 1d, 1d) + { + } + + public CornersTransformation(double topLeftCornerSize, double topRightCornerSize, double bottomLeftCornerSize, double bottomRightCornerSize, + CornerTransformType cornersTransformType) + : this(topLeftCornerSize, topRightCornerSize, bottomLeftCornerSize, bottomRightCornerSize, cornersTransformType, 1d, 1d) + { + } + + public CornersTransformation(double cornersSize, CornerTransformType cornersTransformType, double cropWidthRatio, double cropHeightRatio) + : this(cornersSize, cornersSize, cornersSize, cornersSize, cornersTransformType, cropWidthRatio, cropHeightRatio) + { + } + + public CornersTransformation(double topLeftCornerSize, double topRightCornerSize, double bottomLeftCornerSize, double bottomRightCornerSize, + CornerTransformType cornersTransformType, double cropWidthRatio, double cropHeightRatio) + { + TopLeftCornerSize = topLeftCornerSize; + TopRightCornerSize = topRightCornerSize; + BottomLeftCornerSize = bottomLeftCornerSize; + BottomRightCornerSize = bottomRightCornerSize; + CornersTransformType = cornersTransformType; + CropWidthRatio = cropWidthRatio; + CropHeightRatio = cropHeightRatio; + } + + public double TopLeftCornerSize { get; set; } + public double TopRightCornerSize { get; set; } + public double BottomLeftCornerSize { get; set; } + public double BottomRightCornerSize { get; set; } + public double CropWidthRatio { get; set; } + public double CropHeightRatio { get; set; } + public CornerTransformType CornersTransformType { get; set; } + + public override string Key + { + get + { + return string.Format("CornersTransformation,cornersSizes={0},{1},{2},{3},cornersTransformType={4},cropWidthRatio={5},cropHeightRatio={6},", + TopLeftCornerSize, TopRightCornerSize, BottomRightCornerSize, BottomLeftCornerSize, CornersTransformType, CropWidthRatio, CropHeightRatio); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToTransformedCorners(bitmapSource, TopLeftCornerSize, TopRightCornerSize, BottomLeftCornerSize, BottomRightCornerSize, + CornersTransformType, CropWidthRatio, CropHeightRatio); + } + + public static BitmapHolder ToTransformedCorners(BitmapHolder source, double topLeftCornerSize, double topRightCornerSize, double bottomLeftCornerSize, double bottomRightCornerSize, + CornerTransformType cornersTransformType, double cropWidthRatio, double cropHeightRatio) + { + double sourceWidth = source.Width; + double sourceHeight = source.Height; + + double desiredWidth = sourceWidth; + double desiredHeight = sourceHeight; + + double desiredRatio = cropWidthRatio / cropHeightRatio; + double currentRatio = sourceWidth / sourceHeight; + + if (currentRatio > desiredRatio) + desiredWidth = (cropWidthRatio * sourceHeight / cropHeightRatio); + else if (currentRatio < desiredRatio) + desiredHeight = (cropHeightRatio * sourceWidth / cropWidthRatio); + + double cropX = ((sourceWidth - desiredWidth) / 2); + double cropY = ((sourceHeight - desiredHeight) / 2); + + BitmapHolder bitmap = null; + + if (cropX != 0 || cropY != 0) + { + bitmap = CropTransformation.ToCropped(source, (int)cropX, (int)cropY, (int)(desiredWidth), (int)(desiredHeight)); + } + else + { + bitmap = new BitmapHolder(source.PixelData, source.Width, source.Height); + } + + topLeftCornerSize = topLeftCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + topRightCornerSize = topRightCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + bottomLeftCornerSize = bottomLeftCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + bottomRightCornerSize = bottomRightCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + + int topLeftSize = (int)topLeftCornerSize; + int topRightSize = (int)topRightCornerSize; + int bottomLeftSize = (int)bottomLeftCornerSize; + int bottomRightSize = (int)bottomRightCornerSize; + + int w = bitmap.Width; + int h = bitmap.Height; + + var transparentColor = ColorHolder.Transparent; + + for (int y = 0; y < h; y++) + { + for (int x = 0; x < w; x++) + { + if (x <= topLeftSize && y <= topLeftSize) + { //top left corner + if (!CheckCorner(topLeftSize, topLeftSize, topLeftSize, cornersTransformType, Corner.TopLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - topRightSize && y <= topRightSize && topRightSize > 0) + { // top right corner + if (!CheckCorner(w - topRightSize, topRightSize, topRightSize, cornersTransformType, Corner.TopRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - bottomRightSize && y >= h - bottomRightSize && bottomRightSize > 0) + { // bottom right corner + if (!CheckCorner(w - bottomRightSize, h - bottomRightSize, bottomRightSize, cornersTransformType, Corner.BottomRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x <= bottomLeftSize && y >= h - bottomLeftSize && bottomLeftSize > 0) + { // bottom left corner + if (!CheckCorner(bottomLeftSize, h - bottomLeftSize, bottomLeftSize, cornersTransformType, Corner.BottomLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + } + } + + return bitmap; + } + + private enum Corner + { + TopLeftCorner, + TopRightCorner, + BottomRightCorner, + BottomLeftCorner, + } + + private static bool HasFlag(CornerTransformType flags, CornerTransformType flag) + { + return (flags & flag) != 0; + } + + private static bool CheckCorner(int w, int h, int size, CornerTransformType flags, Corner which, int xC, int yC) + { + if ((HasFlag(flags, CornerTransformType.TopLeftCut) && which == Corner.TopLeftCorner) + || (HasFlag(flags, CornerTransformType.TopRightCut) && which == Corner.TopRightCorner) + || (HasFlag(flags, CornerTransformType.BottomRightCut) && which == Corner.BottomRightCorner) + || (HasFlag(flags, CornerTransformType.BottomLeftCut) && which == Corner.BottomLeftCorner)) + return CheckCutCorner(w, h, size, which, xC, yC); + + if ((HasFlag(flags, CornerTransformType.TopLeftRounded) && which == Corner.TopLeftCorner) + || (HasFlag(flags, CornerTransformType.TopRightRounded) && which == Corner.TopRightCorner) + || (HasFlag(flags, CornerTransformType.BottomRightRounded) && which == Corner.BottomRightCorner) + || (HasFlag(flags, CornerTransformType.BottomLeftRounded) && which == Corner.BottomLeftCorner)) + return CheckRoundedCorner(w, h, size, which, xC, yC); + + return true; + } + + private static bool CheckCutCorner(int w, int h, int size, Corner which, int xC, int yC) + { + switch (which) + { + case Corner.TopLeftCorner: + { //Testing if its outside the top left corner + return Slope(size, 0, xC-1, yC) < Slope(size, 0, 0, size); + } + case Corner.TopRightCorner: + { //Testing if its outside the top right corner + return Slope(w, 0, xC, yC) > Slope(w, 0, w+size, size); + } + case Corner.BottomRightCorner: + { //Testing if its outside the bottom right corner + return Slope(h+size, h, xC, yC) > Slope(h+size, h, w, h+size); + } + case Corner.BottomLeftCorner: + { //Testing if its outside the bottom left corner + return Slope(0, h, xC, yC) < Slope(0, h, size, h+size); + } + } + + return true; + } + + private static double Slope(double x1, double y1, double x2, double y2) + { + return (y2 - y1) / (x2 - x1); + } + + private static bool CheckRoundedCorner(int h, int k, int r, Corner which, int xC, int yC) + { + int x = 0; + int y = r; + int p = (3 - (2 * r)); + + do + { + switch (which) + { + case Corner.TopLeftCorner: + { //Testing if its outside the top left corner + if (xC <= h - x && yC <= k - y) return false; + else if (xC <= h - y && yC <= k - x) return false; + break; + } + case Corner.TopRightCorner: + { //Testing if its outside the top right corner + if (xC >= h + y && yC <= k - x) return false; + else if (xC >= h + x && yC <= k - y) return false; + break; + } + case Corner.BottomRightCorner: + { //Testing if its outside the bottom right corner + if (xC >= h + x && yC >= k + y) return false; + else if (xC >= h + y && yC >= k + x) return false; + break; + } + case Corner.BottomLeftCorner: + { //Testing if its outside the bottom left corner + if (xC <= h - y && yC >= k + x) return false; + else if (xC <= h - x && yC >= k + y) return false; + break; + } + } + + x++; + + if (p < 0) + { + p += ((4 * x) + 6); + } + else + { + y--; + p += ((4 * (x - y)) + 10); + } + } while (x <= y); + + return true; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/CropTransformation.cs b/source/FFImageLoading.Transformations.Wpf/CropTransformation.cs new file mode 100644 index 000000000..8d6a7af5d --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CropTransformation.cs @@ -0,0 +1,125 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class CropTransformation : TransformationBase + { + public CropTransformation() : this(1d, 0d, 0d) + { + } + + public CropTransformation(double zoomFactor, double xOffset, double yOffset) : this(zoomFactor, xOffset, yOffset, 1f, 1f) + { + } + + public CropTransformation(double zoomFactor, double xOffset, double yOffset, double cropWidthRatio, double cropHeightRatio) + { + ZoomFactor = zoomFactor; + XOffset = xOffset; + YOffset = yOffset; + CropWidthRatio = cropWidthRatio; + CropHeightRatio = cropHeightRatio; + + if (ZoomFactor < 1f) + ZoomFactor = 1f; + } + + public double ZoomFactor { get; set; } + public double XOffset { get; set; } + public double YOffset { get; set; } + public double CropWidthRatio { get; set; } + public double CropHeightRatio { get; set; } + + public override string Key + { + get + { + return string.Format("CropTransformation,zoomFactor={0},xOffset={1},yOffset={2},cropWidthRatio={3},cropHeightRatio={4}", + ZoomFactor, XOffset, YOffset, CropWidthRatio, CropHeightRatio); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToCropped(bitmapSource, ZoomFactor, XOffset, YOffset, CropWidthRatio, CropHeightRatio); + } + + public static BitmapHolder ToCropped(BitmapHolder source, double zoomFactor, double xOffset, double yOffset, double cropWidthRatio, double cropHeightRatio) + { + double sourceWidth = source.Width; + double sourceHeight = source.Height; + + double desiredWidth = sourceWidth; + double desiredHeight = sourceHeight; + + double desiredRatio = cropWidthRatio / cropHeightRatio; + double currentRatio = sourceWidth / sourceHeight; + + if (currentRatio > desiredRatio) + desiredWidth = (cropWidthRatio * sourceHeight / cropHeightRatio); + else if (currentRatio < desiredRatio) + desiredHeight = (cropHeightRatio * sourceWidth / cropWidthRatio); + + xOffset = xOffset * desiredWidth; + yOffset = yOffset * desiredHeight; + + desiredWidth = desiredWidth / zoomFactor; + desiredHeight = desiredHeight / zoomFactor; + + float cropX = (float)(((sourceWidth - desiredWidth) / 2) + xOffset); + float cropY = (float)(((sourceHeight - desiredHeight) / 2) + yOffset); + + if (cropX < 0) + cropX = 0; + + if (cropY < 0) + cropY = 0; + + if (cropX + desiredWidth > sourceWidth) + cropX = (float)(sourceWidth - desiredWidth); + + if (cropY + desiredHeight > sourceHeight) + cropY = (float)(sourceHeight - desiredHeight); + + int width = (int)desiredWidth; + int height = (int)desiredHeight; + + // Copy the pixels line by line using fast BlockCopy + var result = new byte[width * height * 4]; + + for (var line = 0; line < height; line++) + { + var srcOff = (((int)cropY + line) * source.Width + (int)cropX) * ColorExtensions.SizeOfArgb; + var dstOff = line * width * ColorExtensions.SizeOfArgb; + Helpers.BlockCopy(source.PixelData, srcOff, result, dstOff, width * ColorExtensions.SizeOfArgb); + } + + return new BitmapHolder(result, width, height); + } + + public static BitmapHolder ToCropped(BitmapHolder source, int x, int y, int width, int height) + { + var srcWidth = source.Width; + var srcHeight = source.Height; + + // Clamp to boundaries + if (x < 0) x = 0; + if (x + width > srcWidth) width = srcWidth - x; + if (y < 0) y = 0; + if (y + height > srcHeight) height = srcHeight - y; + + // Copy the pixels line by line using fast BlockCopy + var result = new byte[width * height * 4]; + + for (var line = 0; line < height; line++) + { + var srcOff = ((y + line) * srcWidth + x) * ColorExtensions.SizeOfArgb; + var dstOff = line * width * ColorExtensions.SizeOfArgb; + Helpers.BlockCopy(source.PixelData, srcOff, result, dstOff, width * ColorExtensions.SizeOfArgb); + } + + return new BitmapHolder(result, width, height); + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj b/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj new file mode 100644 index 000000000..b218db96a --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj @@ -0,0 +1,62 @@ + + + + + Debug + AnyCPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04} + Library + Properties + FFImageLoading.Transformations + FFImageLoading.Transformations + v4.7.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Wpf/FlipTransformation.cs b/source/FFImageLoading.Transformations.Wpf/FlipTransformation.cs new file mode 100644 index 000000000..dfb1bfa63 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/FlipTransformation.cs @@ -0,0 +1,66 @@ +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class FlipTransformation : TransformationBase + { + public FlipTransformation() : this(FlipType.Horizontal) + { + } + + public FlipTransformation(FlipType flipType) + { + FlipType = flipType; + } + + public override string Key + { + get { return string.Format("FlipTransformation,Type={0}", FlipType); } + } + + public FlipType FlipType { get; set; } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToFlipped(bitmapSource, FlipType); + } + + public static BitmapHolder ToFlipped(BitmapHolder bmp, FlipType flipMode) + { + // Use refs for faster access (really important!) speeds up a lot! + var w = bmp.Width; + var h = bmp.Height; + var i = 0; + BitmapHolder result = new BitmapHolder(new byte[bmp.PixelData.Length], w, h); + + if (flipMode == FlipType.Vertical) + { + var rp = result.PixelData; + for (var y = h - 1; y >= 0; y--) + { + for (var x = 0; x < w; x++) + { + var srcInd = y * w + x; + result.SetPixel(i, bmp.GetPixel(srcInd)); + i++; + } + } + } + else + { + var rp = result.PixelData; + for (var y = 0; y < h; y++) + { + for (var x = w - 1; x >= 0; x--) + { + var srcInd = y * w + x; + result.SetPixel(i, bmp.GetPixel(srcInd)); + i++; + } + } + } + + return result; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/FlipType.cs b/source/FFImageLoading.Transformations.Wpf/FlipType.cs new file mode 100644 index 000000000..755541ae5 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/FlipType.cs @@ -0,0 +1,11 @@ +using System; + +namespace FFImageLoading.Transformations +{ + public enum FlipType + { + Horizontal, + Vertical + } +} + diff --git a/source/FFImageLoading.Transformations.Wpf/GrayscaleTransformation.cs b/source/FFImageLoading.Transformations.Wpf/GrayscaleTransformation.cs new file mode 100644 index 000000000..9210a253c --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/GrayscaleTransformation.cs @@ -0,0 +1,46 @@ +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class GrayscaleTransformation : TransformationBase + { + public GrayscaleTransformation() + { + } + + public override string Key + { + get { return "GrayscaleTransformation"; } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + ToGrayscale(bitmapSource); + + return bitmapSource; + } + + public static void ToGrayscale(BitmapHolder bmp) + { + var nWidth = bmp.Width; + var nHeight = bmp.Height; + + var len = bmp.PixelCount; + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + int a = color.A; + int r = color.R; + int g = color.G; + int b = color.B; + + // Convert to gray with constant factors 0.2126, 0.7152, 0.0722 + var gray = (r * 6966 + g * 23436 + b * 2366) >> 15; + r = g = b = gray; + + bmp.SetPixel(i, new ColorHolder(a, r, g, b)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/Helpers/Helpers.cs b/source/FFImageLoading.Transformations.Wpf/Helpers/Helpers.cs new file mode 100644 index 000000000..195a69193 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/Helpers/Helpers.cs @@ -0,0 +1,12 @@ +using System; + +namespace FFImageLoading.Transformations +{ + public static class Helpers + { + public static void BlockCopy(Array src, int srcOffset, Array dest, int destOffset, int count) + { + Buffer.BlockCopy(src, srcOffset, dest, destOffset, count); + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/Properties/AssemblyInfo.cs b/source/FFImageLoading.Transformations.Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..57fd649e1 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FFImageLoading.Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FFImageLoading.Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a63b1175-5fb5-4a9c-bcc5-8ac091876d04")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/FFImageLoading.Transformations.Wpf/RotateTransformation.cs b/source/FFImageLoading.Transformations.Wpf/RotateTransformation.cs new file mode 100644 index 000000000..84a8d4867 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/RotateTransformation.cs @@ -0,0 +1,193 @@ +using System; +using FFImageLoading.Work; +using FFImageLoading.Helpers; + +namespace FFImageLoading.Transformations +{ + public class RotateTransformation : TransformationBase + { + public RotateTransformation() : this(30d) + { + } + + public RotateTransformation(double degrees) : this(degrees, false, false) + { + } + + public RotateTransformation(double degrees, bool ccw) : this(degrees, ccw, false) + { + } + + public RotateTransformation(double degrees, bool ccw, bool resize) + { + Degrees = degrees; + CCW = ccw; + Resize = resize; + } + + public double Degrees { get; set; } + public bool CCW { get; set; } + public bool Resize { get; set; } + + public override string Key + { + get { return string.Format("RotateTransformation,degrees={0},ccw={1},resize={2}", Degrees, CCW, Resize); } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToRotated(bitmapSource, Degrees, CCW, Resize); + } + + public static BitmapHolder ToRotated(BitmapHolder source, double degrees, bool ccw, bool resize) + { + if (degrees == 0 || degrees % 360 == 0) + return source; + + if (ccw) + degrees = 360d - degrees; + + // rotating clockwise, so it's negative relative to Cartesian quadrants + double cnAngle = -1.0 * (Math.PI / 180) * degrees; + + // general iterators + int i, j; + // calculated indices in Cartesian coordinates + int x, y; + double fDistance, fPolarAngle; + // for use in neighboring indices in Cartesian coordinates + int iFloorX, iCeilingX, iFloorY, iCeilingY; + // calculated indices in Cartesian coordinates with trailing decimals + double fTrueX, fTrueY; + // for interpolation + double fDeltaX, fDeltaY; + + // interpolated "top" pixels + double fTopRed, fTopGreen, fTopBlue, fTopAlpha; + + // interpolated "bottom" pixels + double fBottomRed, fBottomGreen, fBottomBlue, fBottomAlpha; + + // final interpolated color components + int iRed, iGreen, iBlue, iAlpha; + + int iCentreX, iCentreY; + int iDestCentreX, iDestCentreY; + int iWidth, iHeight, newWidth, newHeight; + + iWidth = source.Width; + iHeight = source.Height; + + if (!resize || (degrees % 180 == 0)) + { + newWidth = iWidth; + newHeight = iHeight; + } + else + { + var rad = degrees / (180 / Math.PI); + newWidth = (int)Math.Ceiling(Math.Abs(Math.Sin(rad) * iHeight) + Math.Abs(Math.Cos(rad) * iWidth)); + newHeight = (int)Math.Ceiling(Math.Abs(Math.Sin(rad) * iWidth) + Math.Abs(Math.Cos(rad) * iHeight)); + } + + + iCentreX = iWidth / 2; + iCentreY = iHeight / 2; + + iDestCentreX = newWidth / 2; + iDestCentreY = newHeight / 2; + + var newSource = new BitmapHolder(new byte[newWidth * newHeight * 4], newWidth, newHeight); + var oldw = source.Width; + + // assigning pixels of destination image from source image + // with bilinear interpolation + for (i = 0; i < newHeight; ++i) + { + for (j = 0; j < newWidth; ++j) + { + // convert raster to Cartesian + x = j - iDestCentreX; + y = iDestCentreY - i; + + // convert Cartesian to polar + fDistance = Math.Sqrt(x * x + y * y); + if (x == 0) + { + if (y == 0) + { + // center of image, no rotation needed + newSource.SetPixel(i * newWidth + j, source.GetPixel(iCentreY * oldw + iCentreX)); + continue; + } + if (y < 0) + { + fPolarAngle = 1.5 * Math.PI; + } + else + { + fPolarAngle = 0.5 * Math.PI; + } + } + else + { + fPolarAngle = Math.Atan2(y, x); + } + + // the crucial rotation part + // "reverse" rotate, so minus instead of plus + fPolarAngle -= cnAngle; + + // convert polar to Cartesian + fTrueX = fDistance * Math.Cos(fPolarAngle); + fTrueY = fDistance * Math.Sin(fPolarAngle); + + // convert Cartesian to raster + fTrueX = fTrueX + iCentreX; + fTrueY = iCentreY - fTrueY; + + iFloorX = (int)(Math.Floor(fTrueX)); + iFloorY = (int)(Math.Floor(fTrueY)); + iCeilingX = (int)(Math.Ceiling(fTrueX)); + iCeilingY = (int)(Math.Ceiling(fTrueY)); + + // check bounds + if (iFloorX < 0 || iCeilingX < 0 || iFloorX >= iWidth || iCeilingX >= iWidth || iFloorY < 0 || + iCeilingY < 0 || iFloorY >= iHeight || iCeilingY >= iHeight) + continue; + + fDeltaX = fTrueX - iFloorX; + fDeltaY = fTrueY - iFloorY; + + var clrTopLeft = source.GetPixel(iFloorY * oldw + iFloorX); + var clrTopRight = source.GetPixel(iFloorY * oldw + iCeilingX); + var clrBottomLeft = source.GetPixel(iCeilingY * oldw + iFloorX); + var clrBottomRight = source.GetPixel(iCeilingY * oldw + iCeilingX); + + fTopAlpha = (1 - fDeltaX) * (clrTopLeft.A) + fDeltaX * (clrTopRight.A); + fTopRed = (1 - fDeltaX) * (clrTopLeft.R) + fDeltaX * (clrTopRight.R); + fTopGreen = (1 - fDeltaX) * (clrTopLeft.G) + fDeltaX * (clrTopRight.G); + fTopBlue = (1 - fDeltaX) * (clrTopLeft.B) + fDeltaX * (clrTopRight.B); + + // linearly interpolate horizontally between bottom neighbors + fBottomAlpha = (1 - fDeltaX) * (clrBottomLeft.A) + fDeltaX * (clrBottomRight.A); + fBottomRed = (1 - fDeltaX) * (clrBottomLeft.R) + fDeltaX * (clrBottomRight.R); + fBottomGreen = (1 - fDeltaX) * (clrBottomLeft.G) + fDeltaX * (clrBottomRight.G); + fBottomBlue = (1 - fDeltaX) * (clrBottomLeft.B) + fDeltaX * (clrBottomRight.B); + + // linearly interpolate vertically between top and bottom interpolated results + iRed = (int)(Math.Round((1 - fDeltaY) * fTopRed + fDeltaY * fBottomRed)); + iGreen = (int)(Math.Round((1 - fDeltaY) * fTopGreen + fDeltaY * fBottomGreen)); + iBlue = (int)(Math.Round((1 - fDeltaY) * fTopBlue + fDeltaY * fBottomBlue)); + iAlpha = (int)(Math.Round((1 - fDeltaY) * fTopAlpha + fDeltaY * fBottomAlpha)); + + var a = iAlpha + 1; + + newSource.SetPixel(i * newWidth + j, new ColorHolder(iAlpha, iRed, iGreen, iBlue)); + } + } + + return newSource; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/RoundedTransformation.cs b/source/FFImageLoading.Transformations.Wpf/RoundedTransformation.cs new file mode 100644 index 000000000..1e688a01f --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/RoundedTransformation.cs @@ -0,0 +1,259 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using System; + +namespace FFImageLoading.Transformations +{ + public class RoundedTransformation : TransformationBase + { + public RoundedTransformation() : this(30d) + { + } + + public RoundedTransformation(double radius) : this(radius, 1d, 1d) + { + } + + public RoundedTransformation(double radius, double cropWidthRatio, double cropHeightRatio) : this(radius, cropWidthRatio, cropHeightRatio, 0d, null) + { + } + + public RoundedTransformation(double radius, double cropWidthRatio, double cropHeightRatio, double borderSize, string borderHexColor) + { + Radius = radius; + CropWidthRatio = cropWidthRatio; + CropHeightRatio = cropHeightRatio; + BorderSize = borderSize; + BorderHexColor = borderHexColor; + } + + public double Radius { get; set; } + public double CropWidthRatio { get; set; } + public double CropHeightRatio { get; set; } + public double BorderSize { get; set; } + public string BorderHexColor { get; set; } + + public override string Key + { + get + { + return string.Format("RoundedTransformation,radius={0},cropWidthRatio={1},cropHeightRatio={2},borderSize={3},borderHexColor={4}", + Radius, CropWidthRatio, CropHeightRatio, BorderSize, BorderHexColor); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToRounded(bitmapSource, (int)Radius, CropWidthRatio, CropHeightRatio, BorderSize, BorderHexColor); + } + + public static BitmapHolder ToRounded(BitmapHolder source, int rad, double cropWidthRatio, double cropHeightRatio, double borderSize, string borderHexColor) + { + double sourceWidth = source.Width; + double sourceHeight = source.Height; + + double desiredWidth = sourceWidth; + double desiredHeight = sourceHeight; + + double desiredRatio = cropWidthRatio / cropHeightRatio; + double currentRatio = sourceWidth / sourceHeight; + + if (currentRatio > desiredRatio) + desiredWidth = (cropWidthRatio * sourceHeight / cropHeightRatio); + else if (currentRatio < desiredRatio) + desiredHeight = (cropHeightRatio * sourceWidth / cropWidthRatio); + + double cropX = ((sourceWidth - desiredWidth) / 2); + double cropY = ((sourceHeight - desiredHeight) / 2); + + BitmapHolder bitmap = null; + + if (cropX != 0 || cropY != 0) + { + bitmap = CropTransformation.ToCropped(source, (int)cropX, (int)cropY, (int)(desiredWidth), (int)(desiredHeight)); + } + else + { + bitmap = new BitmapHolder(source.PixelData, source.Width, source.Height); + } + + if (rad == 0) + rad = (int)(Math.Min(desiredWidth, desiredHeight) / 2); + else rad = (int)(rad * (desiredWidth + desiredHeight) / 2 / 500); + + int w = (int)desiredWidth; + int h = (int)desiredHeight; + + var transparentColor = ColorHolder.Transparent; + + for (int y = 0; y < h; y++) + { + for (int x = 0; x < w; x++) + { + if (x <= rad && y <= rad) + { //top left corner + if (!CheckRoundedCorner(rad, rad, rad, Corner.TopLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - rad && y <= rad) + { // top right corner + if (!CheckRoundedCorner(w - rad, rad, rad, Corner.TopRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - rad && y >= h - rad) + { // bottom right corner + if (!CheckRoundedCorner(w - rad, h - rad, rad, Corner.BottomRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x <= rad && y >= h - rad) + { // bottom left corner + if (!CheckRoundedCorner(rad, h - rad, rad, Corner.BottomLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + } + } + + //TODO draws a border - we should optimize that and add some anti-aliasing + //if (borderSize > 0d) + //{ + // borderSize = (borderSize * (desiredWidth + desiredHeight) / 2d / 500d); + // var borderColor = ColorHolder.Transparent; + + // try + // { + // borderColor = borderHexColor.ToColorFromHex(); + // } + // catch (Exception) + // { + // } + + // int intBorderSize = (int)Math.Ceiling(borderSize); + + // for (int i = 0; i < intBorderSize; i++) + // { + // CircleAA(bitmap, i, borderColor); + // } + //} + + return bitmap; + } + + private enum Corner + { + TopLeftCorner, + TopRightCorner, + BottomRightCorner, + BottomLeftCorner, + } + + private static bool CheckRoundedCorner(int h, int k, int r, Corner which, int xC, int yC) + { + int x = 0; + int y = r; + int p = (3 - (2 * r)); + + do + { + switch (which) + { + case Corner.TopLeftCorner: + { //Testing if its outside the top left corner + if (xC <= h - x && yC <= k - y) return false; + else if (xC <= h - y && yC <= k - x) return false; + break; + } + case Corner.TopRightCorner: + { //Testing if its outside the top right corner + if (xC >= h + y && yC <= k - x) return false; + else if (xC >= h + x && yC <= k - y) return false; + break; + } + case Corner.BottomRightCorner: + { //Testing if its outside the bottom right corner + if (xC >= h + x && yC >= k + y) return false; + else if (xC >= h + y && yC >= k + x) return false; + break; + } + case Corner.BottomLeftCorner: + { //Testing if its outside the bottom left corner + if (xC <= h - y && yC >= k + x) return false; + else if (xC <= h - x && yC >= k + y) return false; + break; + } + } + + x++; + + if (p < 0) + { + p += ((4 * x) + 6); + } + else + { + y--; + p += ((4 * (x - y)) + 10); + } + } while (x <= y); + + return true; + } + + // helper function, draws pixel and mirrors it + static void SetPixel4(BitmapHolder bitmap, int centerX, int centerY, int deltaX, int deltaY, ColorHolder color) + { + if (centerX + deltaX < bitmap.Width && centerY + deltaY < bitmap.Height) + bitmap.SetPixel(centerX + deltaX, centerY + deltaY, color); + + if (centerX - deltaX >= 0 && centerY + deltaY < bitmap.Height) + bitmap.SetPixel(centerX - deltaX, centerY + deltaY, color); + + if (centerX + deltaX < bitmap.Width && centerY - deltaY >= 0) + bitmap.SetPixel(centerX + deltaX, centerY - deltaY, color); + + if (centerX - deltaX >= 0 && centerY - deltaY >= 0) + bitmap.SetPixel(centerX - deltaX, centerY - deltaY, color); + } + + static void CircleAA(BitmapHolder bitmap, int size, ColorHolder color) + { + //if (size % 2 != 0) + // size++; + + int centerX = bitmap.Width / 2; + double radiusX = (bitmap.Width - size) / 2; + int centerY = bitmap.Height / 2; + double radiusY = (bitmap.Height - size) / 2; + + const int maxTransparency = 255; // default: 127 + double radiusX2 = radiusX * radiusX; + double radiusY2 = radiusY * radiusY; + + // upper and lower halves + int quarter = (int)Math.Round(radiusX2 / Math.Sqrt(radiusX2 + radiusY2)); + + for (int x = 0; x <= quarter; x++) + { + double y = Math.Floor(radiusY * Math.Sqrt(1 - x * x / radiusX2)); + double error = y - Math.Floor(y); + int transparency = (int)Math.Round(error * maxTransparency); + + //SetPixel4(bitmap, centerX, centerY, x, (int)Math.Floor(y), color); + SetPixel4(bitmap, centerX, centerY, x, (int)Math.Floor(y), new ColorHolder(transparency, color.R, color.G, color.B)); + SetPixel4(bitmap, centerX, centerY, x, (int)Math.Floor(y) + 1, new ColorHolder(maxTransparency - transparency, color.R, color.G, color.B)); + } + + // right and left halves + quarter = (int)Math.Round(radiusY2 / Math.Sqrt(radiusX2 + radiusY2)); + + for (int y = 0; y <= quarter; y++) + { + double x = Math.Floor(radiusX * Math.Sqrt(1 - y * y / radiusY2)); + double error = x - Math.Floor(x); + int transparency = (int)Math.Round(error * maxTransparency); + SetPixel4(bitmap, centerX, centerY, (int)Math.Floor(x), y, new ColorHolder(transparency, color.R, color.G, color.B)); + SetPixel4(bitmap, centerX, centerY, (int)Math.Floor(x) + 1, y, new ColorHolder(maxTransparency - transparency, color.R, color.G, color.B)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/SepiaTransformation.cs b/source/FFImageLoading.Transformations.Wpf/SepiaTransformation.cs new file mode 100644 index 000000000..844bef4a2 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/SepiaTransformation.cs @@ -0,0 +1,55 @@ +using System; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class SepiaTransformation : TransformationBase + { + public SepiaTransformation() + { + } + + public override string Key + { + get { return "SepiaTransformation"; } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + ToSepia(bitmapSource); + + return bitmapSource; + } + + public static void ToSepia(BitmapHolder bmp) + { + var nWidth = bmp.Width; + var nHeight = bmp.Height; + var len = bmp.PixelCount; + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + int a = color.A; + int r = color.R; + int g = color.G; + int b = color.B; + + var rNew = (int)Math.Min((.393 * r) + (.769 * g) + (.189 * (b)), 255.0); + var gNew = (int)Math.Min((.349 * r) + (.686 * g) + (.168 * (b)), 255.0); + var bNew = (int)Math.Min((.272 * r) + (.534 * g) + (.131 * (b)), 255.0); + + if (rNew > 255) + rNew = 255; + + if (gNew > 255) + gNew = 255; + + if (bNew > 255) + bNew = 255; + + bmp.SetPixel(i, new ColorHolder(a, rNew, gNew, bNew)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/TintTransformation.cs b/source/FFImageLoading.Transformations.Wpf/TintTransformation.cs new file mode 100644 index 000000000..eea8c8ff5 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/TintTransformation.cs @@ -0,0 +1,109 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Work; +using System; + +namespace FFImageLoading.Transformations +{ + public class TintTransformation : ColorSpaceTransformation + { + public TintTransformation() : this(0, 165, 0, 128) + { + } + + public TintTransformation(int r, int g, int b, int a) + { + R = r; + G = g; + B = b; + A = a; + } + + public TintTransformation(string hexColor) + { + HexColor = hexColor; + } + + string _hexColor; + public string HexColor + { + get + { + return _hexColor; + } + + set + { + _hexColor = value; + var color = value.ToColorFromHex(); + A = color.A; + R = color.R; + G = color.G; + B = color.B; + } + } + + public bool EnableSolidColor { get; set; } + + public int R { get; set; } + + public int G { get; set; } + + public int B { get; set; } + + public int A { get; set; } + + public override string Key + { + get + { + return string.Format("TintTransformation,R={0},G={1},B={2},A={3},HexColor={4},EnableSolidColor={5}", + R, G, B, A, HexColor, EnableSolidColor); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + if (EnableSolidColor) + { + ToReplacedColor(bitmapSource, R, G, B, A); + return bitmapSource; + } + + RGBAWMatrix = FFColorMatrix.ColorToTintMatrix(R, G, B, A); + + return base.Transform(bitmapSource, path, source, isPlaceholder, key); + } + + public static void ToReplacedColor(BitmapHolder bmp, int r, int g, int b, int a) + { + var nWidth = bmp.Width; + var nHeight = bmp.Height; + var len = bmp.PixelCount; + float percentage = (float)a / 255; + float left = 1 - percentage; + int rMin = (int)(r - (r * left)); + int gMin = (int)(g - (g * left)); + int bMin = (int)(b - (b * left)); + int rMax = (int)(r + (r * left)); + int gMax = (int)(g + (g * left)); + int bMax = (int)(b + (b * left)); + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + int currentAlpha = color.A; + var curR = color.R; + var curG = color.G; + var curB = color.B; + int rNew = (int)(curR + (255 - curR) * (percentage * r / 255)); + int gNew = (int)(curG + (255 - curG) * (percentage * g / 255)); + int bNew = (int)(curB + (255 - curB) * (percentage * b / 255)); + rNew = Math.Min(Math.Max(rMin, rNew), rMax); + gNew = Math.Min(Math.Max(gMin, gNew), gMax); + bNew = Math.Min(Math.Max(bMin, bNew), bMax); + + bmp.SetPixel(i, new ColorHolder(color.A, rNew, gNew, bNew)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj b/source/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj index ae390b2a7..65e178751 100644 --- a/source/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj +++ b/source/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj @@ -35,9 +35,4 @@ - - - - - diff --git a/source/FFImageLoading.Windows/Decoders/BaseDecoder.cs b/source/FFImageLoading.Windows/Decoders/BaseDecoder.cs index e85070307..dc64467a0 100644 --- a/source/FFImageLoading.Windows/Decoders/BaseDecoder.cs +++ b/source/FFImageLoading.Windows/Decoders/BaseDecoder.cs @@ -1,39 +1,39 @@ -using FFImageLoading.Config; -using FFImageLoading.Extensions; -using FFImageLoading.Helpers; -using FFImageLoading.Work; +using FFImageLoading.Config; +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using FFImageLoading.Work; using System; -using System.IO; -using System.Threading.Tasks; - +using System.IO; +using System.Threading.Tasks; + namespace FFImageLoading.Decoders { public class BaseDecoder : IDecoder - { - public async Task> DecodeAsync(Stream imageData, string path, ImageSource source, ImageInformation imageInformation, TaskParameter parameters) - { - BitmapHolder imageIn = null; - - if (imageData == null) - throw new ArgumentNullException(nameof(imageData)); - - bool allowUpscale = parameters.AllowUpscale ?? Configuration.AllowUpscale; - - if (parameters.Transformations == null || parameters.Transformations.Count == 0) - { - var bitmap = await imageData.ToBitmapImageAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); - imageIn = new BitmapHolder(bitmap); - } - else - { - imageIn = await imageData.ToBitmapHolderAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); - } - - return new DecodedImage() { Image = imageIn }; - } - - public Configuration Configuration => ImageService.Instance.Config; - - public IMiniLogger Logger => ImageService.Instance.Config.Logger; + { + public async Task> DecodeAsync(Stream imageData, string path, ImageSource source, ImageInformation imageInformation, TaskParameter parameters) + { + BitmapHolder imageIn = null; + + if (imageData == null) + throw new ArgumentNullException(nameof(imageData)); + + bool allowUpscale = parameters.AllowUpscale ?? Configuration.AllowUpscale; + + if (parameters.Transformations == null || parameters.Transformations.Count == 0) + { + var bitmap = await imageData.ToBitmapImageAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); + imageIn = new BitmapHolder(bitmap); + } + else + { + imageIn = await imageData.ToBitmapHolderAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); + } + + return new DecodedImage() { Image = imageIn }; + } + + public Configuration Configuration => ImageService.Instance.Config; + + public IMiniLogger Logger => ImageService.Instance.Config.Logger; } } diff --git a/source/FFImageLoading.Windows/FFImageLoading.Windows.csproj b/source/FFImageLoading.Windows/FFImageLoading.Windows.csproj index c4048a742..fed76f517 100644 --- a/source/FFImageLoading.Windows/FFImageLoading.Windows.csproj +++ b/source/FFImageLoading.Windows/FFImageLoading.Windows.csproj @@ -1,107 +1,99 @@ - - - - - 12.0 - Debug - AnyCPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71} - Library - Properties - FFImageLoading - FFImageLoading.Platform - FFImageLoading.Platform.Windows - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - Profile32 - v4.6 - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - TRACE;DEBUG;WINDOWS;__WINDOWS__; - prompt - 4 - true - Latest - - - true - portable - true - bin\Release - TRACE;WINDOWS;__WINDOWS__; - prompt - 4 - bin\Release\FFImageLoading.Platform.xml - true - Latest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Extensions\TaskParameterExtensions.cs - - - - - - - - - - - - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - - - - - - - - - - - - - - + + + + + 12.0 + Debug + AnyCPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71} + Library + Properties + FFImageLoading + FFImageLoading.Platform + FFImageLoading.Platform.Windows + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + Profile32 + v4.6 + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + TRACE;DEBUG;WINDOWS;__WINDOWS__; + prompt + 4 + true + Latest + + + true + portable + true + bin\Release + TRACE;WINDOWS;__WINDOWS__; + prompt + 4 + bin\Release\FFImageLoading.Platform.xml + true + Latest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Extensions\TaskParameterExtensions.cs + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Windows/Work/BitmapHolder.cs b/source/FFImageLoading.Windows/Work/BitmapHolder.cs index 9033f3b74..196240239 100644 --- a/source/FFImageLoading.Windows/Work/BitmapHolder.cs +++ b/source/FFImageLoading.Windows/Work/BitmapHolder.cs @@ -2,15 +2,15 @@ using FFImageLoading.Helpers; using System; using Windows.UI; -using Windows.UI.Xaml.Media.Imaging; - +using Windows.UI.Xaml.Media.Imaging; + namespace FFImageLoading.Work { public class BitmapHolder : IBitmap { - public BitmapHolder(WriteableBitmap bitmap) - { - WriteableBitmap = bitmap; + public BitmapHolder(WriteableBitmap bitmap) + { + WriteableBitmap = bitmap; } public BitmapHolder(byte[] pixels, int width, int height) diff --git a/source/FFImageLoading.Windows/Work/PlatformImageLoaderTask.cs b/source/FFImageLoading.Windows/Work/PlatformImageLoaderTask.cs index bc2044928..e137419a2 100644 --- a/source/FFImageLoading.Windows/Work/PlatformImageLoaderTask.cs +++ b/source/FFImageLoading.Windows/Work/PlatformImageLoaderTask.cs @@ -8,9 +8,9 @@ using System.Threading; using System.Threading.Tasks; using Windows.UI.Xaml.Media.Imaging; -using FFImageLoading.Decoders; -using System.Collections.Generic; - +using FFImageLoading.Decoders; +using System.Collections.Generic; + namespace FFImageLoading.Work { public class PlatformImageLoaderTask : ImageLoaderTask where TImageView : class @@ -40,82 +40,82 @@ await MainThreadDispatcher.PostAsync(() => protected override int DpiToPixels(int size) { return size.DpToPixels(); - } - - protected override IDecoder ResolveDecoder(ImageInformation.ImageType type) - { - switch (type) - { - case ImageInformation.ImageType.GIF: - case ImageInformation.ImageType.WEBP: - throw new NotImplementedException(); - default: - return new BaseDecoder(); - } - } - - protected override async Task TransformAsync(BitmapHolder bitmap, IList transformations, string path, ImageSource source, bool isPlaceholder) - { - await StaticLocks.DecodingLock.WaitAsync(CancellationTokenSource.Token).ConfigureAwait(false); // Applying transformations is both CPU and memory intensive - ThrowIfCancellationRequested(); - - try - { - foreach (var transformation in transformations) - { - ThrowIfCancellationRequested(); - - var old = bitmap; - - try - { - IBitmap bitmapHolder = transformation.Transform(bitmap, path, source, isPlaceholder, Key); - bitmap = bitmapHolder.ToNative(); - } - catch (Exception ex) - { - Logger.Error(string.Format("Transformation failed: {0}", transformation.Key), ex); - throw; - } - finally - { - if (old != null && old != bitmap && old.PixelData != bitmap.PixelData) - { - old.FreePixels(); - old = null; - } - } - } - } - finally + } + + protected override IDecoder ResolveDecoder(ImageInformation.ImageType type) + { + switch (type) + { + case ImageInformation.ImageType.GIF: + case ImageInformation.ImageType.WEBP: + throw new NotImplementedException(); + default: + return new BaseDecoder(); + } + } + + protected override async Task TransformAsync(BitmapHolder bitmap, IList transformations, string path, ImageSource source, bool isPlaceholder) + { + await StaticLocks.DecodingLock.WaitAsync(CancellationTokenSource.Token).ConfigureAwait(false); // Applying transformations is both CPU and memory intensive + ThrowIfCancellationRequested(); + + try + { + foreach (var transformation in transformations) + { + ThrowIfCancellationRequested(); + + var old = bitmap; + + try + { + IBitmap bitmapHolder = transformation.Transform(bitmap, path, source, isPlaceholder, Key); + bitmap = bitmapHolder.ToNative(); + } + catch (Exception ex) + { + Logger.Error(string.Format("Transformation failed: {0}", transformation.Key), ex); + throw; + } + finally + { + if (old != null && old != bitmap && old.PixelData != bitmap.PixelData) + { + old.FreePixels(); + old = null; + } + } + } + } + finally + { + StaticLocks.DecodingLock.Release(); + } + + return bitmap; + } + + protected override async Task GenerateImageFromDecoderContainerAsync(IDecodedImage decoded, ImageInformation imageInformation, bool isPlaceholder) + { + if (decoded.IsAnimated) + { + throw new NotImplementedException(); + } + else { - StaticLocks.DecodingLock.Release(); - } - - return bitmap; - } - - protected override async Task GenerateImageFromDecoderContainerAsync(IDecodedImage decoded, ImageInformation imageInformation, bool isPlaceholder) - { - if (decoded.IsAnimated) - { - throw new NotImplementedException(); - } - else - { - try - { - if (decoded.Image.HasWriteableBitmap) - return decoded.Image.WriteableBitmap; - - return await decoded.Image.ToBitmapImageAsync().ConfigureAwait(false); - } - finally - { - decoded.Image.FreePixels(); - decoded.Image = null; - } - } - } + try + { + if (decoded.Image.HasWriteableBitmap) + return decoded.Image.WriteableBitmap; + + return await decoded.Image.ToBitmapImageAsync().ConfigureAwait(false); + } + finally + { + decoded.Image.FreePixels(); + decoded.Image = null; + } + } + } } } diff --git a/source/FFImageLoading.Windows/app.config b/source/FFImageLoading.Windows/app.config index e52c6fa43..f3ed3d893 100644 --- a/source/FFImageLoading.Windows/app.config +++ b/source/FFImageLoading.Windows/app.config @@ -1,5 +1,5 @@ - - - - + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Wpf/Cache/IImageCache.cs b/source/FFImageLoading.Wpf/Cache/IImageCache.cs new file mode 100644 index 000000000..530aac8d9 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/IImageCache.cs @@ -0,0 +1,8 @@ +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Cache +{ + interface IImageCache : IMemoryCache + { + } +} diff --git a/source/FFImageLoading.Wpf/Cache/ImageCache.cs b/source/FFImageLoading.Wpf/Cache/ImageCache.cs new file mode 100644 index 000000000..a7fc212f7 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/ImageCache.cs @@ -0,0 +1,106 @@ +using System; +using FFImageLoading.Work; +using FFImageLoading.Helpers; +using System.Linq; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Cache +{ + class ImageCache : IImageCache + { + private static IImageCache _instance; + private readonly WriteableBitmapLRUCache _reusableBitmaps; + private readonly IMiniLogger _logger; + + private ImageCache(int maxCacheSize, IMiniLogger logger) + { + _logger = logger; + + if (maxCacheSize == 0) + { + //TODO Does anyone know how we could get available app ram from WinRT API? + //EasClientDeviceInformation deviceInfo = new EasClientDeviceInformation(); + //if (deviceInfo.OperatingSystem.ToLowerInvariant().Contains("phone")) + // maxCacheSize = 1000000 * 64; //64MB + //else + maxCacheSize = 1000000 * 256; //256MB + + _logger?.Debug($"Memory cache size: {maxCacheSize} bytes"); + } + + _reusableBitmaps = new WriteableBitmapLRUCache(maxCacheSize); + } + + public static IImageCache Instance + { + get + { + return _instance ?? (_instance = new ImageCache(ImageService.Instance.Config.MaxMemoryCacheSize, ImageService.Instance.Config.Logger)); + } + } + + public void Add(string key, ImageInformation imageInformation, BitmapSource bitmap) + { + if (string.IsNullOrWhiteSpace(key) || bitmap == null) + return; + + _reusableBitmaps.TryAdd(key, new Tuple(bitmap, imageInformation)); + } + + public ImageInformation GetInfo(string key) + { + Tuple cacheEntry; + if (_reusableBitmaps.TryGetValue (key, out cacheEntry)) + { + return cacheEntry.Item2; + } + + return null; + } + + public Tuple Get(string key) + { + if (string.IsNullOrWhiteSpace(key)) + return null; + + Tuple cacheEntry; + + if (_reusableBitmaps.TryGetValue(key, out cacheEntry) && cacheEntry.Item1 != null) + { + return new Tuple(cacheEntry.Item1, cacheEntry.Item2); + } + + return null; + } + + public void Clear() + { + _reusableBitmaps.Clear(); + + GC.Collect(); + } + + public void Remove(string key) + { + if (string.IsNullOrWhiteSpace(key)) + return; + + _logger.Debug (string.Format ("Called remove from memory cache for '{0}'", key)); + _reusableBitmaps.Remove(key); + } + + public void RemoveSimilar(string baseKey) + { + if (string.IsNullOrWhiteSpace(baseKey)) + return; + + var pattern = baseKey + ";"; + + var keysToRemove = _reusableBitmaps.Keys.Where(i => i.StartsWith(pattern, StringComparison.OrdinalIgnoreCase)).ToList(); + foreach (var key in keysToRemove) + { + Remove(key); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/LRUCache.cs b/source/FFImageLoading.Wpf/Cache/LRUCache.cs new file mode 100644 index 000000000..48120b75a --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/LRUCache.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFImageLoading.Cache +{ + public abstract class LRUCache where TKey : class where TValue : class + { + private readonly object _lockObj = new object(); + private int _currentSize; + private Dictionary>> _cacheMap = new Dictionary>>(); + protected LinkedList> _lruList = new LinkedList>(); + + protected int _capacity; + + public LRUCache(int capacity) + { + _capacity = capacity; + } + + public abstract int GetValueSize(TValue value); + + public bool ContainsKey(TKey key) + { + TValue dummy; + return TryGetValue(key, out dummy); + } + + public TValue Get(TKey key) + { + lock (_lockObj) + { + LinkedListNode> node; + if (_cacheMap.TryGetValue(key, out node)) + { + TValue value = node.Value.Value; + _lruList.Remove(node); + _lruList.AddLast(node); + return value; + } + return default(TValue); + } + } + + public bool TryAdd(TKey key, TValue value) + { + lock (_lockObj) + { + CleanAbandonedItems(); + + if (_cacheMap.ContainsKey(key)) + { + return false; + } + this.CheckSize(key, value); + LRUCacheItem cacheItem = new LRUCacheItem(key, value); + LinkedListNode> node = + new LinkedListNode>(cacheItem); + _lruList.AddLast(node); + _cacheMap.Add(key, node); + + return true; + } + } + + public bool TryGetValue(TKey key, out TValue value) + { + lock (_lockObj) + { + LinkedListNode> node; + if (_cacheMap.TryGetValue(key, out node)) + { + value = node.Value.Value; + + if (value == null) + { + Remove(key); + return false; + } + + _lruList.Remove(node); + _lruList.AddLast(node); + return true; + } + value = default(TValue); + return false; + } + } + + public void Clear() + { + lock (_lockObj) + { + _cacheMap.Clear(); + _lruList.Clear(); + } + } + + public IList Keys + { + get + { + lock (_lockObj) + { + return _cacheMap.Keys.ToList(); + } + } + } + + public IList Values + { + get + { + lock (_lockObj) + { + return _cacheMap.Values.Select(v => v.Value.Value).ToList(); + } + } + } + + void CleanAbandonedItems() + { + //TODO? + } + + protected virtual bool CheckSize(TKey key, TValue value) + { + var size = GetValueSize(value); + _currentSize += size; + + while (_currentSize > _capacity && _lruList.Count > 0) + { + this.RemoveFirst(); + } + + return true; + } + + public void Remove(TKey key) + { + LinkedListNode> node; + if (_cacheMap.TryGetValue(key, out node)) + { + _lruList.Remove(node); + } + } + + protected virtual void RemoveNode(LinkedListNode> node) + { + _lruList.Remove(node); + _cacheMap.Remove(node.Value.Key); + _currentSize -= GetValueSize(node.Value.Value); + } + + protected void RemoveFirst() + { + LinkedListNode> node = _lruList.First; + this.RemoveNode(node); + } + + protected class LRUCacheItem + { + public LRUCacheItem(K k, V v) + { + Key = k; + Value = v; + } + public K Key + { + get; + private set; + } + public V Value + { + get; + private set; + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/WriteableBitmapLRUCache.cs b/source/FFImageLoading.Wpf/Cache/WriteableBitmapLRUCache.cs new file mode 100644 index 000000000..57b44e738 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/WriteableBitmapLRUCache.cs @@ -0,0 +1,24 @@ +using FFImageLoading.Work; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media.Imaging; +namespace FFImageLoading.Cache +{ + public class WriteableBitmapLRUCache : LRUCache> + { + public WriteableBitmapLRUCache(int capacity) : base(capacity) + { + } + + public override int GetValueSize(Tuple value) + { + if (value?.Item2 == null) + return 0; + + return value.Item2.CurrentHeight * value.Item2.CurrentWidth * 4; + } + } +} diff --git a/source/FFImageLoading.Wpf/DataResolvers/DataResolverFactory.cs b/source/FFImageLoading.Wpf/DataResolvers/DataResolverFactory.cs new file mode 100644 index 000000000..f25d70575 --- /dev/null +++ b/source/FFImageLoading.Wpf/DataResolvers/DataResolverFactory.cs @@ -0,0 +1,32 @@ +using FFImageLoading.Cache; +using FFImageLoading.Config; +using FFImageLoading.Work; +using System; + +namespace FFImageLoading.DataResolvers +{ + public class DataResolverFactory : IDataResolverFactory + { + public virtual IDataResolver GetResolver(string identifier, ImageSource source, TaskParameter parameters, Configuration configuration) + { + switch (source) + { + case ImageSource.ApplicationBundle: + case ImageSource.CompiledResource: + return new ResourceDataResolver(); + case ImageSource.Filepath: + return new FileDataResolver(); + case ImageSource.Url: + if (!string.IsNullOrWhiteSpace(identifier) && identifier.IsDataUrl()) + return new DataUrlResolver(); + return new UrlDataResolver(configuration); + case ImageSource.Stream: + return new StreamDataResolver(); + case ImageSource.EmbeddedResource: + return new EmbeddedResourceResolver(); + default: + throw new NotSupportedException("Unknown type of ImageSource"); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/DataResolvers/FileDataResolver.cs b/source/FFImageLoading.Wpf/DataResolvers/FileDataResolver.cs new file mode 100644 index 000000000..d0d554a00 --- /dev/null +++ b/source/FFImageLoading.Wpf/DataResolvers/FileDataResolver.cs @@ -0,0 +1,30 @@ +using FFImageLoading.Work; +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using FFImageLoading.IO; + +namespace FFImageLoading.DataResolvers +{ + public class FileDataResolver : IDataResolver + { + public virtual Task Resolve(string identifier, TaskParameter parameters, CancellationToken token) + { + if (!FileStore.Exists(identifier)) + { + throw new FileNotFoundException(identifier); + } + + token.ThrowIfCancellationRequested(); + + var stream = FileStore.GetInputStream(identifier, true); + + var imageInformation = new ImageInformation(); + imageInformation.SetPath(identifier); + imageInformation.SetFilePath(identifier); + + return Task.FromResult(new DataResolverResult(stream, LoadingResult.Disk, imageInformation)); + } + } +} diff --git a/source/FFImageLoading.Wpf/DataResolvers/ResourceDataResolver.cs b/source/FFImageLoading.Wpf/DataResolvers/ResourceDataResolver.cs new file mode 100644 index 000000000..a06cee8a9 --- /dev/null +++ b/source/FFImageLoading.Wpf/DataResolvers/ResourceDataResolver.cs @@ -0,0 +1,90 @@ +using FFImageLoading.Work; +using System; +using System.Threading; +using System.Threading.Tasks; +using System.IO; +using System.Collections.Generic; +using System.Windows; +using System.Windows.Media.Imaging; +using System.Windows.Resources; +using FFImageLoading.Extensions; + +namespace FFImageLoading.DataResolvers +{ + public class ResourceDataResolver : IDataResolver + { + private static readonly SemaphoreSlim _cacheLock = new SemaphoreSlim(1, 1); + private static Dictionary _cache = new Dictionary(128); + + public async virtual Task Resolve(string identifier, TaskParameter parameters, CancellationToken token) + { + StreamResourceInfo image = null; + await _cacheLock.WaitAsync(token).ConfigureAwait(false); + token.ThrowIfCancellationRequested(); + Uri imgUri=null; + try + { + string resPath = identifier.TrimStart('\\', '/'); + + if (!resPath.StartsWith(@"Assets\", StringComparison.OrdinalIgnoreCase) && !resPath.StartsWith("Assets/", StringComparison.OrdinalIgnoreCase)) + { + resPath = @"Assets\" + resPath; + } + + imgUri = new Uri($"pack://application:,,,/{resPath}"); + var key = imgUri.ToString(); + if (!_cache.TryGetValue(key, out image)) + { + image = Application.GetResourceStream(imgUri); + + //image = new BitmapImage(imgUri); + + if (_cache.Count >= 128) + _cache.Clear(); + + _cache[key] = image; + } + } + catch (Exception) + { + try + { + imgUri = new Uri($"pack://application:,,,/{identifier}"); + //imgUri = new Uri(identifier, UriKind.RelativeOrAbsolute); + var key = imgUri.ToString(); + if (!_cache.TryGetValue(key, out image)) + { + image = Application.GetResourceStream(imgUri); + + if (_cache.Count >= 128) + _cache.Clear(); + + _cache[key] = image; + } + } + catch (Exception) + { + } + } + finally + { + _cacheLock.Release(); + } + + if (image != null) + { + var imageInformation = new ImageInformation(); + imageInformation.SetPath(identifier); + imageInformation.SetFilePath(imgUri.ToString()); + + token.ThrowIfCancellationRequested(); + + var s = await image.Stream.AsRandomAccessStream(); + s.Seek(0, SeekOrigin.Begin); + return new DataResolverResult(s, LoadingResult.CompiledResource, imageInformation); + } + + throw new FileNotFoundException(identifier); + } + } +} diff --git a/source/FFImageLoading.Wpf/Decoders/BaseDecoder.cs b/source/FFImageLoading.Wpf/Decoders/BaseDecoder.cs new file mode 100644 index 000000000..dc64467a0 --- /dev/null +++ b/source/FFImageLoading.Wpf/Decoders/BaseDecoder.cs @@ -0,0 +1,39 @@ +using FFImageLoading.Config; +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using System; +using System.IO; +using System.Threading.Tasks; + +namespace FFImageLoading.Decoders +{ + public class BaseDecoder : IDecoder + { + public async Task> DecodeAsync(Stream imageData, string path, ImageSource source, ImageInformation imageInformation, TaskParameter parameters) + { + BitmapHolder imageIn = null; + + if (imageData == null) + throw new ArgumentNullException(nameof(imageData)); + + bool allowUpscale = parameters.AllowUpscale ?? Configuration.AllowUpscale; + + if (parameters.Transformations == null || parameters.Transformations.Count == 0) + { + var bitmap = await imageData.ToBitmapImageAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); + imageIn = new BitmapHolder(bitmap); + } + else + { + imageIn = await imageData.ToBitmapHolderAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); + } + + return new DecodedImage() { Image = imageIn }; + } + + public Configuration Configuration => ImageService.Instance.Config; + + public IMiniLogger Logger => ImageService.Instance.Config.Logger; + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/ColorExtensions.cs b/source/FFImageLoading.Wpf/Extensions/ColorExtensions.cs new file mode 100644 index 000000000..4453a4b06 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/ColorExtensions.cs @@ -0,0 +1,86 @@ +using FFImageLoading.Helpers; +using System; + +namespace FFImageLoading.Extensions +{ + public static class ColorExtensions + { + public const int SizeOfArgb = 4; + + //public static int ToInt(this ColorHolder color) + //{ + // var col = 0; + + // if (color.A != 0) + // { + // var a = color.A + 1; + // col = (color.A << 24) + // | ((byte)((color.R * a) >> 8) << 16) + // | ((byte)((color.G * a) >> 8) << 8) + // | ((byte)((color.B * a) >> 8)); + // } + + // return col; + //} + + public static ColorHolder ToColorFromHex(this string hexColor) + { + if (string.IsNullOrWhiteSpace(hexColor)) + throw new ArgumentException("Invalid color string.", nameof(hexColor)); + + if (!hexColor.StartsWith("#", StringComparison.Ordinal)) + hexColor.Insert(0, "#"); + + switch (hexColor.Length) + { + case 9: + { + var cuint = Convert.ToUInt32(hexColor.Substring(1), 16); + var a = (byte)(cuint >> 24); + var r = (byte)((cuint >> 16) & 0xff); + var g = (byte)((cuint >> 8) & 0xff); + var b = (byte)(cuint & 0xff); + + return new ColorHolder(a, r, g, b); + } + case 7: + { + var cuint = Convert.ToUInt32(hexColor.Substring(1), 16); + var r = (byte)((cuint >> 16) & 0xff); + var g = (byte)((cuint >> 8) & 0xff); + var b = (byte)(cuint & 0xff); + + return new ColorHolder(255, r, g, b); + } + case 5: + { + var cuint = Convert.ToUInt16(hexColor.Substring(1), 16); + var a = (byte)(cuint >> 12); + var r = (byte)((cuint >> 8) & 0xf); + var g = (byte)((cuint >> 4) & 0xf); + var b = (byte)(cuint & 0xf); + a = (byte)(a << 4 | a); + r = (byte)(r << 4 | r); + g = (byte)(g << 4 | g); + b = (byte)(b << 4 | b); + + return new ColorHolder(a, r, g, b); + } + case 4: + { + var cuint = Convert.ToUInt16(hexColor.Substring(1), 16); + var r = (byte)((cuint >> 8) & 0xf); + var g = (byte)((cuint >> 4) & 0xf); + var b = (byte)(cuint & 0xf); + r = (byte)(r << 4 | r); + g = (byte)(g << 4 | g); + b = (byte)(b << 4 | b); + + return new ColorHolder(255, r, g, b); + } + default: + throw new FormatException(string.Format("The {0} string is not a recognized HexColor format.", hexColor)); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/ImageExtensions.cs b/source/FFImageLoading.Wpf/Extensions/ImageExtensions.cs new file mode 100644 index 000000000..e7a9bb239 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/ImageExtensions.cs @@ -0,0 +1,173 @@ +using FFImageLoading.Work; +using System; +using System.IO; +using System.Threading.Tasks; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Extensions +{ + public static class ImageExtensions + { + public static async Task AsRandomAccessStream(this Stream from) + { + var ms = new MemoryStream(); + from.Seek(0, SeekOrigin.Begin); + await from.CopyToAsync(ms); + ms.Seek(0, SeekOrigin.Begin); + return ms; + } + public static async Task ToBitmapImageAsync(this BitmapHolder holder) + { + if (holder?.PixelData == null) + return null; + + WriteableBitmap writeableBitmap = null; + + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(async () => + { + writeableBitmap = await holder.ToWriteableBitmap(); + }); + + return writeableBitmap; + } + + private static Task ToWriteableBitmap(this BitmapHolder holder) + { + var wb = new WriteableBitmap( + holder.Width, + holder.Height, + 96, + 96, + PixelFormats.Bgra32, + null); + return Task.FromResult(wb.FromByteArray(holder.PixelData)); + + } + public static Task ToWriteableBitmap(this Stream holder) + { + try + { + holder.Seek(0, SeekOrigin.Begin); + return Task.FromResult(BitmapFactory.FromStream(holder)); + } + catch (Exception ex) + { + throw; + } + } + + public async static Task ToBitmapImageAsync(this Stream imageStream, Tuple downscale, bool downscaleDipUnits, InterpolationMode mode, bool allowUpscale, ImageInformation imageInformation = null) + { + if (imageStream == null) + return null; + + using (var image = await imageStream.AsRandomAccessStream()) + { + if (downscale != null && (downscale.Item1 > 0 || downscale.Item2 > 0)) + { + using (var downscaledImage = await image.ResizeImage(downscale.Item1, downscale.Item2, mode, downscaleDipUnits, allowUpscale, imageInformation).ConfigureAwait(false)) + { + downscaledImage.Seek(0, SeekOrigin.Begin); + WriteableBitmap resizedBitmap = null; + + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(async () => + { + resizedBitmap = await downscaledImage.ToWriteableBitmap(); + }); + + return resizedBitmap; + } + } + else + { + WriteableBitmap bitmap = null; + + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(async () => + { + bitmap = await imageStream.ToWriteableBitmap(); + if (imageInformation != null) + { + imageInformation.SetCurrentSize(bitmap.PixelWidth, bitmap.PixelHeight); + imageInformation.SetOriginalSize(bitmap.PixelWidth, bitmap.PixelHeight); + } + }); + + return bitmap; + } + } + } + + public async static Task ToBitmapHolderAsync(this Stream imageStream, Tuple downscale, bool downscaleDipUnits, InterpolationMode mode, bool allowUpscale, ImageInformation imageInformation = null) + { + if (imageStream == null) + return null; + + + Stream src; + using (var image = await imageStream.AsRandomAccessStream()) + { + if (downscale != null && (downscale.Item1 > 0 || downscale.Item2 > 0)) + { + var downscaledImage = await image.ResizeImage(downscale.Item1, downscale.Item2, mode, + downscaleDipUnits, allowUpscale, imageInformation).ConfigureAwait(false); + { + src = downscaledImage; + } + } + else + { + src = image; + } + src.Seek(0, SeekOrigin.Begin); + var wb = BitmapFactory.FromStream(src); + + + if (imageInformation != null) + { + imageInformation.SetCurrentSize(wb.PixelWidth, wb.PixelHeight); + imageInformation.SetOriginalSize(wb.PixelWidth, wb.PixelHeight); + } + + return new BitmapHolder(BitmapFactory.ConvertToPbgra32Format(wb).ToByteArray(), wb.PixelWidth, wb.PixelHeight); + } + } + + public static async Task ResizeImage(this MemoryStream imageStream, int width, int height, InterpolationMode interpolationMode, bool useDipUnits, bool allowUpscale, ImageInformation imageInformation = null) + { + if (useDipUnits) + { + width = width.DpToPixels(); + height = height.DpToPixels(); + } + + var wb = await imageStream.ToWriteableBitmap(); + var widthRatio = (double)width / wb.PixelWidth; + var heightRatio = (double)height / wb.PixelHeight; + var scaleRatio = Math.Min(widthRatio, heightRatio); + if (width == 0) + scaleRatio = heightRatio; + + if (height == 0) + scaleRatio = widthRatio; + + var bitmap = new TransformedBitmap(wb, new ScaleTransform(scaleRatio,scaleRatio)); + + var bmp = new MemoryStream(); + BitmapEncoder enc = new BmpBitmapEncoder(); + enc.Frames.Add(BitmapFrame.Create(bitmap)); + enc.Save(bmp); + + if (imageInformation != null) + { + var aspectHeight = (int)Math.Floor(wb.PixelHeight * scaleRatio); + var aspectWidth = (int)Math.Floor(wb.PixelWidth * scaleRatio); + + imageInformation.SetOriginalSize(wb.PixelWidth, wb.PixelHeight); + imageInformation.SetCurrentSize(aspectWidth, aspectHeight); + } + bmp.Seek(0,SeekOrigin.Begin); + return bmp; + } + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs b/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs new file mode 100644 index 000000000..b9629c458 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs @@ -0,0 +1,160 @@ +using System; +using System.Threading.Tasks; +using FFImageLoading.Work; +using System.IO; +using System.Windows.Controls; +using System.Windows.Media.Imaging; +using FFImageLoading.Targets; +using FFImageLoading.Extensions; +using ImageSource = FFImageLoading.Work.ImageSource; + +namespace FFImageLoading +{ + /// + /// TaskParameterPlatformExtensions + /// + public static class TaskParameterPlatformExtensions + { + /// + /// Loads the image into PNG Stream + /// + /// The PNG Stream async. + /// Parameters. + public static async Task AsPNGStreamAsync(this TaskParameter parameters) + { + var result = await AsWriteableBitmapAsync(parameters); + var stream = await result.AsPngStreamAsync(); + + return stream; + } + + /// + /// Loads the image into JPG Stream + /// + /// The JPG Stream async. + /// Parameters. + public static async Task AsJPGStreamAsync(this TaskParameter parameters, int quality = 80) + { + var result = await AsWriteableBitmapAsync(parameters); + var stream = await result.AsJpegStreamAsync(quality); + + return stream; + } + + /// + /// Loads and gets WriteableBitmap using defined parameters. + /// IMPORTANT: It throws image loading exceptions - you should handle them + /// + /// The WriteableBitmap. + /// Parameters. + public static Task AsWriteableBitmapAsync(this TaskParameter parameters) + { + var target = new BitmapTarget(); + var userErrorCallback = parameters.OnError; + var finishCallback = parameters.OnFinish; + var tcs = new TaskCompletionSource(); + + parameters + .Error(ex => + { + tcs.TrySetException(ex); + userErrorCallback?.Invoke(ex); + }) + .Finish(scheduledWork => + { + finishCallback?.Invoke(scheduledWork); + tcs.TrySetResult(target.BitmapSource as WriteableBitmap); + }); + + if (parameters.Source != Work.ImageSource.Stream && string.IsNullOrWhiteSpace(parameters.Path)) + { + target.SetAsEmpty(null); + parameters.TryDispose(); + return null; + } + + var task = ImageService.CreateTask(parameters, target); + ImageService.Instance.LoadImage(task); + + return tcs.Task; + } + + /// + /// Loads the image into given Image using defined parameters. + /// + /// Parameters for loading the image. + /// Image view that should receive the image. + public static IScheduledWork Into(this TaskParameter parameters, Image imageView) + { + var target = new ImageTarget(imageView); + return parameters.Into(target); + } + + /// + /// Loads the image into given Image using defined parameters. + /// IMPORTANT: It throws image loading exceptions - you should handle them + /// + /// An awaitable Task. + /// Parameters for loading the image. + /// Image view that should receive the image. + public static Task IntoAsync(this TaskParameter parameters, Image imageView) + { + return parameters.IntoAsync(param => param.Into(imageView)); + } + + /// + /// Loads the image into given target using defined parameters. + /// + /// The into. + /// Parameters. + /// Target. + /// The 1st type parameter. + public static IScheduledWork Into(this TaskParameter parameters, ITarget target) where TImageView : class + { + if (parameters.Source != ImageSource.Stream && string.IsNullOrWhiteSpace(parameters.Path)) + { + target.SetAsEmpty(null); + parameters.TryDispose(); + return null; + } + + var task = ImageService.CreateTask(parameters, target); + ImageService.Instance.LoadImage(task); + return task; + } + + /// + /// Loads the image into given target using defined parameters. + /// IMPORTANT: It throws image loading exceptions - you should handle them + /// + /// The async. + /// Parameters. + /// Target. + /// The 1st type parameter. + public static Task IntoAsync(this TaskParameter parameters, ITarget target) where TImageView : class + { + return parameters.IntoAsync(param => param.Into(target)); + } + + private static Task IntoAsync(this TaskParameter parameters, Action into) + { + var userErrorCallback = parameters.OnError; + var finishCallback = parameters.OnFinish; + var tcs = new TaskCompletionSource(); + + parameters + .Error(ex => { + tcs.TrySetException(ex); + userErrorCallback?.Invoke(ex); + }) + .Finish(scheduledWork => { + finishCallback?.Invoke(scheduledWork); + tcs.TrySetResult(scheduledWork); + }); + + into(parameters); + + return tcs.Task; + } + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/UnitsExtensions.cs b/source/FFImageLoading.Wpf/Extensions/UnitsExtensions.cs new file mode 100644 index 000000000..ed3b8b447 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/UnitsExtensions.cs @@ -0,0 +1,15 @@ +using System; + +namespace FFImageLoading.Extensions +{ + public static class UnitsExtensions + { + public static int DpToPixels(this int dp) => ImageService.Instance.DpToPixels(dp); + + public static int DpToPixels(this double dp) => ImageService.Instance.DpToPixels(dp); + + public static double PixelsToDp(this int px) => ImageService.Instance.PixelsToDp(px); + + public static double PixelsToDp(this double px) => ImageService.Instance.PixelsToDp(px); + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/WriteableBitmapExtensions.cs b/source/FFImageLoading.Wpf/Extensions/WriteableBitmapExtensions.cs new file mode 100644 index 000000000..548333585 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/WriteableBitmapExtensions.cs @@ -0,0 +1,47 @@ +using System; +using System.IO; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Threading.Tasks; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Extensions +{ + public static class WriteableBitmapExtensions + { + public static async Task AsPngStreamAsync(this WriteableBitmap bitmap) + { + Stream bmp = new MemoryStream(); + + BitmapEncoder enc = new PngBitmapEncoder(); + enc.Frames.Add(BitmapFrame.Create(bitmap)); + enc.Save(bmp); + + return bmp; + //using (var stream = bitmap.PixelBuffer.AsStream()) + //{ + // pixels = new byte[(uint)stream.Length]; + // await stream.ReadAsync(pixels, 0, pixels.Length); + //} + + //var raStream = new InMemoryRandomAccessStream(); + //// Encode pixels into stream + //var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, raStream); + //encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, 96, pixels); + //await encoder.FlushAsync(); + + //return raStream.AsStreamForRead(); + } + + public static async Task AsJpegStreamAsync(this WriteableBitmap bitmap, int quality = 90) + { + Stream bmp = new MemoryStream(); + + var enc = new JpegBitmapEncoder(); + enc.QualityLevel = quality; + enc.Frames.Add(BitmapFrame.Create(bitmap)); + enc.Save(bmp); + + return bmp; + } + } +} diff --git a/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj b/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj new file mode 100644 index 000000000..0fbf8c22a --- /dev/null +++ b/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj @@ -0,0 +1,89 @@ + + + + + Debug + AnyCPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E} + Library + Properties + FFImageLoading + FFImageLoading.Platform + v4.7.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + Latest + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + Latest + + + + + + + + + + + + + + + + + + Extensions\TaskParameterExtensions.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.6.2 + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Wpf/Helpers/ColorHolder.cs b/source/FFImageLoading.Wpf/Helpers/ColorHolder.cs new file mode 100644 index 000000000..8ac36432f --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/ColorHolder.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFImageLoading +{ + public struct ColorHolder + { + public ColorHolder(int a, int r, int g, int b) + { + A = Convert.ToByte(Math.Min(Math.Max(0, a), 255)); + + if (a > 0) + { + R = Convert.ToByte(Math.Min(Math.Max(0, r), 255)); + G = Convert.ToByte(Math.Min(Math.Max(0, g), 255)); + B = Convert.ToByte(Math.Min(Math.Max(0, b), 255)); + } + else + { + R = 0; + G = 0; + B = 0; + } + } + + public ColorHolder(int r, int g, int b) + { + A = 255; + R = Convert.ToByte(Math.Min(Math.Max(0, r), 255)); + G = Convert.ToByte(Math.Min(Math.Max(0, g), 255)); + B = Convert.ToByte(Math.Min(Math.Max(0, b), 255)); + } + + public readonly byte A; + + public readonly byte R; + + public readonly byte G; + + public readonly byte B; + + public static readonly ColorHolder Transparent = new ColorHolder(0, 0, 0, 0); + } +} diff --git a/source/FFImageLoading.Wpf/Helpers/MD5Helper.cs b/source/FFImageLoading.Wpf/Helpers/MD5Helper.cs new file mode 100644 index 000000000..356e9161c --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/MD5Helper.cs @@ -0,0 +1,50 @@ +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace FFImageLoading.Helpers +{ + public class MD5Helper : IMD5Helper + { + public string MD5(Stream input) + { + using (var hashProvider = new MD5CryptoServiceProvider()) + { + var bytes = hashProvider.ComputeHash(input); + return BitConverter.ToString(bytes)?.ToSanitizedKey(); + } + } + + public string MD5(string input) + { + using (var hashProvider = new MD5CryptoServiceProvider()) + { + var bytes = hashProvider.ComputeHash(Encoding.UTF8.GetBytes(input)); + return BitConverter.ToString(bytes)?.ToSanitizedKey(); + } + + } + //public static byte[] StreamToByteArray(Stream stream) + //{ + // if (stream is MemoryStream) + // { + // return ((MemoryStream)stream).ToArray(); + // } + // else + // { + // return ReadFully(stream); + // } + //} + + //public static byte[] ReadFully(Stream input) + //{ + // using (MemoryStream ms = new MemoryStream()) + // { + // input.CopyTo(ms); + // return ms.ToArray(); + // } + //} + } +} + diff --git a/source/FFImageLoading.Wpf/Helpers/MainThreadDispatcher.cs b/source/FFImageLoading.Wpf/Helpers/MainThreadDispatcher.cs new file mode 100644 index 000000000..226c05c48 --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/MainThreadDispatcher.cs @@ -0,0 +1,87 @@ +using System; +using System.Threading.Tasks; +using System.Windows.Threading; + +namespace FFImageLoading.Helpers +{ + public class MainThreadDispatcher : IMainThreadDispatcher + { + private Dispatcher _dispatcher; + + public async void Post(Action action) + { + if (action == null) + return; + + if(_dispatcher == null) + { + _dispatcher = System.Windows.Application.Current.Dispatcher; + } + + // already in UI thread: + if (_dispatcher.CheckAccess()) + { + action(); + } + // not in UI thread, ensuring UI thread: + else + { + //var tcs = new TaskCompletionSource(); + //Post(() => + //{ + // try + // { + // action?.Invoke(); + // tcs.SetResult(true); + // } + // catch (Exception ex) + // { + // tcs.SetException(ex); + // } + //}); + + //await tcs.Task; + await _dispatcher.InvokeAsync(() => action()); + //await CoreApplication.GetCurrentView().Dispatcher.RunAsync(CoreDispatcherPriority.Low, () => action()); + } + } + + public Task PostAsync(Action action) + { + var tcs = new TaskCompletionSource(); + Post(() => + { + try + { + action?.Invoke(); + tcs.SetResult(true); + } + catch (Exception ex) + { + tcs.SetException(ex); + } + }); + + return tcs.Task; + } + + public Task PostAsync(Func action) + { + var tcs = new TaskCompletionSource(); + Post(async () => + { + try + { + await action?.Invoke(); + tcs.SetResult(true); + } + catch (Exception ex) + { + tcs.SetException(ex); + } + }); + + return tcs.Task; + } + } +} diff --git a/source/FFImageLoading.Wpf/Helpers/MiniLogger.cs b/source/FFImageLoading.Wpf/Helpers/MiniLogger.cs new file mode 100644 index 000000000..94d25efe3 --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/MiniLogger.cs @@ -0,0 +1,30 @@ +using System; +using System.Diagnostics; + +namespace FFImageLoading.Helpers +{ + internal class MiniLogger : IMiniLogger + { + public void Debug(string message) + { + DebugInternal(message); + } + + public void Error(string errorMessage) + { + System.Diagnostics.Debug.WriteLine(errorMessage); + } + + public void Error(string errorMessage, Exception ex) + { + System.Diagnostics.Debug.WriteLine(errorMessage + Environment.NewLine + ex.ToString()); + } + + [Conditional("DEBUG")] + private void DebugInternal(string message) + { + System.Diagnostics.Debug.WriteLine(message); + } + } +} + diff --git a/source/FFImageLoading.Wpf/Helpers/PlatformPerformance.cs b/source/FFImageLoading.Wpf/Helpers/PlatformPerformance.cs new file mode 100644 index 000000000..9e57392be --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/PlatformPerformance.cs @@ -0,0 +1,27 @@ +using System; + +namespace FFImageLoading +{ + public class PlatformPerformance : IPlatformPerformance + { + public PlatformPerformance() + { + } + + public int GetCurrentManagedThreadId() + { + return 0; + } + + public int GetCurrentSystemThreadId() + { + return 0; + } + + public string GetMemoryInfo() + { + return "[PERFORMANCE] Memory - not implemented"; + } + } +} + diff --git a/source/FFImageLoading.Wpf/Helpers/ScaleHelper.cs b/source/FFImageLoading.Wpf/Helpers/ScaleHelper.cs new file mode 100644 index 000000000..1ad83e647 --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/ScaleHelper.cs @@ -0,0 +1,50 @@ +using System; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; + +namespace FFImageLoading.Helpers +{ + public static class ScaleHelper + { + static double? _scale; + public static double Scale + { + get + { + if (!_scale.HasValue) + { + InitAsync().ConfigureAwait(false).GetAwaiter().GetResult(); + } + + return _scale.Value; + } + } + + public static async Task InitAsync() + { + if (_scale.HasValue) + return; + + var dispatcher = ImageService.Instance.Config.MainThreadDispatcher; + + await dispatcher.PostAsync(() => + { + //var displayInfo = DisplayInformation.GetForCurrentView(); + object found = null; + + //todo + //try + //{ + // found = displayInfo.GetType().GetRuntimeProperty("RawPixelsPerViewPixel")?.GetValue(displayInfo); + //} + //catch (Exception) + //{ + //} + + _scale = found == null ? 1d : (double)found; + }).ConfigureAwait(false); + } + } +} + diff --git a/source/FFImageLoading.Wpf/ImageService.cs b/source/FFImageLoading.Wpf/ImageService.cs new file mode 100644 index 000000000..39725f50d --- /dev/null +++ b/source/FFImageLoading.Wpf/ImageService.cs @@ -0,0 +1,147 @@ +using System; +using System.IO; +using FFImageLoading.Config; +using FFImageLoading.Cache; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using FFImageLoading.DataResolvers; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Windows.Controls; +using System.Windows.Media.Imaging; + +namespace FFImageLoading +{ + /// + /// FFImageLoading by Daniel Luberda + /// + //[Preserve(AllMembers = true)] + public class ImageService : ImageServiceBase + { + static ConditionalWeakTable _viewsReferences = new ConditionalWeakTable(); + static IImageService _instance; + + /// + /// FFImageLoading instance. + /// + /// The instance. + public static IImageService Instance + { + get + { + if (_instance == null) + _instance = new ImageService(); + + return _instance; + } + } + + /// + /// Set this to use FFImageLoading in a unit test environment. + /// Instead throwing DoNotReference exception - use Mock implementation + /// + public static bool EnableMockImageService { get; set; } + + protected override void PlatformSpecificConfiguration(Config.Configuration configuration) + { + base.PlatformSpecificConfiguration(configuration); + + configuration.ClearMemoryCacheOnOutOfMemory = false; + configuration.ExecuteCallbacksOnUIThread = true; + } + + protected override IMemoryCache MemoryCache => ImageCache.Instance; + protected override IMD5Helper CreatePlatformMD5HelperInstance(Configuration configuration) => new MD5Helper(); + protected override IMiniLogger CreatePlatformLoggerInstance(Configuration configuration) => new MiniLogger(); + protected override IPlatformPerformance CreatePlatformPerformanceInstance(Configuration configuration) => new PlatformPerformance(); + protected override IMainThreadDispatcher CreateMainThreadDispatcherInstance(Configuration configuration) => new MainThreadDispatcher(); + protected override IDataResolverFactory CreateDataResolverFactoryInstance(Configuration configuration) => new DataResolverFactory(); + + protected override IDiskCache CreatePlatformDiskCacheInstance(Configuration configuration) + { + if (string.IsNullOrWhiteSpace(configuration.DiskCachePath)) + { + var data = Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData); + //todo include app name + var cachePath = Path.Combine(data, "FFSimpleDiskCache"); + + configuration.DiskCachePath = cachePath; + } + + if (!Directory.Exists(configuration.DiskCachePath)) + { + Directory.CreateDirectory(configuration.DiskCachePath); + } + + return new SimpleDiskCache(configuration.DiskCachePath, configuration); + } + + internal static IImageLoaderTask CreateTask(TaskParameter parameters, ITarget target) where TImageView : class + { + return new PlatformImageLoaderTask(target, parameters, Instance); + } + + internal static IImageLoaderTask CreateTask(TaskParameter parameters) + { + return new PlatformImageLoaderTask(null, parameters, Instance); + } + + protected override void SetTaskForTarget(IImageLoaderTask currentTask) + { + var targetView = currentTask?.Target?.TargetControl; + + if (!(targetView is Image)) + return; + + lock (_viewsReferences) + { + if (_viewsReferences.TryGetValue(targetView, out var existingTask)) + { + try + { + if (existingTask != null && !existingTask.IsCancelled && !existingTask.IsCompleted) + { + existingTask.Cancel(); + } + } + catch (ObjectDisposedException) { } + + _viewsReferences.Remove(targetView); + } + + _viewsReferences.Add(targetView, currentTask); + } + } + + public override void CancelWorkForView(object view) + { + lock (_viewsReferences) + { + if (_viewsReferences.TryGetValue(view, out var existingTask)) + { + try + { + if (existingTask != null && !existingTask.IsCancelled && !existingTask.IsCompleted) + { + existingTask.Cancel(); + } + } + catch (ObjectDisposedException) { } + } + } + } + + public override int DpToPixels(double dp) + { + return (int)Math.Floor(dp * ScaleHelper.Scale); + } + + public override double PixelsToDp(double px) + { + if (Math.Abs(px) < double.Epsilon) + return 0d; + + return Math.Floor(px / ScaleHelper.Scale); + } + } +} diff --git a/source/FFImageLoading.Wpf/Properties/AssemblyInfo.cs b/source/FFImageLoading.Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..56a5a497f --- /dev/null +++ b/source/FFImageLoading.Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FFImageLoading.Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FFImageLoading.Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("dc06c582-6c7e-4018-a752-feb528c65f7e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/FFImageLoading.Wpf/Targets/BitmapTarget.cs b/source/FFImageLoading.Wpf/Targets/BitmapTarget.cs new file mode 100644 index 000000000..6f8a7c1d1 --- /dev/null +++ b/source/FFImageLoading.Wpf/Targets/BitmapTarget.cs @@ -0,0 +1,35 @@ +using System; +using System.Windows.Media.Imaging; +using FFImageLoading.Work; + +namespace FFImageLoading.Targets +{ + public class BitmapTarget: Target + { + private WeakReference _imageWeakReference = null; + + public override void Set(IImageLoaderTask task, BitmapSource image, bool animated) + { + if (task == null || task.IsCancelled) + return; + + if (_imageWeakReference == null) + _imageWeakReference = new WeakReference(image); + else + _imageWeakReference.SetTarget(image); + } + + public BitmapSource BitmapSource + { + get + { + if (_imageWeakReference == null) + return null; + + BitmapSource image = null; + _imageWeakReference.TryGetTarget(out image); + return image; + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Targets/ImageTarget.cs b/source/FFImageLoading.Wpf/Targets/ImageTarget.cs new file mode 100644 index 000000000..f621a9e51 --- /dev/null +++ b/source/FFImageLoading.Wpf/Targets/ImageTarget.cs @@ -0,0 +1,105 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media.Animation; +using System.Windows.Media.Imaging; +using FFImageLoading.Work; + +namespace FFImageLoading.Targets +{ + public class ImageTarget : Target + { + private readonly WeakReference _controlWeakReference; + + public ImageTarget(Image control) + { + _controlWeakReference = new WeakReference(control); + } + + public override bool IsValid + { + get + { + return Control != null; + } + } + + public override void SetAsEmpty(IImageLoaderTask task) + { + var control = Control; + if (control == null) + return; + + control.Source = null; + } + + public override void Set(IImageLoaderTask task, BitmapSource image, bool animated) + { + if (task.IsCancelled) + return; + + var control = Control; + if (control == null || control.Source == image) + return; + + var parameters = task.Parameters; + + if (animated) + { + // fade animation + int fadeDuration = parameters.FadeAnimationDuration.HasValue ? + parameters.FadeAnimationDuration.Value : ImageService.Instance.Config.FadeAnimationDuration; + DoubleAnimation fade = new DoubleAnimation(); + fade.Duration = TimeSpan.FromMilliseconds(fadeDuration); + fade.From = 0f; + fade.To = 1f; + fade.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseInOut }; + + Storyboard fadeInStoryboard = new Storyboard(); + Storyboard.SetTargetProperty(fade, new PropertyPath("Opacity")); + Storyboard.SetTarget(fade, control); + fadeInStoryboard.Children.Add(fade); + fadeInStoryboard.Begin(); + control.Source = image; + if (IsLayoutNeeded(task)) + control.UpdateLayout(); + } + else + { + control.Source = image; + if (IsLayoutNeeded(task)) + control.UpdateLayout(); + } + } + + bool IsLayoutNeeded(IImageLoaderTask task) + { + if (task.Parameters.InvalidateLayoutEnabled.HasValue) + { + if (!task.Parameters.InvalidateLayoutEnabled.Value) + return false; + } + else if (!task.Configuration.InvalidateLayout) + { + return false; + } + + return true; + } + + public override Image Control + { + get + { + Image control; + if (!_controlWeakReference.TryGetTarget(out control)) + return null; + + if (control == null) + return null; + + return control; + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Transformations/TransformationBase.cs b/source/FFImageLoading.Wpf/Transformations/TransformationBase.cs new file mode 100644 index 000000000..6560046e2 --- /dev/null +++ b/source/FFImageLoading.Wpf/Transformations/TransformationBase.cs @@ -0,0 +1,21 @@ +using System; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public abstract class TransformationBase : ITransformation + { + public abstract string Key { get; } + + public IBitmap Transform(IBitmap bitmapHolder, string path, ImageSource source, bool isPlaceholder, string key) + { + var nativeHolder = bitmapHolder.ToNative(); + return Transform(nativeHolder, path, source, isPlaceholder, key); + } + + protected virtual BitmapHolder Transform(BitmapHolder bitmapHolder, string path, ImageSource source, bool isPlaceholder, string key) + { + return bitmapHolder; + } + } +} diff --git a/source/FFImageLoading.Wpf/Work/BitmapHolder.cs b/source/FFImageLoading.Wpf/Work/BitmapHolder.cs new file mode 100644 index 000000000..feb07867d --- /dev/null +++ b/source/FFImageLoading.Wpf/Work/BitmapHolder.cs @@ -0,0 +1,87 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using System; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Work +{ + public class BitmapHolder : IBitmap + { + public BitmapHolder(WriteableBitmap bitmap) + { + WriteableBitmap = bitmap; + } + + public BitmapHolder(byte[] pixels, int width, int height) + { + PixelData = pixels; + Width = width; + Height = height; + } + + public bool HasWriteableBitmap => WriteableBitmap != null; + + public WriteableBitmap WriteableBitmap { get; private set; } + + public int Height { get; private set; } + + public int Width { get; private set; } + + public byte[] PixelData { get; private set; } + + public int PixelCount { get { return (int)(PixelData.Length / 4); } } + + public void SetPixel(int x, int y, ColorHolder color) + { + int pixelPos = (y * Width + x); + SetPixel(pixelPos, color); + } + + public void SetPixel(int pos, ColorHolder color) + { + try + { + int bytePos = pos * 4; + PixelData[bytePos] = color.B; + PixelData[bytePos + 1] = color.G; + PixelData[bytePos + 2] = color.R; + PixelData[bytePos + 3] = color.A; + } + catch (Exception ex) + { + throw; + } + } + + public ColorHolder GetPixel(int pos) + { + int bytePos = pos * 4; + var b = PixelData[bytePos]; + var g = PixelData[bytePos + 1]; + var r = PixelData[bytePos + 2]; + var a = PixelData[bytePos + 3]; + + return new ColorHolder(a, r, g, b); + } + + public ColorHolder GetPixel(int x, int y) + { + int pixelPos = (y * Width + x); + return GetPixel(pixelPos); + } + + public void FreePixels() + { + PixelData = null; + WriteableBitmap = null; + } + } + + public static class IBitmapExtensions + { + public static BitmapHolder ToNative(this IBitmap bitmap) + { + return (BitmapHolder)bitmap; + } + } +} diff --git a/source/FFImageLoading.Wpf/Work/PlatformImageLoaderTask.cs b/source/FFImageLoading.Wpf/Work/PlatformImageLoaderTask.cs new file mode 100644 index 000000000..244d08220 --- /dev/null +++ b/source/FFImageLoading.Wpf/Work/PlatformImageLoaderTask.cs @@ -0,0 +1,122 @@ +using FFImageLoading.Cache; +using FFImageLoading.Config; +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using System; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using FFImageLoading.Decoders; +using System.Collections.Generic; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Work +{ + public class PlatformImageLoaderTask : ImageLoaderTask where TImageView : class + { + static readonly SemaphoreSlim _decodingLock = new SemaphoreSlim(1, 1); + + public PlatformImageLoaderTask(ITarget target, TaskParameter parameters, IImageService imageService) : base(ImageCache.Instance, target, parameters, imageService) + { + } + + public async override Task Init() + { + await ScaleHelper.InitAsync(); + await base.Init(); + } + + protected override Task SetTargetAsync(BitmapSource image, bool animated) + { + if (Target == null) + return Task.FromResult(true); + + return MainThreadDispatcher.PostAsync(() => + { + ThrowIfCancellationRequested(); + PlatformTarget.Set(this, image, animated); + }); + } + + protected override int DpiToPixels(int size) + { + return size.DpToPixels(); + } + + protected override IDecoder ResolveDecoder(ImageInformation.ImageType type) + { + switch (type) + { + case ImageInformation.ImageType.WEBP: + throw new NotImplementedException(); + default: + return new BaseDecoder(); + } + } + + protected override async Task TransformAsync(BitmapHolder bitmap, IList transformations, string path, ImageSource source, bool isPlaceholder) + { + await _decodingLock.WaitAsync(CancellationTokenSource.Token).ConfigureAwait(false); // Applying transformations is both CPU and memory intensive + ThrowIfCancellationRequested(); + + try + { + foreach (var transformation in transformations) + { + ThrowIfCancellationRequested(); + + var old = bitmap; + + try + { + IBitmap bitmapHolder = transformation.Transform(bitmap, path, source, isPlaceholder, Key); + bitmap = bitmapHolder.ToNative(); + } + catch (Exception ex) + { + Logger.Error(string.Format("Transformation failed: {0}", transformation.Key), ex); + throw; + } + finally + { + if (old != null && old != bitmap && old.PixelData != bitmap.PixelData) + { + old.FreePixels(); + old = null; + } + } + } + } + finally + { + _decodingLock.Release(); + } + + return bitmap; + } + + protected override async Task GenerateImageFromDecoderContainerAsync(IDecodedImage decoded, ImageInformation imageInformation, bool isPlaceholder) + { + if (decoded.IsAnimated) + { + throw new NotImplementedException(); + } + else + { + try + { + if (decoded.Image.HasWriteableBitmap) + return decoded.Image.WriteableBitmap; + + return await decoded.Image.ToBitmapImageAsync(); + } + finally + { + decoded.Image.FreePixels(); + decoded.Image = null; + } + } + } + } +} diff --git a/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj b/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj index 74a333e71..aaac32136 100644 --- a/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj +++ b/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj @@ -1,28 +1,27 @@ - - - - netcoreapp2.0 - false - 2.0.3 - - - - - - - - - - - - - - - - - - - - - - + + + + netcoreapp3.0 + false + + + + + + + + + + + + + + + + + + + + + +