Option Strict On
Option Explicit On

Imports System
Imports System.Collections.Generic
Imports System.Windows.Forms
Imports Nexamas.UI.Components
Imports Nexamas.UI.General
Imports Nexamas.UI.Rendering
Imports Nexamas.UI.Scroll
Imports Nexamas.UI.SkiaScroll
Imports Nexamas.UI.Theming
Imports Nexamas.UI.Layout
Imports SkiaSharp

Namespace Nexamas.UI.FloatRuntime

    Partial Friend NotInheritable Class MASMessageBoxFloatContent
        Implements IMASFloatContent
        Implements IMASFloatInputPolicy
        Implements IMASFloatRenderableContent
        Implements IMASFloatRoutedInputContent
        Implements IMASFloatPointerMoveChangeAwareContent
        Implements IMASFloatSurfaceSizeContract
        Implements IDisposable

        Private ReadOnly _request As MessageBoxRequest
        Private ReadOnly _renderer As MessageBoxRenderer
        Private ReadOnly _state As MessageBoxInteractionState
        Private ReadOnly _invalidate As Action
        Private ReadOnly _panelShellDrag As New MASPanelShellDragController()

        Private _session As IMASFloatSession
        Private _scroll As SkiaScrollAdapter
        Private _scrollCtx As MASThemeContext
        Private _layout As MessageBoxLayoutResult
        Private _panelRectPx As SKRect = SKRect.Empty
        Private _pressedButtonIndex As Integer = -1
        Private _pressedClose As Boolean
        Private _pressedCheckBox As Boolean
        Private _scrollDragging As Boolean
        Private _isOverScrollbar As Boolean
        Private _disposed As Boolean

        Friend Sub New(request As MessageBoxRequest,
                       Optional invalidate As Action = Nothing)

            _request = NormalizeRequest(request)
            _renderer = New MessageBoxRenderer()
            _state = New MessageBoxInteractionState()
            _invalidate = invalidate

        End Sub

        Public ReadOnly Property Name As String Implements IMASFloatContent.Name
            Get
                Return "MASMessageBoxFloatContent"
            End Get
        End Property

        Public Sub AttachSession(session As IMASFloatSession) Implements IMASFloatContent.AttachSession
            _session = session
        End Sub

        Public Sub DetachSession() Implements IMASFloatContent.DetachSession
            _session = Nothing
            _panelShellDrag.Cancel()
            CancelScrollInteraction()
            ResetPointerState()
        End Sub



    End Class

End Namespace
