From 486317a7d5a7be505700ab2a17fd91807b1ffd94 Mon Sep 17 00:00:00 2001 From: Matthew Leibowitz <mattleibow@live.com> Date: Wed, 13 Apr 2022 10:28:03 +0200 Subject: [PATCH] Update MAUI to RC 1 and use a macOS Monterey pool (#1986) --- nuget/SkiaSharp.Views.WinUI.nuspec | 7 ++++++ .../Basic/Maui/SkiaSharpSample/MauiProgram.cs | 1 + .../Platforms/Windows/App.xaml.cs | 7 ------ .../SkiaSharpSample/SkiaSharpSample.csproj | 14 ++--------- scripts/azure-pipelines-variables.yml | 6 ++--- scripts/azure-pipelines.yml | 25 +++++++++++++++++-- scripts/azure-templates-build.yml | 3 ++- scripts/azure-templates-variables.yml | 18 +++++++------ scripts/install-vs.ps1 | 15 +++++++---- scripts/provisionator.csx | 1 + source/SkiaSharp.Build.targets | 2 +- .../SKCanvasViewRendererBase.cs | 6 ++--- .../SKGLViewRendererBase.cs | 4 +-- .../SKImageSource.cs | 2 ++ .../AppHostBuilderExtensions.cs | 8 +++--- .../SKCanvasViewHandler.Android.cs | 2 +- .../SKCanvasViewHandler.Windows.cs | 2 +- .../SKCanvasView/SKCanvasViewHandler.iOS.cs | 2 +- .../SKImageSourceService.Android.cs | 24 +++++++++++++++++- .../SkiaSharp.Views.WinUI.csproj | 2 +- .../SkiaSharp.Views.UWP/UWPExtensions.cs | 2 +- 21 files changed, 99 insertions(+), 54 deletions(-) create mode 100644 scripts/provisionator.csx diff --git a/nuget/SkiaSharp.Views.WinUI.nuspec b/nuget/SkiaSharp.Views.WinUI.nuspec index 1c481ae1ac..84c3654d95 100644 --- a/nuget/SkiaSharp.Views.WinUI.nuspec +++ b/nuget/SkiaSharp.Views.WinUI.nuspec @@ -31,6 +31,10 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release <dependency id="SkiaSharp" version="1.0.0" /> <dependency id="Microsoft.WindowsAppSDK" version="1.0.0" /> </group> + <group targetFramework="net6.0-windows10.0.18362"> + <dependency id="SkiaSharp" version="1.0.0" /> + <dependency id="Microsoft.WindowsAppSDK" version="1.0.0" /> + </group> </dependencies> </metadata> @@ -40,6 +44,9 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release <file platform="windows" src="lib/net5.0-windows10.0.18362/SkiaSharp.Views.Windows.dll" /> <file platform="windows" src="lib/net5.0-windows10.0.18362/SkiaSharp.Views.Windows.pdb" /> <file platform="windows" src="lib/net5.0-windows10.0.18362/SkiaSharp.Views.Windows.xml" /> + <file platform="windows" src="lib/net6.0-windows10.0.18362/SkiaSharp.Views.Windows.dll" /> + <file platform="windows" src="lib/net6.0-windows10.0.18362/SkiaSharp.Views.Windows.pdb" /> + <file platform="windows" src="lib/net6.0-windows10.0.18362/SkiaSharp.Views.Windows.xml" /> <!-- legal --> <file src="LICENSE.txt" /> diff --git a/samples/Basic/Maui/SkiaSharpSample/MauiProgram.cs b/samples/Basic/Maui/SkiaSharpSample/MauiProgram.cs index a57d7612ae..b83ef70d37 100644 --- a/samples/Basic/Maui/SkiaSharpSample/MauiProgram.cs +++ b/samples/Basic/Maui/SkiaSharpSample/MauiProgram.cs @@ -2,6 +2,7 @@ using Microsoft.Maui.Hosting; using Microsoft.Maui.Controls.Hosting; using SkiaSharp.Views.Maui.Controls.Hosting; +using Microsoft.Maui.Controls.Compatibility.Hosting; namespace SkiaSharpSample { diff --git a/samples/Basic/Maui/SkiaSharpSample/Platforms/Windows/App.xaml.cs b/samples/Basic/Maui/SkiaSharpSample/Platforms/Windows/App.xaml.cs index 616eb04f66..20098026ce 100644 --- a/samples/Basic/Maui/SkiaSharpSample/Platforms/Windows/App.xaml.cs +++ b/samples/Basic/Maui/SkiaSharpSample/Platforms/Windows/App.xaml.cs @@ -12,12 +12,5 @@ public App() } protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); - - protected override void OnLaunched(LaunchActivatedEventArgs args) - { - base.OnLaunched(args); - - Microsoft.Maui.Essentials.Platform.OnLaunched(args); - } } } diff --git a/samples/Basic/Maui/SkiaSharpSample/SkiaSharpSample.csproj b/samples/Basic/Maui/SkiaSharpSample/SkiaSharpSample.csproj index 9d84a75d7a..eb95a62a69 100644 --- a/samples/Basic/Maui/SkiaSharpSample/SkiaSharpSample.csproj +++ b/samples/Basic/Maui/SkiaSharpSample/SkiaSharpSample.csproj @@ -2,7 +2,7 @@ <PropertyGroup> <TargetFrameworks>net6.0-ios;net6.0-maccatalyst;net6.0-android</TargetFrameworks> - <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows')) and '$(MSBuildRuntimeType)' == 'Full'">$(TargetFrameworks);net6.0-windows10.0.19041</TargetFrameworks> + <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows')) and '$(MSBuildRuntimeType)' == 'Full'">$(TargetFrameworks);net6.0-windows10.0.19041.0</TargetFrameworks> <OutputType>Exe</OutputType> <UseMaui>true</UseMaui> <SingleProject>true</SingleProject> @@ -18,7 +18,7 @@ <SupportedOSPlatformVersion Condition="'$(TargetFramework)' == 'net6.0-ios'">14.2</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="'$(TargetFramework)' == 'net6.0-maccatalyst'">14.0</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="'$(TargetFramework)' == 'net6.0-android'">21.0</SupportedOSPlatformVersion> - <SupportedOSPlatformVersion Condition="$(TargetFramework.Contains('-windows'))">10.0.18362.0</SupportedOSPlatformVersion> + <SupportedOSPlatformVersion Condition="$(TargetFramework.Contains('-windows'))">10.0.17763.0</SupportedOSPlatformVersion> </PropertyGroup> <ItemGroup> @@ -37,11 +37,6 @@ <ProjectReference Include="..\..\..\..\source\SkiaSharp.Views.Maui\SkiaSharp.Views.Maui.Controls\SkiaSharp.Views.Maui.Controls.csproj" /> </ItemGroup> - <ItemGroup Condition="$(TargetFramework.Contains('-windows'))"> - <PackageReference Include="Microsoft.WindowsAppSDK" Version="1.0.0" /> - <PackageReference Include="Microsoft.Graphics.Win2D" Version="1.0.0.30" /> - </ItemGroup> - <ItemGroup Condition="$(TargetFramework.Contains('-windows'))"> <None Include="..\..\..\..\output\native\windows\x64\libSkiaSharp.dll" Condition="Exists('..\..\..\..\output\native\windows\x64\libSkiaSharp.dll')"> <Link>libSkiaSharp.dll</Link> @@ -49,11 +44,6 @@ </None> </ItemGroup> - <PropertyGroup Condition="$(TargetFramework.Contains('-windows'))"> - <OutputType>WinExe</OutputType> - <RuntimeIdentifier>win10-x64</RuntimeIdentifier> - </PropertyGroup> - <Import Project="..\..\..\..\output\SkiaSharp\nuget\build\$(TargetFramework)\SkiaSharp.Local.targets" Condition="Exists('..\..\..\..\output\SkiaSharp\nuget\build\$(TargetFramework)\SkiaSharp.Local.targets')" /> </Project> diff --git a/scripts/azure-pipelines-variables.yml b/scripts/azure-pipelines-variables.yml index d48255ff44..6901f76779 100644 --- a/scripts/azure-pipelines-variables.yml +++ b/scripts/azure-pipelines-variables.yml @@ -13,9 +13,9 @@ variables: MONO_VERSION_MACOS: '6_12_13' MONO_VERSION_LINUX: '' XCODE_VERSION: 13.2.1 - VISUAL_STUDIO_VERSION: '' - DOTNET_VERSION_PREVIEW: '6.0.200-rtm.22107.3' - DOTNET_WORKLOAD_SOURCE: 'https://aka.ms/dotnet/maui/6.0.200/preview.14.json' + VISUAL_STUDIO_VERSION: '17/pre' + DOTNET_VERSION_PREVIEW: '6.0.300-preview.22179.2' + DOTNET_WORKLOAD_SOURCE: 'https://aka.ms/dotnet/maui/6.0.300/rc.1.json' CONFIGURATION: 'Release' DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true THROW_ON_TEST_FAILURE: true diff --git a/scripts/azure-pipelines.yml b/scripts/azure-pipelines.yml index 3588da0dc6..e8c4cbe86e 100644 --- a/scripts/azure-pipelines.yml +++ b/scripts/azure-pipelines.yml @@ -19,12 +19,33 @@ parameters: pool: name: Azure Pipelines vmImage: windows-2022 - - name: VM_IMAGE_MAC + - name: VM_IMAGE_MAC_NATIVE type: object default: pool: name: Azure Pipelines vmImage: macos-11 + - name: VM_IMAGE_MAC + type: object + default: + pool: + name: VSEng-VSMac-Xamarin-Shared + vmImage: VSEng-VSMac-Xamarin-Shared + demands: + - macOS.Name -equals Monterey + - macOS.Architecture -equals x64 + - Agent.HasDevices -equals False + - Agent.IsPaired -equals False + variables: + XCODE_VERSION: 13.3.0 + provisioningSteps: + - task: xamops.azdevex.provisionator-task.provisionator@1 + displayName: 'Provision Xamarin' + inputs: + provisioning_script: ./scripts/provisionator.csx + provisioning_extra_args: --force + env: + AUTH_TOKEN_GITHUB_COM: $(github--pat--vs-mobiletools-engineering-service2) - name: VM_IMAGE_LINUX type: object default: @@ -51,6 +72,6 @@ stages: VM_IMAGE_WINDOWS: ${{ parameters.VM_IMAGE_WINDOWS }} VM_IMAGE_WINDOWS_NATIVE: ${{ parameters.VM_IMAGE_WINDOWS }} VM_IMAGE_MAC: ${{ parameters.VM_IMAGE_MAC }} - VM_IMAGE_MAC_NATIVE: ${{ parameters.VM_IMAGE_MAC }} + VM_IMAGE_MAC_NATIVE: ${{ parameters.VM_IMAGE_MAC_NATIVE }} VM_IMAGE_LINUX: ${{ parameters.VM_IMAGE_LINUX }} VM_IMAGE_LINUX_NATIVE: ${{ parameters.VM_IMAGE_LINUX }} diff --git a/scripts/azure-templates-build.yml b/scripts/azure-templates-build.yml index 966cf85b61..e949d7bd68 100644 --- a/scripts/azure-templates-build.yml +++ b/scripts/azure-templates-build.yml @@ -145,9 +145,10 @@ jobs: displayName: Display all the .NET information # install VS - ${{ if endsWith(parameters.name, '_windows') }}: - - ${{ if and(eq(parameters.installPreviewVs, 'true'), ne(variables.VISUAL_STUDIO_VERSION, '')) }}: + - ${{ if eq(parameters.installPreviewVs, 'true') }}: - pwsh: .\scripts\install-vs.ps1 -Version $(VISUAL_STUDIO_VERSION) displayName: Install Visual Studio + condition: ne(variables.VISUAL_STUDIO_VERSION, '') # install workloads - ${{ if not(endsWith(parameters.name, '_linux')) }}: - pwsh: .\scripts\install-dotnet-workloads.ps1 -InstallDir "$env:AGENT_TOOLSDIRECTORY/dotnet" -SourceUrl "$env:DOTNET_WORKLOAD_SOURCE" -IsPreview $true diff --git a/scripts/azure-templates-variables.yml b/scripts/azure-templates-variables.yml index d2409ef806..1b697ae1d0 100644 --- a/scripts/azure-templates-variables.yml +++ b/scripts/azure-templates-variables.yml @@ -51,13 +51,17 @@ steps: - pwsh: | Write-Host "Working with $env:RESOURCES_PIPELINE_SKIASHARP_RUNNAME" - $match = [regex]::Match("$env:RESOURCES_PIPELINE_SKIASHARP_RUNNAME", '.*\-(.+)\.(\d+)') - $label = $match.Groups[1].Value - Write-Host "Preview label: $label" - Write-Host "##vso[task.setvariable variable=PREVIEW_LABEL]$label" - $buildnumber = $match.Groups[2].Value - Write-Host "Build number: $buildnumber" - Write-Host "##vso[task.setvariable variable=BUILD_NUMBER]$buildnumber" + if ($env:RESOURCES_PIPELINE_SKIASHARP_RUNNAME) { + $match = [regex]::Match("$env:RESOURCES_PIPELINE_SKIASHARP_RUNNAME", '.*\-(.+)\.(\d+)') + $label = $match.Groups[1].Value + Write-Host "Preview label: $label" + Write-Host "##vso[task.setvariable variable=PREVIEW_LABEL]$label" + $buildnumber = $match.Groups[2].Value + Write-Host "Build number: $buildnumber" + Write-Host "##vso[task.setvariable variable=BUILD_NUMBER]$buildnumber" + } else { + Write-Host "Not a secondary build." + } condition: or(eq(variables['Build.Reason'], 'ResourceTrigger'), eq(variables['Build.Reason'], 'Manual')) displayName: Override the preview label and build number if this is a secondary build diff --git a/scripts/install-vs.ps1 b/scripts/install-vs.ps1 index 33612e1718..3985c7d8e8 100644 --- a/scripts/install-vs.ps1 +++ b/scripts/install-vs.ps1 @@ -11,25 +11,30 @@ if (Test-Path $fullPath) { exit 0 } +$temp = "$env:TEMP" +if ("$env:AGENT_TEMPDIRECTORY") { + $temp = "$env:AGENT_TEMPDIRECTORY" +} + $startTime = Get-Date Write-Host "Downloading Visual Studio Installer..." Invoke-WebRequest -UseBasicParsing ` -Uri "https://aka.ms/vs/install/latest/vs_setup.exe" ` - -OutFile "$env:TEMP\dd_vs_setup.exe" + -OutFile "$temp\dd_vs_setup.exe" Write-Host "Updating the Visual Studio Installer..." -$exitCode = & "$env:TEMP\dd_vs_setup.exe" --update --quiet --wait | Out-Null +$exitCode = & "$temp\dd_vs_setup.exe" --update --quiet --wait | Out-Null Write-Host "Exit code: $exitCode" Write-Host "Downloading Visual Studio ($Version)..." Invoke-WebRequest -UseBasicParsing ` -Uri "https://aka.ms/vs/$Version/vs_community.exe" ` - -OutFile "$env:TEMP\dd_vs_community.exe" + -OutFile "$temp\dd_vs_community.exe" Write-Host "Installing Visual Studio..." -$exitCode = & "$env:TEMP\dd_vs_community.exe" --quiet --norestart --wait ` +$exitCode = & "$temp\dd_vs_community.exe" --quiet --norestart --wait ` --includeRecommended ` --add Microsoft.VisualStudio.Workload.NetCrossPlat ` --add Microsoft.VisualStudio.Workload.NetCoreTools ` @@ -41,7 +46,7 @@ Write-Host "Exit code: $exitCode" $vsLogs = 'output\logs\vs-logs' New-Item -ItemType Directory -Force -Path "$vsLogs" | Out-Null -Get-ChildItem "$env:TEMP\dd_*" | +Get-ChildItem "$temp\dd_*" | Where-Object { $_.CreationTime -gt $startTime } | Copy-Item -Destination "$vsLogs" diff --git a/scripts/provisionator.csx b/scripts/provisionator.csx new file mode 100644 index 0000000000..a1e1975ce8 --- /dev/null +++ b/scripts/provisionator.csx @@ -0,0 +1 @@ +XamarinChannel("Stable"); diff --git a/source/SkiaSharp.Build.targets b/source/SkiaSharp.Build.targets index 1efc4d0c98..1301709c05 100644 --- a/source/SkiaSharp.Build.targets +++ b/source/SkiaSharp.Build.targets @@ -23,7 +23,7 @@ <SupportedOSPlatformVersion Condition="$(TargetFramework.Contains('-macos'))">10.14</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="$(TargetFramework.Contains('-maccatalyst'))">13.1</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="$(TargetFramework.Contains('-android'))">21.0</SupportedOSPlatformVersion> - <SupportedOSPlatformVersion Condition="$(TargetFramework.Contains('-windows'))">10.0.18362.0</SupportedOSPlatformVersion> + <SupportedOSPlatformVersion Condition="$(TargetFramework.Contains('-windows'))">10.0.17763.0</SupportedOSPlatformVersion> <!-- Suppress version attribute generation in Microsoft.NET.Sdk projects to avoid build failures diff --git a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKCanvasViewRendererBase.cs b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKCanvasViewRendererBase.cs index 2fa8ec5a11..e1c6166d0f 100644 --- a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKCanvasViewRendererBase.cs +++ b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKCanvasViewRendererBase.cs @@ -13,16 +13,16 @@ #if __ANDROID__ using Android.Content; -using Microsoft.Maui.Controls.Compatibility.Platform.Android; +using Microsoft.Maui.Controls.Handlers.Compatibility; using SKNativeView = SkiaSharp.Views.Android.SKCanvasView; using SKNativePaintSurfaceEventArgs = SkiaSharp.Views.Android.SKPaintSurfaceEventArgs; #elif __IOS__ -using Microsoft.Maui.Controls.Compatibility.Platform.iOS; +using Microsoft.Maui.Controls.Handlers.Compatibility; using SKNativeView = SkiaSharp.Views.iOS.SKCanvasView; using SKNativePaintSurfaceEventArgs = SkiaSharp.Views.iOS.SKPaintSurfaceEventArgs; #elif WINDOWS using Windows.Graphics.Display; -using Microsoft.Maui.Controls.Compatibility.Platform.UWP; +using Microsoft.Maui.Controls.Handlers.Compatibility; using SKNativeView = SkiaSharp.Views.Windows.SKXamlCanvas; using SKNativePaintSurfaceEventArgs = SkiaSharp.Views.Windows.SKPaintSurfaceEventArgs; using WVisibility = Microsoft.UI.Xaml.Visibility; diff --git a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKGLViewRendererBase.cs b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKGLViewRendererBase.cs index fccf4a45dc..a5aa087014 100644 --- a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKGLViewRendererBase.cs +++ b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKGLViewRendererBase.cs @@ -11,11 +11,11 @@ #if __ANDROID__ using Android.Content; -using Microsoft.Maui.Controls.Compatibility.Platform.Android; +using Microsoft.Maui.Controls.Handlers.Compatibility; using SKNativeView = SkiaSharp.Views.Android.SKGLTextureView; using SKNativePaintGLSurfaceEventArgs = SkiaSharp.Views.Android.SKPaintGLSurfaceEventArgs; #elif __IOS__ -using Microsoft.Maui.Controls.Compatibility.Platform.iOS; +using Microsoft.Maui.Controls.Handlers.Compatibility; using SKNativeView = SkiaSharp.Views.iOS.SKGLView; using SKNativePaintGLSurfaceEventArgs = SkiaSharp.Views.iOS.SKPaintGLSurfaceEventArgs; #endif diff --git a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Shared/SKImageSource.cs b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Shared/SKImageSource.cs index f4943bef3f..e0eeba492f 100644 --- a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Shared/SKImageSource.cs +++ b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Shared/SKImageSource.cs @@ -153,6 +153,8 @@ protected override void OnPropertyChanged(string propertyName = null) { if (propertyName == PictureProperty.PropertyName) OnSourceChanged(); + else if (propertyName == DimensionsProperty.PropertyName) + OnSourceChanged(); base.OnPropertyChanged(propertyName); } } diff --git a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls.Compatibility/AppHostBuilderExtensions.cs b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls.Compatibility/AppHostBuilderExtensions.cs index cf593b97dc..e7b539940b 100644 --- a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls.Compatibility/AppHostBuilderExtensions.cs +++ b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls.Compatibility/AppHostBuilderExtensions.cs @@ -1,6 +1,4 @@ using System; -using Microsoft.Maui; -using Microsoft.Maui.Controls.Compatibility; using Microsoft.Maui.Hosting; using SkiaSharp.Views.Maui.Controls.Compatibility; using SkiaSharp.Views.Maui.Controls.Hosting; @@ -27,12 +25,12 @@ public static MauiAppBuilder UseSkiaSharp(this MauiAppBuilder builder, bool regi { #if !NETSTANDARD if (replaceHandlers) - handlers.AddCompatibilityRenderer(typeof(SKCanvasView), typeof(SKCanvasViewRenderer)); + handlers.AddHandler<SKCanvasView, SKCanvasViewRenderer>(); else - handlers.TryAddCompatibilityRenderer(typeof(SKCanvasView), typeof(SKCanvasViewRenderer)); + handlers.TryAddHandler<SKCanvasView, SKCanvasViewRenderer>(); #if !WINDOWS && !__MACCATALYST__ - handlers.AddCompatibilityRenderer(typeof(SKGLView), typeof(SKGLViewRenderer)); + handlers.AddHandler<SKGLView, SKGLViewRenderer>(); #endif CompatRegistrar.Registered.Register(typeof(SKImageImageSource), typeof(SKImageSourceHandler)); diff --git a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.Android.cs b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.Android.cs index 2a35eeaffe..82bf3bd614 100644 --- a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.Android.cs +++ b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.Android.cs @@ -65,7 +65,7 @@ private void OnPaintSurface(object? sender, Android.SKPaintSurfaceEventArgs e) VirtualView?.OnCanvasSizeChanged(newCanvasSize); } - VirtualView?.OnPaintSurface(new SKPaintSurfaceEventArgs(e.Surface, e.Info)); + VirtualView?.OnPaintSurface(new SKPaintSurfaceEventArgs(e.Surface, e.Info, e.RawInfo)); } private SKPoint OnGetScaledCoord(double x, double y) diff --git a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.Windows.cs b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.Windows.cs index 94242ea366..9b6ba30935 100644 --- a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.Windows.cs +++ b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.Windows.cs @@ -63,7 +63,7 @@ private void OnPaintSurface(object? sender, Windows.SKPaintSurfaceEventArgs e) VirtualView?.OnCanvasSizeChanged(newCanvasSize); } - VirtualView?.OnPaintSurface(new SKPaintSurfaceEventArgs(e.Surface, e.Info)); + VirtualView?.OnPaintSurface(new SKPaintSurfaceEventArgs(e.Surface, e.Info, e.RawInfo)); } private SKPoint OnGetScaledCoord(double x, double y) diff --git a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.iOS.cs b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.iOS.cs index 4fbf664ffb..33c3025314 100644 --- a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.iOS.cs +++ b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKCanvasView/SKCanvasViewHandler.iOS.cs @@ -64,7 +64,7 @@ private void OnPaintSurface(object? sender, iOS.SKPaintSurfaceEventArgs e) VirtualView?.OnCanvasSizeChanged(newCanvasSize); } - VirtualView?.OnPaintSurface(new SKPaintSurfaceEventArgs(e.Surface, e.Info)); + VirtualView?.OnPaintSurface(new SKPaintSurfaceEventArgs(e.Surface, e.Info, e.RawInfo)); } private SKPoint OnGetScaledCoord(double x, double y) diff --git a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKImageSourceService/SKImageSourceService.Android.cs b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKImageSourceService/SKImageSourceService.Android.cs index fb13a162ab..0be186c4ab 100644 --- a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKImageSourceService/SKImageSourceService.Android.cs +++ b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/Handlers/SKImageSourceService/SKImageSourceService.Android.cs @@ -9,7 +9,29 @@ namespace SkiaSharp.Views.Maui.Handlers { public partial class SKImageSourceService { - public override Task<IImageSourceServiceResult<Drawable>?> GetDrawableAsync(IImageSource imageSource, Context context, CancellationToken cancellationToken = default) + public override async Task<IImageSourceServiceResult?> LoadDrawableAsync( + IImageSource imageSource, + global::Android.Widget.ImageView imageView, + CancellationToken cancellationToken = default) + { + var realResult = await GetDrawableAsync(imageView.Context!, imageSource, cancellationToken); + + if (realResult is null) + { + imageView.SetImageDrawable(null); + return null; + } + + imageView.SetImageDrawable(realResult.Value); + + var result = new ImageSourceServiceLoadResult( + realResult.IsResolutionDependent, + () => realResult.Dispose()); + + return result; + } + + public override Task<IImageSourceServiceResult<Drawable>?> GetDrawableAsync(Context context, IImageSource imageSource, CancellationToken cancellationToken = default) { var bitmap = imageSource switch { diff --git a/source/SkiaSharp.Views.WinUI/SkiaSharp.Views.WinUI/SkiaSharp.Views.WinUI.csproj b/source/SkiaSharp.Views.WinUI/SkiaSharp.Views.WinUI/SkiaSharp.Views.WinUI.csproj index f447b73e1e..e46a08ce14 100644 --- a/source/SkiaSharp.Views.WinUI/SkiaSharp.Views.WinUI/SkiaSharp.Views.WinUI.csproj +++ b/source/SkiaSharp.Views.WinUI/SkiaSharp.Views.WinUI/SkiaSharp.Views.WinUI.csproj @@ -1,6 +1,6 @@ <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> - <TargetFramework>net5.0-windows10.0.18362</TargetFramework> + <TargetFrameworks>net5.0-windows10.0.18362;net6.0-windows10.0.18362</TargetFrameworks> <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion> <RootNamespace>SkiaSharp.Views.Windows</RootNamespace> <AssemblyName>SkiaSharp.Views.Windows</AssemblyName> diff --git a/source/SkiaSharp.Views/SkiaSharp.Views.UWP/UWPExtensions.cs b/source/SkiaSharp.Views/SkiaSharp.Views.UWP/UWPExtensions.cs index 6518013b32..87c817958d 100644 --- a/source/SkiaSharp.Views/SkiaSharp.Views.UWP/UWPExtensions.cs +++ b/source/SkiaSharp.Views/SkiaSharp.Views.UWP/UWPExtensions.cs @@ -75,7 +75,7 @@ public static WriteableBitmap ToWriteableBitmap(this SKPicture picture, SKSizeI { using (var image = SKImage.FromPicture(picture, dimensions)) { - return image.ToWriteableBitmap(); + return image?.ToWriteableBitmap(); } }