Option Strict On
Option Explicit On

Imports Nexamas.UI.Controls
Imports Nexamas.UI.Theming

Namespace Nexamas.UI.Components

    Partial Public MustInherit Class MASInputBoxSkiaBase

#Region "MASControlBase integration"

        Protected Overrides Sub OnMouseCancel(ctx As MASThemeContext)
            MyBase.OnMouseCancel(ctx)

            Dim changed As Boolean = _selectionController.CancelPointerState()

            _controller.EndSelectionGesture()

            If changed Then
                InvalidateVisual()
            End If
        End Sub

        Protected Overrides Sub OnHostLostFocus(ctx As MASThemeContext)
            MyBase.OnHostLostFocus(ctx)

            Dim changed As Boolean = _selectionController.CancelPointerState()

            _controller.EndSelectionGesture()
            _renderResources.Caret.Hide()

            If changed Then
                InvalidateVisual()
            End If
        End Sub

        Protected Overrides Function WantsKeyboardFocus() As Boolean
            Return True
        End Function

        Protected Overrides Function ExcludeFromPointerRouting() As Boolean
            Return False
        End Function

        Protected Overrides Sub OnGotKeyboardFocus()
            MyBase.OnGotKeyboardFocus()
            ResetCaretBlink()
            InvalidateVisual()
        End Sub

        Protected Overrides Sub OnLostKeyboardFocus()
            MyBase.OnLostKeyboardFocus()
            _selectionController.ClearFocusGestureState()
            _controller.EndSelectionGesture()
            _renderResources.Caret.Hide()
            InvalidateVisual()
        End Sub

#End Region

#Region "Default focus"

        ' CONTRACT:
        ' Text input can act as its own preferred initial focus target.
        ' This contract is independent from Modal/Overlay routing.
        Public ReadOnly Property PreferredFocusControl As MASControlBase Implements IMASDefaultFocusProvider.PreferredFocusControl
            Get
                Return Me
            End Get
        End Property

        Public Function FocusDefaultInput() As Boolean Implements IMASDefaultFocusProvider.FocusDefaultInput
            FocusText()
            Return True
        End Function

#End Region

    End Class

End Namespace
