Option Strict On
Option Explicit On

Imports System
Imports System.Collections.Generic
Imports Nexamas.UI.Architecture
Imports Nexamas.UI.General
Imports Nexamas.UI.Rendering
Imports Nexamas.UI.Theming
Imports Nexamas.UI.Values
Imports SkiaSharp

Namespace Nexamas.UI.Components


    Partial Friend NotInheritable Class SegmentedControlPainter
#Region "Reusable indicator paint state"

        Private Sub PrepareIndicatorFillPaint(Optional blendMode As SKBlendMode = SKBlendMode.SrcOver)
            _indicatorFillPaint.IsAntialias = True
            _indicatorFillPaint.IsDither = True
            _indicatorFillPaint.Style = SKPaintStyle.Fill
            _indicatorFillPaint.Color = SKColors.White
            _indicatorFillPaint.Shader = Nothing
            _indicatorFillPaint.ImageFilter = Nothing
            _indicatorFillPaint.BlendMode = blendMode
        End Sub

        Private Sub PrepareIndicatorFxPaint(Optional blendMode As SKBlendMode = SKBlendMode.SrcOver)
            _indicatorFxPaint.IsAntialias = True
            _indicatorFxPaint.IsDither = True
            _indicatorFxPaint.Style = SKPaintStyle.Fill
            _indicatorFxPaint.Color = SKColors.White
            _indicatorFxPaint.Shader = Nothing
            _indicatorFxPaint.ImageFilter = Nothing
            _indicatorFxPaint.BlendMode = blendMode
        End Sub

        Private Sub PrepareIndicatorStrokePaint(strokeWidth As Single, color As SKColor)
            _indicatorStrokePaint.IsAntialias = True
            _indicatorStrokePaint.IsDither = True
            _indicatorStrokePaint.Style = SKPaintStyle.Stroke
            _indicatorStrokePaint.StrokeJoin = SKStrokeJoin.Round
            _indicatorStrokePaint.StrokeCap = SKStrokeCap.Round
            _indicatorStrokePaint.StrokeWidth = Math.Max(0.1F, strokeWidth)
            _indicatorStrokePaint.Color = color
            _indicatorStrokePaint.Shader = Nothing
            _indicatorStrokePaint.ImageFilter = Nothing
            _indicatorStrokePaint.BlendMode = SKBlendMode.SrcOver
        End Sub

        Private Shared Sub SafeDispose(resource As IDisposable)
            If resource Is Nothing Then Return

            Try
                resource.Dispose()
            Catch masCaughtException1 As Exception
                Nexamas.UI.Diagnostics.MASExceptionSilencer.SwallowDisposeCleanup(masCaughtException1)
            End Try
        End Sub

#End Region

    End Class

End Namespace
