Browse Source

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.
pull/1308/head
Steven Kirk 9 years ago
parent
commit
d55edaa18a
  1. 1
      src/Avalonia.Visuals/Avalonia.Visuals.csproj
  2. 2
      src/Avalonia.Visuals/Matrix.cs
  3. 2
      src/Avalonia.Visuals/Media/Color.cs
  4. 4
      src/Avalonia.Visuals/Media/DrawingContext.cs
  5. 2
      src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs
  6. 2
      src/Avalonia.Visuals/Point.cs
  7. 2
      src/Avalonia.Visuals/Rect.cs
  8. 4
      src/Avalonia.Visuals/RelativePoint.cs
  9. 2
      src/Avalonia.Visuals/RelativeRect.cs
  10. 2
      src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs
  11. 2
      src/Avalonia.Visuals/Size.cs
  12. 2
      src/Avalonia.Visuals/Thickness.cs
  13. 2
      src/Avalonia.Visuals/Vector.cs
  14. 2
      src/Avalonia.Visuals/VisualTree/TransformedBounds.cs
  15. 2
      src/Shared/RenderHelpers/ArcToHelper.cs
  16. 3
      src/Skia/Avalonia.Skia/Avalonia.Skia.csproj
  17. 1
      src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj
  18. 2
      src/Windows/Avalonia.Direct2D1/OptionalDispose.cs

1
src/Avalonia.Visuals/Avalonia.Visuals.csproj

@ -3,6 +3,7 @@
<TargetFramework>netstandard2.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<RootNamespace>Avalonia</RootNamespace>
<LangVersion>latest</LangVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>

2
src/Avalonia.Visuals/Matrix.cs

@ -10,7 +10,7 @@ namespace Avalonia
/// <summary>
/// A 2x3 matrix.
/// </summary>
public struct Matrix
public readonly struct Matrix
{
private readonly double _m11;
private readonly double _m12;

2
src/Avalonia.Visuals/Media/Color.cs

@ -11,7 +11,7 @@ namespace Avalonia.Media
/// <summary>
/// An ARGB color.
/// </summary>
public struct Color
public readonly struct Color
{
/// <summary>
/// Gets or sets the Alpha component of the color.

4
src/Avalonia.Visuals/Media/DrawingContext.cs

@ -19,7 +19,7 @@ namespace Avalonia.Media
? new Stack<TransformContainer>()
: 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;

2
src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs

@ -6,7 +6,7 @@ namespace Avalonia.Media.Immutable
/// <summary>
/// Fills an area with a solid color.
/// </summary>
public struct ImmutableSolidColorBrush : ISolidColorBrush
public readonly struct ImmutableSolidColorBrush : ISolidColorBrush
{
/// <summary>
/// Initializes a new instance of the <see cref="ImmutableSolidColorBrush"/> class.

2
src/Avalonia.Visuals/Point.cs

@ -10,7 +10,7 @@ namespace Avalonia
/// <summary>
/// Defines a point.
/// </summary>
public struct Point
public readonly struct Point
{
/// <summary>
/// The X position.

2
src/Avalonia.Visuals/Rect.cs

@ -10,7 +10,7 @@ namespace Avalonia
/// <summary>
/// Defines a rectangle.
/// </summary>
public struct Rect
public readonly struct Rect
{
/// <summary>
/// An empty rectangle.

4
src/Avalonia.Visuals/RelativePoint.cs

@ -27,7 +27,7 @@ namespace Avalonia
/// <summary>
/// Defines a point that may be defined relative to a containing element.
/// </summary>
public struct RelativePoint : IEquatable<RelativePoint>
public readonly struct RelativePoint : IEquatable<RelativePoint>
{
/// <summary>
/// A point at the top left of the containing element.
@ -44,7 +44,7 @@ namespace Avalonia
/// </summary>
public static readonly RelativePoint BottomRight = new RelativePoint(1, 1, RelativeUnit.Relative);
private Point _point;
private readonly Point _point;
private readonly RelativeUnit _unit;

2
src/Avalonia.Visuals/RelativeRect.cs

@ -10,7 +10,7 @@ namespace Avalonia
/// <summary>
/// Defines a rectangle that may be defined relative to a containing element.
/// </summary>
public struct RelativeRect : IEquatable<RelativeRect>
public readonly struct RelativeRect : IEquatable<RelativeRect>
{
/// <summary>
/// A rectangle that represents 100% of an area.

2
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,

2
src/Avalonia.Visuals/Size.cs

@ -10,7 +10,7 @@ namespace Avalonia
/// <summary>
/// Defines a size.
/// </summary>
public struct Size
public readonly struct Size
{
/// <summary>
/// A size representing infinity.

2
src/Avalonia.Visuals/Thickness.cs

@ -10,7 +10,7 @@ namespace Avalonia
/// <summary>
/// Describes the thickness of a frame around a rectangle.
/// </summary>
public struct Thickness
public readonly struct Thickness
{
/// <summary>
/// The thickness on the left.

2
src/Avalonia.Visuals/Vector.cs

@ -10,7 +10,7 @@ namespace Avalonia
/// <summary>
/// Defines a vector.
/// </summary>
public struct Vector
public readonly struct Vector
{
/// <summary>
/// The X vector.

2
src/Avalonia.Visuals/VisualTree/TransformedBounds.cs

@ -8,7 +8,7 @@ namespace Avalonia.VisualTree
/// <summary>
/// Holds information about the bounds of a control, together with a transform and a clip.
/// </summary>
public struct TransformedBounds
public readonly struct TransformedBounds
{
/// <summary>
/// Initializes a new instance of the <see cref="TransformedBounds"/> struct.

2
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
/// </summary>
private struct SimpleMatrix
private readonly struct SimpleMatrix
{
private readonly double _a, _b, _c, _d;

3
src/Skia/Avalonia.Skia/Avalonia.Skia.csproj

@ -5,7 +5,8 @@
<RootNamespace>Avalonia.Skia</RootNamespace>
<AssemblyName>Avalonia.Skia</AssemblyName>
<IncludeLinuxSkia>true</IncludeLinuxSkia>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<LangVersion>latest</LangVersion>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\..\Shared\SharedAssemblyInfo.cs">

1
src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj

@ -2,6 +2,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<LangVersion>latest</LangVersion>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\..\Shared\SharedAssemblyInfo.cs">

2
src/Windows/Avalonia.Direct2D1/OptionalDispose.cs

@ -2,7 +2,7 @@
namespace Avalonia.Direct2D1
{
public struct OptionalDispose<T> : IDisposable where T : IDisposable
public readonly struct OptionalDispose<T> : IDisposable where T : IDisposable
{
private readonly bool _dispose;

Loading…
Cancel
Save