Browse Source
Merge branch 'master' into fix-styledproperty-defaultvalue-box
pull/2935/head
Steven Kirk
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
54 additions and
8 deletions
build/SharedVersion.props
src/Avalonia.Native/AvaloniaNativeDeferredRendererLock.cs
src/Avalonia.Visuals/Rendering/ManagedDeferredRendererLock.cs
@ -4,11 +4,16 @@
<Product>Avalonia</Product>
<Version>0.8.999</Version>
<Copyright>Copyright 2019 © The AvaloniaUI Project</Copyright>
<PackageLicenseUrl>https://github.com/AvaloniaUI/Avalonia/blob/master/licence.md</PackageLicenseUrl>
<PackageProjectUrl>https://github.com/AvaloniaUI/Avalonia/</PackageProjectUrl>
<PackageProjectUrl>https://avaloniaui.net</PackageProjectUrl>
<RepositoryUrl>https://github.com/AvaloniaUI/Avalonia/</RepositoryUrl>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>CS1591</NoWarn>
<LangVersion>latest</LangVersion>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageIconUrl>https://avatars2.githubusercontent.com/u/14075148?s=200</PackageIconUrl>
<PackageDescription>Avalonia is a WPF/UWP-inspired cross-platform XAML-based UI framework providing a flexible styling system and supporting a wide range of Operating Systems such as Windows (.NET Framework, .NET Core), Linux (via Xorg), MacOS and with experimental support for Android and iOS.</PackageDescription>
<PackageTags>avalonia;avaloniaui;mvvm;rx;reactive extensions;android;ios;mac;forms;wpf;net;netstandard;net461;uwp;xamarin</PackageTags>
<PackageReleaseNotes>https://github.com/AvaloniaUI/Avalonia/releases</PackageReleaseNotes>
<RepositoryType>git</RepositoryType>
</PropertyGroup>
</Project>
@ -1,5 +1,8 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System ;
using System.Reactive.Disposables ;
using System.Threading ;
using Avalonia.Native.Interop ;
using Avalonia.Rendering ;
@ -13,11 +16,27 @@ namespace Avalonia.Native
{
_ window = window ;
}
public IDisposable TryLock ( )
{
if ( _ window . TryLock ( ) )
return Disposable . Create ( ( ) = > _ window . Unlock ( ) ) ;
return new UnlockDisposable ( _ window ) ;
return null ;
}
private sealed class UnlockDisposable : IDisposable
{
private IAvnWindowBase _ window ;
public UnlockDisposable ( IAvnWindowBase window )
{
_ window = window ;
}
public void Dispose ( )
{
Interlocked . Exchange ( ref _ window , null ) ? . Unlock ( ) ;
}
}
}
}
@ -1,5 +1,7 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System ;
using System.Reactive.Disposables ;
using System.Threading ;
namespace Avalonia.Rendering
@ -7,7 +9,7 @@ namespace Avalonia.Rendering
public class ManagedDeferredRendererLock : IDeferredRendererLock
{
private readonly object _l ock = new object ( ) ;
/// <summary>
/// Tries to lock the target surface or window
/// </summary>
@ -15,7 +17,7 @@ namespace Avalonia.Rendering
public IDisposable TryLock ( )
{
if ( Monitor . TryEnter ( _l ock ) )
return Disposable . Create ( ( ) = > Monitor . Exit ( _l ock ) ) ;
return new UnlockDisposable ( _l ock ) ;
return null ;
}
@ -25,7 +27,27 @@ namespace Avalonia.Rendering
public IDisposable Lock ( )
{
Monitor . Enter ( _l ock ) ;
return Disposable . Create ( ( ) = > Monitor . Exit ( _l ock ) ) ;
return new UnlockDisposable ( _l ock ) ;
}
private sealed class UnlockDisposable : IDisposable
{
private object _l ock ;
public UnlockDisposable ( object @lock )
{
_l ock = @lock ;
}
public void Dispose ( )
{
object @lock = Interlocked . Exchange ( ref _l ock , null ) ;
if ( @lock ! = null )
{
Monitor . Exit ( @lock ) ;
}
}
}
}
}