<UserControl
    x:Class="PicView.WPF.Views.UserControls.Misc.SpinWaiter"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    d:DesignHeight="450"
    d:DesignWidth="800"
    mc:Ignorable="d">
    <Grid xmlns:system="clr-namespace:System;assembly=mscorlib">
        <Grid.Resources>
            <!--  Particle Styling  -->
            <SolidColorBrush x:Key="ParticleColor" Color="{DynamicResource ChosenColor}" />
            <SolidColorBrush x:Key="ParticleBackgroundColor" Color="Transparent" />
            <system:Double x:Key="ParticleOpacity">1</system:Double>
            <system:Double x:Key="ParticleRadius">5</system:Double>

            <system:Double x:Key="StartingPointX">0</system:Double>
            <system:Double x:Key="StartingPointY">-20</system:Double>

            <system:Double x:Key="RotationPointX">0.5</system:Double>
            <system:Double x:Key="RotationPointY">0.5</system:Double>

            <!--  StoryBoard  -->
            <system:TimeSpan x:Key="StoryBoardBeginTimeP0">00:00:00.000</system:TimeSpan>
            <system:TimeSpan x:Key="StoryBoardBeginTimeP1">00:00:00.100</system:TimeSpan>
            <system:TimeSpan x:Key="StoryBoardBeginTimeP2">00:00:00.200</system:TimeSpan>
            <system:TimeSpan x:Key="StoryBoardBeginTimeP3">00:00:00.300</system:TimeSpan>
            <system:TimeSpan x:Key="StoryBoardBeginTimeP4">00:00:00.400</system:TimeSpan>
            <Duration x:Key="StoryBoardDuration">00:00:01.800</Duration>

            <!--  Particle Origin Angles  -->
            <system:Double x:Key="ParticleOriginAngleP0">0</system:Double>
            <system:Double x:Key="ParticleOriginAngleP1">-10</system:Double>
            <system:Double x:Key="ParticleOriginAngleP2">-20</system:Double>
            <system:Double x:Key="ParticleOriginAngleP3">-30</system:Double>
            <system:Double x:Key="ParticleOriginAngleP4">-40</system:Double>

            <!--  Particle Position & Timing 1  -->
            <system:Double x:Key="ParticleBeginAngle1">0</system:Double>
            <system:Double x:Key="ParticleEndAngle1">90</system:Double>
            <system:TimeSpan x:Key="ParticleBeginTime1">00:00:00.000</system:TimeSpan>
            <Duration x:Key="ParticleDuration1">00:00:00.750</Duration>

            <!--  Particle Position & Timing 2  -->
            <system:Double x:Key="ParticleBeginAngle2">90</system:Double>
            <system:Double x:Key="ParticleEndAngle2">270</system:Double>
            <system:TimeSpan x:Key="ParticleBeginTime2">00:00:00.751</system:TimeSpan>
            <Duration x:Key="ParticleDuration2">00:00:00.300</Duration>

            <!--  Particle Position & Timing 3  -->
            <system:Double x:Key="ParticleBeginAngle3">270</system:Double>
            <system:Double x:Key="ParticleEndAngle3">360</system:Double>
            <system:TimeSpan x:Key="ParticleBeginTime3">00:00:01.052</system:TimeSpan>
            <Duration x:Key="ParticleDuration3">00:00:00.750</Duration>

            <Style x:Key="EllipseStyle" TargetType="Ellipse">
                <Setter Property="Width" Value="{StaticResource ParticleRadius}" />
                <Setter Property="Height" Value="{StaticResource ParticleRadius}" />
                <Setter Property="Fill" Value="{StaticResource ParticleColor}" />
                <Setter Property="RenderTransformOrigin" Value="0.5, 0.5" />
                <Setter Property="Opacity" Value="{StaticResource ParticleOpacity}" />
            </Style>
        </Grid.Resources>
        <Canvas Width="50" Height="50">
            <Canvas.Triggers>
                <EventTrigger RoutedEvent="Canvas.Loaded">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard
                                BeginTime="{StaticResource StoryBoardBeginTimeP0}"
                                RepeatBehavior="Forever"
                                Duration="{StaticResource StoryBoardDuration}">
                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime1}"
                                    Storyboard.TargetName="p0"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle1}"
                                    To="{StaticResource ParticleEndAngle1}"
                                    Duration="{StaticResource ParticleDuration1}" />
                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime2}"
                                    Storyboard.TargetName="p0"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle2}"
                                    To="{StaticResource ParticleEndAngle2}"
                                    Duration="{StaticResource ParticleDuration2}" />
                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime3}"
                                    Storyboard.TargetName="p0"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle3}"
                                    To="{StaticResource ParticleEndAngle3}"
                                    Duration="{StaticResource ParticleDuration3}" />
                            </Storyboard>
                        </BeginStoryboard>
                        <BeginStoryboard>
                            <Storyboard
                                BeginTime="{StaticResource StoryBoardBeginTimeP1}"
                                RepeatBehavior="Forever"
                                Duration="{StaticResource StoryBoardDuration}">

                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime1}"
                                    Storyboard.TargetName="p1"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle1}"
                                    To="{StaticResource ParticleEndAngle1}"
                                    Duration="{StaticResource ParticleDuration1}" />
                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime2}"
                                    Storyboard.TargetName="p1"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle2}"
                                    To="{StaticResource ParticleEndAngle2}"
                                    Duration="{StaticResource ParticleDuration2}" />
                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime3}"
                                    Storyboard.TargetName="p1"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle3}"
                                    To="{StaticResource ParticleEndAngle3}"
                                    Duration="{StaticResource ParticleDuration3}" />
                            </Storyboard>
                        </BeginStoryboard>
                        <BeginStoryboard>
                            <Storyboard
                                BeginTime="{StaticResource StoryBoardBeginTimeP2}"
                                RepeatBehavior="Forever"
                                Duration="{StaticResource StoryBoardDuration}">

                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime1}"
                                    Storyboard.TargetName="p2"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle1}"
                                    To="{StaticResource ParticleEndAngle1}"
                                    Duration="{StaticResource ParticleDuration1}" />
                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime2}"
                                    Storyboard.TargetName="p2"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle2}"
                                    To="{StaticResource ParticleEndAngle2}"
                                    Duration="{StaticResource ParticleDuration2}" />
                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime3}"
                                    Storyboard.TargetName="p2"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle3}"
                                    To="{StaticResource ParticleEndAngle3}"
                                    Duration="{StaticResource ParticleDuration3}" />
                            </Storyboard>
                        </BeginStoryboard>

                        <BeginStoryboard>
                            <Storyboard
                                BeginTime="{StaticResource StoryBoardBeginTimeP3}"
                                RepeatBehavior="Forever"
                                Duration="{StaticResource StoryBoardDuration}">

                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime1}"
                                    Storyboard.TargetName="p3"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle1}"
                                    To="{StaticResource ParticleEndAngle1}"
                                    Duration="{StaticResource ParticleDuration1}" />
                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime2}"
                                    Storyboard.TargetName="p3"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle2}"
                                    To="{StaticResource ParticleEndAngle2}"
                                    Duration="{StaticResource ParticleDuration2}" />
                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime3}"
                                    Storyboard.TargetName="p3"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle3}"
                                    To="{StaticResource ParticleEndAngle3}"
                                    Duration="{StaticResource ParticleDuration3}" />
                            </Storyboard>
                        </BeginStoryboard>

                        <BeginStoryboard>
                            <Storyboard
                                BeginTime="{StaticResource StoryBoardBeginTimeP4}"
                                RepeatBehavior="Forever"
                                Duration="{StaticResource StoryBoardDuration}">

                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime1}"
                                    Storyboard.TargetName="p4"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle1}"
                                    To="{StaticResource ParticleEndAngle1}"
                                    Duration="{StaticResource ParticleDuration1}" />
                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime2}"
                                    Storyboard.TargetName="p4"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle2}"
                                    To="{StaticResource ParticleEndAngle2}"
                                    Duration="{StaticResource ParticleDuration2}" />
                                <DoubleAnimation
                                    BeginTime="{StaticResource ParticleBeginTime3}"
                                    Storyboard.TargetName="p4"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                    From="{StaticResource ParticleBeginAngle3}"
                                    To="{StaticResource ParticleEndAngle3}"
                                    Duration="{StaticResource ParticleDuration3}" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Canvas.Triggers>
            <Border
                x:Name="p0"
                Background="{StaticResource ParticleBackgroundColor}"
                Opacity="{StaticResource ParticleOpacity}">
                <Border.RenderTransform>
                    <RotateTransform />
                </Border.RenderTransform>
                <Border.RenderTransformOrigin>
                    <Point X="{StaticResource RotationPointX}" Y="{StaticResource RotationPointY}" />
                </Border.RenderTransformOrigin>
                <Ellipse Style="{StaticResource EllipseStyle}">
                    <Ellipse.RenderTransform>
                        <TransformGroup>
                            <TranslateTransform X="{StaticResource StartingPointX}" Y="{StaticResource StartingPointY}" />
                            <RotateTransform Angle="{StaticResource ParticleOriginAngleP0}" />
                        </TransformGroup>
                    </Ellipse.RenderTransform>
                </Ellipse>
            </Border>
            <Border
                x:Name="p1"
                Background="{StaticResource ParticleBackgroundColor}"
                Opacity="{StaticResource ParticleOpacity}">
                <Border.RenderTransform>
                    <RotateTransform />
                </Border.RenderTransform>
                <Border.RenderTransformOrigin>
                    <Point X="{StaticResource RotationPointX}" Y="{StaticResource RotationPointY}" />
                </Border.RenderTransformOrigin>
                <Ellipse Style="{StaticResource EllipseStyle}">
                    <Ellipse.RenderTransform>
                        <TransformGroup>
                            <TranslateTransform X="{StaticResource StartingPointX}" Y="{StaticResource StartingPointY}" />
                            <RotateTransform Angle="{StaticResource ParticleOriginAngleP1}" />
                        </TransformGroup>
                    </Ellipse.RenderTransform>
                </Ellipse>
            </Border>
            <Border
                x:Name="p2"
                Background="{StaticResource ParticleBackgroundColor}"
                Opacity="{StaticResource ParticleOpacity}">
                <Border.RenderTransform>
                    <RotateTransform />
                </Border.RenderTransform>
                <Border.RenderTransformOrigin>
                    <Point X="{StaticResource RotationPointX}" Y="{StaticResource RotationPointY}" />
                </Border.RenderTransformOrigin>
                <Ellipse Style="{StaticResource EllipseStyle}">
                    <Ellipse.RenderTransform>
                        <TransformGroup>
                            <TranslateTransform X="{StaticResource StartingPointX}" Y="{StaticResource StartingPointY}" />
                            <RotateTransform Angle="{StaticResource ParticleOriginAngleP2}" />
                        </TransformGroup>
                    </Ellipse.RenderTransform>
                </Ellipse>
            </Border>
            <Border
                x:Name="p3"
                Background="{StaticResource ParticleBackgroundColor}"
                Opacity="{StaticResource ParticleOpacity}">
                <Border.RenderTransform>
                    <RotateTransform />
                </Border.RenderTransform>
                <Border.RenderTransformOrigin>
                    <Point X="{StaticResource RotationPointX}" Y="{StaticResource RotationPointY}" />
                </Border.RenderTransformOrigin>
                <Ellipse Style="{StaticResource EllipseStyle}">
                    <Ellipse.RenderTransform>
                        <TransformGroup>
                            <TranslateTransform X="{StaticResource StartingPointX}" Y="{StaticResource StartingPointY}" />
                            <RotateTransform Angle="{StaticResource ParticleOriginAngleP3}" />
                        </TransformGroup>
                    </Ellipse.RenderTransform>
                </Ellipse>
            </Border>
            <Border
                x:Name="p4"
                Background="{StaticResource ParticleBackgroundColor}"
                Opacity="{StaticResource ParticleOpacity}">
                <Border.RenderTransform>
                    <RotateTransform />
                </Border.RenderTransform>
                <Border.RenderTransformOrigin>
                    <Point X="{StaticResource RotationPointX}" Y="{StaticResource RotationPointY}" />
                </Border.RenderTransformOrigin>
                <Ellipse Style="{StaticResource EllipseStyle}">
                    <Ellipse.RenderTransform>
                        <TransformGroup>
                            <TranslateTransform X="{StaticResource StartingPointX}" Y="{StaticResource StartingPointY}" />
                            <RotateTransform Angle="{StaticResource ParticleOriginAngleP4}" />
                        </TransformGroup>
                    </Ellipse.RenderTransform>
                </Ellipse>
            </Border>
        </Canvas>
    </Grid>
</UserControl>