Option Strict On
Option Explicit On

Namespace Nexamas.UI.Virtualization

    ''' <summary>
    ''' Scroll request produced by the virtualization system for a specific index. The owning scroll adapter decides how to apply
    ''' the target offset, which keeps scrolling ownership outside the virtualization engine.
    ''' </summary>
    Friend NotInheritable Class MASVirtualizationScrollRequest

        Friend Sub New(index As Integer,
                       targetOffsetPx As Single,
                       alignment As MASVirtualizationAlignment,
                       totalExtentPx As Single)
            Me.New(index, CDbl(targetOffsetPx), alignment, CDbl(totalExtentPx))
        End Sub

        Friend Sub New(index As Integer,
                       targetOffsetPx As Double,
                       alignment As MASVirtualizationAlignment,
                       totalExtentPx As Double)
            Me.Index = Math.Max(0, index)
            Me.TargetOffsetPxDouble = MASVirtualizationNumericGuard.NormalizeNonNegative(targetOffsetPx)
            Me.TargetOffsetPx = MASVirtualizationNumericGuard.ToSingleSaturated(Me.TargetOffsetPxDouble)
            Me.Alignment = alignment
            Me.TotalExtentPxDouble = MASVirtualizationNumericGuard.NormalizeNonNegative(totalExtentPx)
            Me.TotalExtentPx = MASVirtualizationNumericGuard.ToSingleSaturated(Me.TotalExtentPxDouble)
        End Sub

        Friend ReadOnly Property Index As Integer
        Friend ReadOnly Property TargetOffsetPx As Single
        Friend ReadOnly Property TargetOffsetPxDouble As Double
        Friend ReadOnly Property Alignment As MASVirtualizationAlignment
        Friend ReadOnly Property TotalExtentPx As Single
        Friend ReadOnly Property TotalExtentPxDouble As Double

    End Class

End Namespace
