Option Strict On
Option Explicit On

Imports System

Namespace Nexamas.UI.Scroll

    Friend NotInheritable Class ScrollMetrics

        Friend Property TrackThickness As Integer
        Friend Property ThumbMinSize As Integer

        Private _dpi As Single = 1.0F
        Private ReadOnly _trackThicknessDip As Single
        Private ReadOnly _thumbMinSizeDip As Single

        Friend Sub New(dpi As Single,
                       Optional trackThicknessDip As Single = 10.0F,
                       Optional thumbMinSizeDip As Single = 36.0F)

            _trackThicknessDip = SafeDip(trackThicknessDip, 10.0F)
            _thumbMinSizeDip = SafeDip(thumbMinSizeDip, 36.0F)

            UpdateDpi(dpi)
        End Sub

        Friend Sub UpdateDpi(dpi As Single)
            Dim d As Single = dpi
            If d <= 0 OrElse Single.IsNaN(d) OrElse Single.IsInfinity(d) Then d = 1.0F
            _dpi = d

            TrackThickness = Px(_trackThicknessDip, _dpi)
            ThumbMinSize = Px(_thumbMinSizeDip, _dpi)
        End Sub

        Private Shared Function SafeDip(value As Single, fallback As Single) As Single
            If Single.IsNaN(value) OrElse Single.IsInfinity(value) OrElse value <= 0.0F Then Return fallback
            Return value
        End Function

        Private Shared Function Px(v As Single, dpi As Single) As Integer
            Return CInt(Math.Round(v * dpi))
        End Function

    End Class

End Namespace