Option Strict On
Option Explicit On

Imports System

Imports Nexamas.UI.SkiaScroll
Imports Nexamas.UI.Theming
Imports Nexamas.UI.Architecture

Namespace Nexamas.UI.Scroll

    Friend NotInheritable Class ScrollFactory

        Private Sub New()
        End Sub

        Friend Shared Function Create(ctx As MASThemeContext,
                                      Optional invalidate As Action = Nothing,
                                      Optional trackThicknessDip As Single = 10.0F,
                                      Optional thumbMinSizeDip As Single = 36.0F,
                                      Optional postToUiThread As Func(Of Action, Boolean) = Nothing) As SkiaScrollAdapter

            If ctx Is Nothing Then Throw New ArgumentNullException(NameOf(ctx))

            Dim dpi As Single = ctx.Dpi
            If dpi <= 0.0F OrElse Single.IsNaN(dpi) OrElse Single.IsInfinity(dpi) Then
                dpi = 1.0F
            End If

            Dim metrics As New ScrollMetrics(dpi, trackThicknessDip, thumbMinSizeDip)
            Dim layout As New ScrollbarLayout(metrics)

            Dim painter As New ScrollbarPainter(
    metrics:=metrics,
    ctx:=ctx,
contract:=MASArchitectureRuntime.ResolveContractOrThrow(GetType(MASScrollBarContract)))

            Return New SkiaScrollAdapter(metrics, layout, painter, invalidate, postToUiThread)
        End Function

    End Class

End Namespace