From d55edaa18a2791ff024491f25820022c1d1a8531 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 5 Dec 2017 10:16:35 +0100 Subject: [PATCH 1/4] Use readonly structs where possible. C# 7.2 introduced [readonly structs](https://docs.microsoft.com/en-us/dotnet/csharp/reference-semantics-with-value-types). Using this construct we can make sure that future modifications to these structs don't make them immutable and C# can generate more efficient code. --- src/Avalonia.Visuals/Avalonia.Visuals.csproj | 1 + src/Avalonia.Visuals/Matrix.cs | 2 +- src/Avalonia.Visuals/Media/Color.cs | 2 +- src/Avalonia.Visuals/Media/DrawingContext.cs | 4 ++-- .../Media/Immutable/ImmutableSolidColorBrush.cs | 2 +- src/Avalonia.Visuals/Point.cs | 2 +- src/Avalonia.Visuals/Rect.cs | 2 +- src/Avalonia.Visuals/RelativePoint.cs | 4 ++-- src/Avalonia.Visuals/RelativeRect.cs | 2 +- .../Rendering/SceneGraph/DeferredDrawingContextImpl.cs | 2 +- src/Avalonia.Visuals/Size.cs | 2 +- src/Avalonia.Visuals/Thickness.cs | 2 +- src/Avalonia.Visuals/Vector.cs | 2 +- src/Avalonia.Visuals/VisualTree/TransformedBounds.cs | 2 +- src/Shared/RenderHelpers/ArcToHelper.cs | 2 +- src/Skia/Avalonia.Skia/Avalonia.Skia.csproj | 3 ++- src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj | 1 + src/Windows/Avalonia.Direct2D1/OptionalDispose.cs | 2 +- 18 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/Avalonia.Visuals/Avalonia.Visuals.csproj b/src/Avalonia.Visuals/Avalonia.Visuals.csproj index fe18b0e446..180466d7a8 100644 --- a/src/Avalonia.Visuals/Avalonia.Visuals.csproj +++ b/src/Avalonia.Visuals/Avalonia.Visuals.csproj @@ -3,6 +3,7 @@ netstandard2.0 false Avalonia + latest true diff --git a/src/Avalonia.Visuals/Matrix.cs b/src/Avalonia.Visuals/Matrix.cs index 10549b967d..3ed0287cd1 100644 --- a/src/Avalonia.Visuals/Matrix.cs +++ b/src/Avalonia.Visuals/Matrix.cs @@ -10,7 +10,7 @@ namespace Avalonia /// /// A 2x3 matrix. /// - public struct Matrix + public readonly struct Matrix { private readonly double _m11; private readonly double _m12; diff --git a/src/Avalonia.Visuals/Media/Color.cs b/src/Avalonia.Visuals/Media/Color.cs index cbf5a86fd6..d0a8fb17f8 100644 --- a/src/Avalonia.Visuals/Media/Color.cs +++ b/src/Avalonia.Visuals/Media/Color.cs @@ -11,7 +11,7 @@ namespace Avalonia.Media /// /// An ARGB color. /// - public struct Color + public readonly struct Color { /// /// Gets or sets the Alpha component of the color. diff --git a/src/Avalonia.Visuals/Media/DrawingContext.cs b/src/Avalonia.Visuals/Media/DrawingContext.cs index 1aa3fd21de..1d25224b8d 100644 --- a/src/Avalonia.Visuals/Media/DrawingContext.cs +++ b/src/Avalonia.Visuals/Media/DrawingContext.cs @@ -19,7 +19,7 @@ namespace Avalonia.Media ? new Stack() : TransformStackPool.Pop(); - struct TransformContainer + readonly struct TransformContainer { public readonly Matrix LocalTransform; public readonly Matrix ContainerTransform; @@ -147,7 +147,7 @@ namespace Avalonia.Media } } - public struct PushedState : IDisposable + public readonly struct PushedState : IDisposable { private readonly int _level; private readonly DrawingContext _context; diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs b/src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs index 015486c6a4..b55ca251a6 100644 --- a/src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs +++ b/src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs @@ -6,7 +6,7 @@ namespace Avalonia.Media.Immutable /// /// Fills an area with a solid color. /// - public struct ImmutableSolidColorBrush : ISolidColorBrush + public readonly struct ImmutableSolidColorBrush : ISolidColorBrush { /// /// Initializes a new instance of the class. diff --git a/src/Avalonia.Visuals/Point.cs b/src/Avalonia.Visuals/Point.cs index 5fbd082967..c1edd9eb42 100644 --- a/src/Avalonia.Visuals/Point.cs +++ b/src/Avalonia.Visuals/Point.cs @@ -10,7 +10,7 @@ namespace Avalonia /// /// Defines a point. /// - public struct Point + public readonly struct Point { /// /// The X position. diff --git a/src/Avalonia.Visuals/Rect.cs b/src/Avalonia.Visuals/Rect.cs index d562429fc7..cdf1ee98f7 100644 --- a/src/Avalonia.Visuals/Rect.cs +++ b/src/Avalonia.Visuals/Rect.cs @@ -10,7 +10,7 @@ namespace Avalonia /// /// Defines a rectangle. /// - public struct Rect + public readonly struct Rect { /// /// An empty rectangle. diff --git a/src/Avalonia.Visuals/RelativePoint.cs b/src/Avalonia.Visuals/RelativePoint.cs index cc34feb5f3..1b84f93166 100644 --- a/src/Avalonia.Visuals/RelativePoint.cs +++ b/src/Avalonia.Visuals/RelativePoint.cs @@ -27,7 +27,7 @@ namespace Avalonia /// /// Defines a point that may be defined relative to a containing element. /// - public struct RelativePoint : IEquatable + public readonly struct RelativePoint : IEquatable { /// /// A point at the top left of the containing element. @@ -44,7 +44,7 @@ namespace Avalonia /// public static readonly RelativePoint BottomRight = new RelativePoint(1, 1, RelativeUnit.Relative); - private Point _point; + private readonly Point _point; private readonly RelativeUnit _unit; diff --git a/src/Avalonia.Visuals/RelativeRect.cs b/src/Avalonia.Visuals/RelativeRect.cs index a11f080e94..33a9fb8b15 100644 --- a/src/Avalonia.Visuals/RelativeRect.cs +++ b/src/Avalonia.Visuals/RelativeRect.cs @@ -10,7 +10,7 @@ namespace Avalonia /// /// Defines a rectangle that may be defined relative to a containing element. /// - public struct RelativeRect : IEquatable + public readonly struct RelativeRect : IEquatable { /// /// A rectangle that represents 100% of an area. diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs index 29c482c336..7af1420bbe 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs @@ -319,7 +319,7 @@ namespace Avalonia.Rendering.SceneGraph } } - public struct UpdateState : IDisposable + public readonly struct UpdateState : IDisposable { public UpdateState( DeferredDrawingContextImpl owner, diff --git a/src/Avalonia.Visuals/Size.cs b/src/Avalonia.Visuals/Size.cs index 6ad87c6120..5045f9a837 100644 --- a/src/Avalonia.Visuals/Size.cs +++ b/src/Avalonia.Visuals/Size.cs @@ -10,7 +10,7 @@ namespace Avalonia /// /// Defines a size. /// - public struct Size + public readonly struct Size { /// /// A size representing infinity. diff --git a/src/Avalonia.Visuals/Thickness.cs b/src/Avalonia.Visuals/Thickness.cs index dc9be7341d..10d5f76915 100644 --- a/src/Avalonia.Visuals/Thickness.cs +++ b/src/Avalonia.Visuals/Thickness.cs @@ -10,7 +10,7 @@ namespace Avalonia /// /// Describes the thickness of a frame around a rectangle. /// - public struct Thickness + public readonly struct Thickness { /// /// The thickness on the left. diff --git a/src/Avalonia.Visuals/Vector.cs b/src/Avalonia.Visuals/Vector.cs index c4545b8e5c..acde49a84a 100644 --- a/src/Avalonia.Visuals/Vector.cs +++ b/src/Avalonia.Visuals/Vector.cs @@ -10,7 +10,7 @@ namespace Avalonia /// /// Defines a vector. /// - public struct Vector + public readonly struct Vector { /// /// The X vector. diff --git a/src/Avalonia.Visuals/VisualTree/TransformedBounds.cs b/src/Avalonia.Visuals/VisualTree/TransformedBounds.cs index 4c548669bd..5723331500 100644 --- a/src/Avalonia.Visuals/VisualTree/TransformedBounds.cs +++ b/src/Avalonia.Visuals/VisualTree/TransformedBounds.cs @@ -8,7 +8,7 @@ namespace Avalonia.VisualTree /// /// Holds information about the bounds of a control, together with a transform and a clip. /// - public struct TransformedBounds + public readonly struct TransformedBounds { /// /// Initializes a new instance of the struct. diff --git a/src/Shared/RenderHelpers/ArcToHelper.cs b/src/Shared/RenderHelpers/ArcToHelper.cs index 9da47909cb..2457606f9d 100644 --- a/src/Shared/RenderHelpers/ArcToHelper.cs +++ b/src/Shared/RenderHelpers/ArcToHelper.cs @@ -982,7 +982,7 @@ namespace Avalonia.RenderHelpers /// At some point I did not trust the WPF Matrix struct, and wrote my own simple one -_- /// This is supposed to be replaced with proper WPF Matrices everywhere /// - private struct SimpleMatrix + private readonly struct SimpleMatrix { private readonly double _a, _b, _c, _d; diff --git a/src/Skia/Avalonia.Skia/Avalonia.Skia.csproj b/src/Skia/Avalonia.Skia/Avalonia.Skia.csproj index f5ed89d154..cd27bda607 100644 --- a/src/Skia/Avalonia.Skia/Avalonia.Skia.csproj +++ b/src/Skia/Avalonia.Skia/Avalonia.Skia.csproj @@ -5,7 +5,8 @@ Avalonia.Skia Avalonia.Skia true - true + latest + true diff --git a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj index a84c373886..9fac027fd0 100644 --- a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj +++ b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj @@ -2,6 +2,7 @@ netstandard2.0 false + latest diff --git a/src/Windows/Avalonia.Direct2D1/OptionalDispose.cs b/src/Windows/Avalonia.Direct2D1/OptionalDispose.cs index cd3eee8d25..e302e71102 100644 --- a/src/Windows/Avalonia.Direct2D1/OptionalDispose.cs +++ b/src/Windows/Avalonia.Direct2D1/OptionalDispose.cs @@ -2,7 +2,7 @@ namespace Avalonia.Direct2D1 { - public struct OptionalDispose : IDisposable where T : IDisposable + public readonly struct OptionalDispose : IDisposable where T : IDisposable { private readonly bool _dispose; From 86f2d45d2b13b574cf2cad64cf8e5d39bfdab314 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 5 Dec 2017 12:35:28 +0100 Subject: [PATCH 2/4] Use current VS2017 image. --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index ba3680d0b9..76d1ae3e1c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -os: Previous Visual Studio 2017 +os: Visual Studio 2017 platform: - Any CPU skip_branch_with_pr: true From 1e611022be693a390f65647656bee5b32d517906 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 15 May 2018 09:10:26 +0200 Subject: [PATCH 3/4] Updated .net core SDK version. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fdffaba477..51b2aaf2bc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ env: - DOTNET_CLI_TELEMETRY_OPTOUT=1 mono: - 5.2.0 -dotnet: 2.0.0 +dotnet: 2.1.200 script: - ./build.sh --target "Travis" --platform "NetCoreOnly" --configuration "Release" notifications: From 262e583f5cd5368a6e1aed0b28ac3f1281225e22 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 15 May 2018 09:54:03 +0200 Subject: [PATCH 4/4] Moved to SharedVersion.props. --- build/SharedVersion.props | 1 + src/Avalonia.Visuals/Avalonia.Visuals.csproj | 1 - src/Skia/Avalonia.Skia/Avalonia.Skia.csproj | 1 - src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj | 1 - 4 files changed, 1 insertion(+), 3 deletions(-) diff --git a/build/SharedVersion.props b/build/SharedVersion.props index 8b7b02de5d..351583a106 100644 --- a/build/SharedVersion.props +++ b/build/SharedVersion.props @@ -9,5 +9,6 @@ https://github.com/AvaloniaUI/Avalonia/ true CS1591 + latest \ No newline at end of file diff --git a/src/Avalonia.Visuals/Avalonia.Visuals.csproj b/src/Avalonia.Visuals/Avalonia.Visuals.csproj index 69415dab4d..f320644cd0 100644 --- a/src/Avalonia.Visuals/Avalonia.Visuals.csproj +++ b/src/Avalonia.Visuals/Avalonia.Visuals.csproj @@ -2,7 +2,6 @@ netstandard2.0 Avalonia - latest diff --git a/src/Skia/Avalonia.Skia/Avalonia.Skia.csproj b/src/Skia/Avalonia.Skia/Avalonia.Skia.csproj index 21086525cc..ade7f8778a 100644 --- a/src/Skia/Avalonia.Skia/Avalonia.Skia.csproj +++ b/src/Skia/Avalonia.Skia/Avalonia.Skia.csproj @@ -5,7 +5,6 @@ Avalonia.Skia Avalonia.Skia true - latest true diff --git a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj index 9fac027fd0..a84c373886 100644 --- a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj +++ b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj @@ -2,7 +2,6 @@ netstandard2.0 false - latest