Option Strict On
Option Explicit On

Namespace Nexamas.UI.Rendering

    ''' <summary>
    ''' Immutable internal padding contract for PanelShell content geometry.
    ''' A negative side means: resolve that side from the current PanelShell density tokens.
    ''' </summary>
    Friend Structure MASPanelShellPadding

        Friend Shared ReadOnly ThemeDefault As MASPanelShellPadding =
            New MASPanelShellPadding(
                MASPanelShellValueNormalizer.ThemeDefaultPaddingDip,
                MASPanelShellValueNormalizer.ThemeDefaultPaddingDip,
                MASPanelShellValueNormalizer.ThemeDefaultPaddingDip,
                MASPanelShellValueNormalizer.ThemeDefaultPaddingDip)

        Friend ReadOnly LeftDip As Single
        Friend ReadOnly TopDip As Single
        Friend ReadOnly RightDip As Single
        Friend ReadOnly BottomDip As Single

        Friend Sub New(leftDip As Single,
                       topDip As Single,
                       rightDip As Single,
                       bottomDip As Single)

            Me.LeftDip = MASPanelShellValueNormalizer.NormalizePaddingDip(leftDip)
            Me.TopDip = MASPanelShellValueNormalizer.NormalizePaddingDip(topDip)
            Me.RightDip = MASPanelShellValueNormalizer.NormalizePaddingDip(rightDip)
            Me.BottomDip = MASPanelShellValueNormalizer.NormalizePaddingDip(bottomDip)
        End Sub

        Friend Shared Function All(valueDip As Single) As MASPanelShellPadding
            Return New MASPanelShellPadding(valueDip, valueDip, valueDip, valueDip)
        End Function

        Friend Shared Function Symmetric(horizontalDip As Single,
                                         verticalDip As Single) As MASPanelShellPadding
            Return New MASPanelShellPadding(horizontalDip, verticalDip, horizontalDip, verticalDip)
        End Function

    End Structure

End Namespace
