Option Strict On
Option Explicit On

Imports System

Namespace Nexamas.UI.Rendering

    ''' <summary>
    ''' Owns the visual resources used by MASVisualPrimitivesPainter.
    ''' </summary>
    ''' <remarks>
    ''' MASVisualPrimitivesPainter remains the public primitive drawing facade for controls,
    ''' while this collaborator owns visual resource lifetime. Resource ownership is separate from primitive routing and visual recipe code.
    ''' </remarks>
    Friend NotInheritable Class MASVisualPrimitivesResources
        Implements IDisposable

#Region "Fields"

        Private _disposed As Boolean

        Private ReadOnly _coolAcrylic As MASAcrylicEffectPainter
        Private ReadOnly _chip As MASSoftChipChromePainter
        Private ReadOnly _actionChrome As MASActionChromePainter
        Private ReadOnly _inputField As MASInputFieldChromePainter
        Private ReadOnly _elevatedFill As MASElevatedSurfaceFillPainter
        Private ReadOnly _cardFrame As MASPremiumCardFramePainter
        Private ReadOnly _crystalIce As MASCrystalIceSurfacePainter

#End Region

#Region "Visual resources"

        Friend ReadOnly Property CoolAcrylic As MASAcrylicEffectPainter
            Get
                Return _coolAcrylic
            End Get
        End Property

        Friend ReadOnly Property Chip As MASSoftChipChromePainter
            Get
                Return _chip
            End Get
        End Property

        Friend ReadOnly Property ActionChrome As MASActionChromePainter
            Get
                Return _actionChrome
            End Get
        End Property

        Friend ReadOnly Property InputField As MASInputFieldChromePainter
            Get
                Return _inputField
            End Get
        End Property

        Friend ReadOnly Property ElevatedFill As MASElevatedSurfaceFillPainter
            Get
                Return _elevatedFill
            End Get
        End Property

        Friend ReadOnly Property CardFrame As MASPremiumCardFramePainter
            Get
                Return _cardFrame
            End Get
        End Property

        Friend ReadOnly Property CrystalIce As MASCrystalIceSurfacePainter
            Get
                Return _crystalIce
            End Get
        End Property

#End Region

#Region "Ctor / Dispose"

        Friend Sub New()
            _coolAcrylic = New MASAcrylicEffectPainter()
            _chip = New MASSoftChipChromePainter()
            _actionChrome = New MASActionChromePainter()
            _inputField = New MASInputFieldChromePainter()
            _elevatedFill = New MASElevatedSurfaceFillPainter()
            _cardFrame = New MASPremiumCardFramePainter()
            _crystalIce = New MASCrystalIceSurfacePainter()
        End Sub

        Public Sub Dispose() Implements IDisposable.Dispose
            If _disposed Then Return
            _disposed = True

            SafeDisposeObject(_coolAcrylic)
            SafeDisposeObject(_chip)
            SafeDisposeObject(_actionChrome)
            SafeDisposeObject(_inputField)
            SafeDisposeObject(_elevatedFill)
            SafeDisposeObject(_cardFrame)
            SafeDisposeObject(_crystalIce)
        End Sub

#End Region

#Region "Helpers"

        Private Shared Sub SafeDisposeObject(obj As IDisposable)
            If obj Is Nothing Then Return

            Try
                obj.Dispose()
            Catch masCaughtException1 As Exception
                Nexamas.UI.Diagnostics.MASExceptionSilencer.SwallowRenderFallback(masCaughtException1)
            End Try
        End Sub

#End Region

    End Class

End Namespace
