Option Strict On
Option Explicit On

Imports System
Imports Nexamas.UI.Architecture
Imports Nexamas.UI.General
Imports SkiaSharp

Namespace Nexamas.UI.Rendering

    Partial Friend NotInheritable Class MASVisualPrimitivesPainter
#Region "SSOT Geometry"

        Friend Shared Function ComputeRingMetrics(dpi As Single) As MASSurfaceInteractionRing.Metrics
            dpi = PixelSnap.SafeDpi(dpi)
            Return MASSurfaceInteractionRing.GetMetrics(dpi)
        End Function

        Friend Shared Function SnapRectToRingBase(r As SKRect,
                                                  m As MASSurfaceInteractionRing.Metrics) As SKRect

            Return MASSurfaceInteractionRing.SnapBaseRect(r, m)

        End Function

        Friend Shared Function ResolveSurfaceRadiusPx(contract As MASResolvedComponentContract,
                                                      rBase As SKRect,
                                                      dpi As Single) As Single

            If contract Is Nothing Then
                Throw New ArgumentNullException(NameOf(contract))
            End If

            contract.AssertConsumable()

            Return MASRadiusResolver.ResolveSurfacePx(contract, rBase, dpi)

        End Function

        Friend Shared Function ResolveInteractionRadiusPx(contract As MASResolvedComponentContract,
                                                          rBase As SKRect,
                                                          dpi As Single) As Single

            If contract Is Nothing Then
                Throw New ArgumentNullException(NameOf(contract))
            End If

            contract.AssertConsumable()

            Return MASRadiusResolver.ResolveInteractionPx(contract, rBase, dpi)

        End Function

        Friend Shared Function ResolveShadowRadiusPx(contract As MASResolvedComponentContract,
                                                     rBase As SKRect,
                                                     dpi As Single) As Single

            If contract Is Nothing Then
                Throw New ArgumentNullException(NameOf(contract))
            End If

            contract.AssertConsumable()

            Return MASRadiusResolver.ResolveShadowPx(contract, rBase, dpi)

        End Function

        Friend Shared Function ResolveInsetRadiusPx(radiusPx As Single,
                                                    insetPx As Single) As Single

            Return CornerRadii.ResolveInsetRadiusPx(radiusPx, insetPx)

        End Function

#End Region

    End Class

End Namespace
