Skip to content

Commit

Permalink
feat(composition): add easing functions UI tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ahmed605 committed Sep 21, 2024
1 parent 01834b1 commit 4616ed2
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,18 @@
<CheckBox x:Name="isForeverCheckBox" Content="Is forever?" />
<CheckBox x:Name="hasFrameAtZeroCheckBox" Content="Has a keyframe at 0.0f?" />
<muxc:NumberBox x:Name="iterationCountNumberBox" Header="Iteration count" Value="1" />
<ComboBox x:Name="easingFunctionBox" Header="Easing Function" SelectedIndex="0">
<ComboBoxItem Content="Default (Cubic Bezier)" />
<ComboBoxItem Content="Linear" />
<ComboBoxItem Content="Back" />
<ComboBoxItem Content="Bounce" />
<ComboBoxItem Content="Circle" />
<ComboBoxItem Content="Elastic" />
<ComboBoxItem Content="Exponential" />
<ComboBoxItem Content="Power" />
<ComboBoxItem Content="Sine"/>
<ComboBoxItem Content="Step"/>
</ComboBox>
<Button Content="Start" Click="OnStartAnimation" />
<Button Content="Stop" Click="OnStopAnimation" />
<Border x:Name="border" Width="100" Height="100" Background="Red" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,35 @@ public Vector3KeyFrameAnimationSample()

private void OnStartAnimation(object sender, RoutedEventArgs args)
{
var animation = _borderVisual.Compositor.CreateVector3KeyFrameAnimation();
var compositor = _borderVisual.Compositor;

var easingFunction = easingFunctionBox.SelectedIndex switch
{
0 => Compositor.GetDefaultEasingFunction(),
1 => CompositionEasingFunction.CreateLinearEasingFunction(compositor),
2 => CompositionEasingFunction.CreateBackEasingFunction(compositor, CompositionEasingFunctionMode.InOut, 0.9f),
3 => CompositionEasingFunction.CreateBounceEasingFunction(compositor, CompositionEasingFunctionMode.Out, 3, 2),
4 => CompositionEasingFunction.CreateCircleEasingFunction(compositor, CompositionEasingFunctionMode.InOut),
5 => CompositionEasingFunction.CreateElasticEasingFunction(compositor, CompositionEasingFunctionMode.Out, 2, 1),
6 => CompositionEasingFunction.CreateExponentialEasingFunction(compositor, CompositionEasingFunctionMode.Out, 6),
7 => CompositionEasingFunction.CreatePowerEasingFunction(compositor, CompositionEasingFunctionMode.Out, 10),
8 => CompositionEasingFunction.CreateSineEasingFunction(compositor, CompositionEasingFunctionMode.InOut),
9 => CompositionEasingFunction.CreateStepEasingFunction(compositor, 3),
_ => Compositor.GetDefaultEasingFunction()
};

var animation = compositor.CreateVector3KeyFrameAnimation();
var y = _borderVisual.Offset.Y;
var maxX = _pageVisual.Size.X - _borderVisual.Size.X;
if ((bool)hasFrameAtZeroCheckBox.IsChecked)
{
animation.InsertKeyFrame(0.0f, new Vector3(0.0f, y, 0.0f));
animation.InsertKeyFrame(0.0f, new Vector3(0.0f, y, 0.0f), easingFunction);
}

animation.InsertKeyFrame(0.5f, new Vector3(maxX / 4.0f, y, 0.0f));
animation.InsertKeyFrame(0.6f, new Vector3(maxX / 4.0f, y, 0.0f));
animation.InsertKeyFrame(1.0f, new Vector3(maxX, y, 0.0f));
animation.Duration = TimeSpan.FromSeconds(1);
animation.InsertKeyFrame(0.5f, new Vector3(maxX / 4.0f, y, 0.0f), easingFunction);
animation.InsertKeyFrame(0.6f, new Vector3(maxX / 4.0f, y, 0.0f), easingFunction);
animation.InsertKeyFrame(1.0f, new Vector3(maxX, y, 0.0f), easingFunction);
animation.Duration = TimeSpan.FromSeconds(2);
animation.IterationCount = (int)iterationCountNumberBox.Value;
animation.IterationBehavior = (bool)isForeverCheckBox.IsChecked ? AnimationIterationBehavior.Forever : AnimationIterationBehavior.Count;
_borderVisual.StartAnimation("Offset", animation);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ internal override void Paint(in Visual.PaintingSession session)
fill = wrapper.WrappedBrush;
}

if (Geometry.TrimStart != default || Geometry.TrimEnd != default)
if (Geometry is not null && (Geometry.TrimStart != default || Geometry.TrimEnd != default))
{
fillPaint.PathEffect = SKPathEffect.CreateTrim(Geometry.TrimStart, Geometry.TrimEnd);
}
Expand Down Expand Up @@ -67,7 +67,7 @@ internal override void Paint(in Visual.PaintingSession session)
strokePaint.PathEffect = SKPathEffect.CreateDash(strokeDashArray.ToEvenArray(), 0);
}

if (Geometry.TrimStart != default || Geometry.TrimEnd != default)
if (Geometry is not null && (Geometry.TrimStart != default || Geometry.TrimEnd != default))
{
var pathEffect = SKPathEffect.CreateTrim(Geometry.TrimStart, Geometry.TrimEnd);
if (strokePaint.PathEffect is SKPathEffect effect)
Expand Down

0 comments on commit 4616ed2

Please sign in to comment.