diff --git a/api/Avalonia.Skia.nupkg.xml b/api/Avalonia.Skia.nupkg.xml
index 8e9d60f7d4..cd9dedbd0f 100644
--- a/api/Avalonia.Skia.nupkg.xml
+++ b/api/Avalonia.Skia.nupkg.xml
@@ -25,12 +25,24 @@
baseline/Avalonia.Skia/lib/net8.0/Avalonia.Skia.dll
current/Avalonia.Skia/lib/net8.0/Avalonia.Skia.dll
+
+ CP0002
+ M:Avalonia.Skia.Helpers.DrawingContextHelper.WrapSkiaCanvas(SkiaSharp.SKCanvas,Avalonia.Vector)
+ baseline/Avalonia.Skia/lib/net10.0/Avalonia.Skia.dll
+ current/Avalonia.Skia/lib/net10.0/Avalonia.Skia.dll
+
CP0002
M:Avalonia.Skia.ISkiaGpuRenderTarget.BeginRenderingSession
baseline/Avalonia.Skia/lib/net10.0/Avalonia.Skia.dll
current/Avalonia.Skia/lib/net10.0/Avalonia.Skia.dll
+
+ CP0002
+ M:Avalonia.Skia.Helpers.DrawingContextHelper.WrapSkiaCanvas(SkiaSharp.SKCanvas,Avalonia.Vector)
+ baseline/Avalonia.Skia/lib/net8.0/Avalonia.Skia.dll
+ current/Avalonia.Skia/lib/net8.0/Avalonia.Skia.dll
+
CP0002
M:Avalonia.Skia.ISkiaGpuRenderTarget.BeginRenderingSession
diff --git a/api/Avalonia.nupkg.xml b/api/Avalonia.nupkg.xml
index bf32b82d3e..b729164b3b 100644
--- a/api/Avalonia.nupkg.xml
+++ b/api/Avalonia.nupkg.xml
@@ -211,6 +211,12 @@
baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
+ CP0001
+ T:Avalonia.Utilities.MathUtilities
+ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
+ current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
CP0001
T:Avalonia.Utilities.StringTokenizer
@@ -595,6 +601,12 @@
baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
+ CP0001
+ T:Avalonia.Utilities.MathUtilities
+ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
+ current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
CP0001
T:Avalonia.Utilities.StringTokenizer
@@ -1015,6 +1027,18 @@
baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
+ CP0002
+ M:Avalonia.Layout.LayoutHelper.RoundLayoutSizeUp(Avalonia.Size,System.Double,System.Double)
+ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
+ current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
+
+ CP0002
+ M:Avalonia.Layout.LayoutHelper.RoundLayoutThickness(Avalonia.Thickness,System.Double,System.Double)
+ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
+ current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
CP0002
M:Avalonia.Media.Color.ToUint32
@@ -2119,6 +2143,18 @@
baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
+ CP0002
+ M:Avalonia.Layout.LayoutHelper.RoundLayoutSizeUp(Avalonia.Size,System.Double,System.Double)
+ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
+ current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
+
+ CP0002
+ M:Avalonia.Layout.LayoutHelper.RoundLayoutThickness(Avalonia.Thickness,System.Double,System.Double)
+ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
+ current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
CP0002
M:Avalonia.Media.Color.ToUint32
diff --git a/samples/ControlCatalog/Pages/GesturePage.cs b/samples/ControlCatalog/Pages/GesturePage.cs
index c480b512b4..7bc3b96c49 100644
--- a/samples/ControlCatalog/Pages/GesturePage.cs
+++ b/samples/ControlCatalog/Pages/GesturePage.cs
@@ -134,8 +134,8 @@ namespace ControlCatalog.Pages
var currentSize = control.Bounds.Size * _currentScale;
- currentOffset = new Vector3D(MathUtilities.Clamp(currentOffset.X, 0, currentSize.Width - control.Bounds.Width),
- (float)MathUtilities.Clamp(currentOffset.Y, 0, currentSize.Height - control.Bounds.Height),
+ currentOffset = new Vector3D(Math.Clamp(currentOffset.X, 0, currentSize.Width - control.Bounds.Width),
+ (float)Math.Clamp(currentOffset.Y, 0, currentSize.Height - control.Bounds.Height),
0);
compositionVisual.Offset = currentOffset * -1;
diff --git a/src/Avalonia.Base/Layout/LayoutHelper.cs b/src/Avalonia.Base/Layout/LayoutHelper.cs
index 84f1fc4bcc..c50053dc05 100644
--- a/src/Avalonia.Base/Layout/LayoutHelper.cs
+++ b/src/Avalonia.Base/Layout/LayoutHelper.cs
@@ -147,8 +147,7 @@ namespace Avalonia.Layout
/// coordinates by rounding the size up to the nearest pixel.
///
/// Input size.
- /// DPI along x-dimension.
- /// DPI along y-dimension.
+ /// The DPI scale.
/// Value of size that will be rounded under screen DPI.
///
/// This is a layout helper method. It takes DPI into account and also does not return
@@ -156,14 +155,8 @@ namespace Avalonia.Layout
/// associated with the UseLayoutRounding property and should not be used as a general rounding
/// utility.
///
- public static Size RoundLayoutSizeUp(Size size, double dpiScaleX, double dpiScaleY)
- {
- return new Size(RoundLayoutValueUp(size.Width, dpiScaleX), RoundLayoutValueUp(size.Height, dpiScaleY));
- }
-
[SuppressMessage("ReSharper", "CompareOfFloatsByEqualityOperator", Justification = "The DPI scale should have been normalized.")]
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal static Size RoundLayoutSizeUp(Size size, double dpiScale)
+ public static Size RoundLayoutSizeUp(Size size, double dpiScale)
{
// If DPI == 1, don't use DPI-aware rounding.
return dpiScale == 1.0 ?
@@ -180,8 +173,7 @@ namespace Avalonia.Layout
/// coordinates.
///
/// Input thickness.
- /// DPI along x-dimension.
- /// DPI along y-dimension.
+ /// The DPI scale.
/// Value of thickness that will be rounded under screen DPI.
///
/// This is a layout helper method. It takes DPI into account and also does not return
@@ -189,19 +181,8 @@ namespace Avalonia.Layout
/// associated with the UseLayoutRounding property and should not be used as a general rounding
/// utility.
///
- public static Thickness RoundLayoutThickness(Thickness thickness, double dpiScaleX, double dpiScaleY)
- {
- return new Thickness(
- RoundLayoutValue(thickness.Left, dpiScaleX),
- RoundLayoutValue(thickness.Top, dpiScaleY),
- RoundLayoutValue(thickness.Right, dpiScaleX),
- RoundLayoutValue(thickness.Bottom, dpiScaleY)
- );
- }
-
[SuppressMessage("ReSharper", "CompareOfFloatsByEqualityOperator", Justification = "The DPI scale should have been normalized.")]
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal static Thickness RoundLayoutThickness(Thickness thickness, double dpiScale)
+ public static Thickness RoundLayoutThickness(Thickness thickness, double dpiScale)
{
// If DPI == 1, don't use DPI-aware rounding.
return dpiScale == 1.0 ?
@@ -219,7 +200,7 @@ namespace Avalonia.Layout
[SuppressMessage("ReSharper", "CompareOfFloatsByEqualityOperator", Justification = "The DPI scale should have been normalized.")]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal static Point RoundLayoutPoint(Point point, double dpiScale)
+ public static Point RoundLayoutPoint(Point point, double dpiScale)
{
// If DPI == 1, don't use DPI-aware rounding.
return dpiScale == 1.0 ?
@@ -244,10 +225,11 @@ namespace Avalonia.Layout
/// associated with the UseLayoutRounding property and should not be used as a general rounding
/// utility.
///
+ [SuppressMessage("ReSharper", "CompareOfFloatsByEqualityOperator", Justification = "The DPI scale should have been normalized.")]
public static double RoundLayoutValue(double value, double dpiScale)
{
// If DPI == 1, don't use DPI-aware rounding.
- return MathUtilities.IsOne(dpiScale) ?
+ return dpiScale == 1.0 ?
Math.Round(value) :
Math.Round(value * dpiScale) / dpiScale;
}
@@ -265,10 +247,11 @@ namespace Avalonia.Layout
/// associated with the UseLayoutRounding property and should not be used as a general rounding
/// utility.
///
+ [SuppressMessage("ReSharper", "CompareOfFloatsByEqualityOperator", Justification = "The DPI scale should have been normalized.")]
public static double RoundLayoutValueUp(double value, double dpiScale)
{
// If DPI == 1, don't use DPI-aware rounding.
- return MathUtilities.IsOne(dpiScale) ?
+ return dpiScale == 1.0 ?
Math.Ceiling(value) :
Math.Ceiling(RoundTo8Digits(value) * dpiScale) / dpiScale;
}
diff --git a/src/Avalonia.Base/Utilities/MathUtilities.cs b/src/Avalonia.Base/Utilities/MathUtilities.cs
index 1ebf4f6457..2c18836d75 100644
--- a/src/Avalonia.Base/Utilities/MathUtilities.cs
+++ b/src/Avalonia.Base/Utilities/MathUtilities.cs
@@ -1,19 +1,12 @@
using System;
using System.Runtime.CompilerServices;
-#if !BUILDTASK
-using Avalonia.Metadata;
-#endif
namespace Avalonia.Utilities
{
///
/// Provides math utilities not provided in System.Math.
///
-#if !BUILDTASK
- [Unstable("This API might be removed in next major version. Please use corresponding BCL APIs.")]
- public
-#endif
- static class MathUtilities
+ internal static class MathUtilities
{
// smallest such that 1.0+DoubleEpsilon != 1.0
internal const double DoubleEpsilon = 2.2204460492503131e-016;
diff --git a/src/Skia/Avalonia.Skia/Helpers/DrawingContextHelper.cs b/src/Skia/Avalonia.Skia/Helpers/DrawingContextHelper.cs
index fb9ccf78e6..4ed1ea2a11 100644
--- a/src/Skia/Avalonia.Skia/Helpers/DrawingContextHelper.cs
+++ b/src/Skia/Avalonia.Skia/Helpers/DrawingContextHelper.cs
@@ -33,16 +33,7 @@ namespace Avalonia.Skia.Helpers
return Task.CompletedTask;
}
- ///
- /// Wrap Skia canvas in drawing context so we can use Avalonia api to render to external skia canvas
- /// this is useful in scenarios where canvas is not controlled by application, but received from another non avalonia api
- /// like: SKCanvas canvas = SKDocument.BeginPage(...);
- ///
- /// Skia canvas to render into.
- ///
- /// DrawingContext
- [Unstable("IDrawingContextImpl usage is not supported in Avalonia 11.0.")]
- public static IDrawingContextImpl WrapSkiaCanvas(SKCanvas canvas, Vector dpi)
+ internal static IDrawingContextImpl WrapSkiaCanvas(SKCanvas canvas, Vector dpi)
{
var createInfo = new DrawingContextImpl.CreateInfo
{