Option Strict On
Option Explicit On

Imports Nexamas.UI.General
Imports Nexamas.UI.Rendering
Imports Nexamas.UI.Theming
Imports Nexamas.UI.Values
Imports SkiaSharp

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Reusable media command button renderer. It composes layout, palette resolution,
    ''' surface painting, and content painting without owning interaction state.
    ''' </summary>
    Friend NotInheritable Class MASMediaButtonRenderer

        Private Sub New()
        End Sub

        Friend Shared Sub Draw(canvas As SKCanvas,
                               ctx As MASThemeContext,
                               style As MASMediaVisualStyle,
                               button As MASMediaButtonModel,
                               state As MASMediaButtonState,
                               dpi As Single)
            If canvas Is Nothing OrElse ctx Is Nothing OrElse style Is Nothing Then Return
            If button.Rect.Width <= 1.0F OrElse button.Rect.Height <= 1.0F Then Return

            Dim safeDpi As Single = PixelSnap.SafeDpi(dpi)
            Dim rect As SKRect = PixelSnap.SnapRectHalf(button.Rect)
            Dim radius As Single = MASMediaButtonLayoutResolver.ResolveRadius(rect, safeDpi, button.Compact)
            Dim palette As MASMediaButtonPalette = MASMediaButtonPaletteResolver.Resolve(style, state)
            Dim contentOffsetY As Single = If(state.Pressed AndAlso state.Enabled, 1.0F * safeDpi, 0.0F)

            MASMediaButtonSurfacePainter.Draw(canvas, rect, radius, safeDpi, palette)
            MASMediaButtonContentPainter.Draw(canvas, ctx, rect, button, safeDpi, palette, contentOffsetY)
        End Sub

    End Class

End Namespace
