1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

Re-enabled timeline scrolling and fixed the issues with it

This commit is contained in:
SpoinkyNL 2020-01-09 22:01:41 +01:00
parent 0958c3af9f
commit ecee78141d
6 changed files with 47 additions and 24 deletions

View File

@ -21,7 +21,7 @@ namespace Artemis.Core.Models.Profile.LayerProperties
/// <summary>
/// The value of the property with keyframes applied
/// </summary>
public T CurrentValue => (T) KeyframeEngine.GetCurrentValue();
public T CurrentValue => KeyframeEngine != null ? (T) KeyframeEngine.GetCurrentValue() : Value;
/// <summary>
/// A list of keyframes defining different values of the property in time, this list contains the strongly typed

View File

@ -41,40 +41,51 @@
</Grid>
<!-- Right side -->
<Grid Grid.Column="1"
MouseDown="{s:Action RightGridMouseDown}"
MouseMove="{s:Action RightGridMouseMove}">
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="56" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- Caret -->
<Canvas ZIndex="1"
Margin="{Binding TimeCaretPosition}"
Cursor="SizeWE"
MouseEnter="{s:Action CaretMouseEnter}"
MouseLeave="{s:Action CaretMouseLeave}">
<Polygon Points="-10,0 0,20, 10,00" Fill="{StaticResource SecondaryAccentBrush}" />
<Line X1="0" X2="0" Y1="0" Y2="{Binding ActualHeight, ElementName=ContainerGrid}" StrokeThickness="2" Stroke="{StaticResource SecondaryAccentBrush}" />
</Canvas>
<!-- Timeline header -->
<ScrollViewer Grid.Row="0" x:Name="TimelineHeaderScrollViewer" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
<StackPanel>
<ScrollViewer Grid.Row="0" x:Name="TimelineHeaderScrollViewer" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" ScrollChanged="TimelineScrollChanged">
<Grid MouseDown="{s:Action TimelineMouseDown}"
MouseMove="{s:Action TimelineMouseMove}"
Background="{DynamicResource MaterialDesignCardBackground}">
<!-- Caret -->
<Canvas ZIndex="1"
Margin="{Binding TimeCaretPosition}"
Cursor="SizeWE"
MouseEnter="{s:Action CaretMouseEnter}"
MouseLeave="{s:Action CaretMouseLeave}">
<Polygon Points="-10,0 0,20, 10,00" Fill="{StaticResource SecondaryAccentBrush}" />
<Line X1="0" X2="0" Y1="0" Y2="{Binding ActualHeight, ElementName=ContainerGrid}" StrokeThickness="2" Stroke="{StaticResource SecondaryAccentBrush}" />
</Canvas>
<!-- Time -->
<timeline:PropertyTimelineHeader Margin="0 25 0 0"
Fill="{DynamicResource MaterialDesignBody}"
PixelsPerSecond="{Binding PixelsPerSecond}"
HorizontalOffset="{Binding ContentHorizontalOffset, ElementName=TimelineHeaderScrollViewer}"
VisibleWidth="{Binding ActualWidth, ElementName=TimelineHeaderScrollViewer}" />
</StackPanel>
VisibleWidth="{Binding ActualWidth, ElementName=TimelineHeaderScrollViewer}"
Width="{Binding ActualWidth, ElementName=PropertyTimeLine}" />
</Grid>
</ScrollViewer>
<!-- Timeline rails -->
<ScrollViewer Grid.Row="1" x:Name="TimelineRailsScrollViewer" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden">
<ContentControl s:View.Model="{Binding PropertyTimeline}" />
<ScrollViewer Grid.Row="1" x:Name="TimelineRailsScrollViewer" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden" ScrollChanged="TimelineScrollChanged">
<Grid MouseDown="{s:Action TimelineMouseDown}"
MouseMove="{s:Action TimelineMouseMove}">
<Canvas ZIndex="1"
Margin="{Binding TimeCaretPosition}"
Cursor="SizeWE"
MouseEnter="{s:Action CaretMouseEnter}"
MouseLeave="{s:Action CaretMouseLeave}">
<Line X1="0" X2="0" Y1="0" Y2="{Binding ActualHeight, ElementName=ContainerGrid}" StrokeThickness="2" Stroke="{StaticResource SecondaryAccentBrush}" />
</Canvas>
<ContentControl x:Name="PropertyTimeLine" s:View.Model="{Binding PropertyTimeline}" />
</Grid>
</ScrollViewer>
</Grid>

View File

@ -13,5 +13,16 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties
}
// Keeping the scroll viewers in sync is up to the view, not a viewmodel concern
private void TimelineScrollChanged(object sender, ScrollChangedEventArgs e)
{
if (sender == TimelineHeaderScrollViewer)
{
TimelineRailsScrollViewer.ScrollToHorizontalOffset(e.HorizontalOffset);
}
else if (sender == TimelineRailsScrollViewer)
{
TimelineHeaderScrollViewer.ScrollToHorizontalOffset(e.HorizontalOffset);
}
}
}
}

View File

@ -96,7 +96,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties
private bool _mouseOverCaret;
private int _pixelsPerSecond;
public void RightGridMouseDown(object sender, MouseButtonEventArgs e)
public void TimelineMouseDown(object sender, MouseButtonEventArgs e)
{
// TODO Preserve mouse offset
_caretStartMouseStartOffset = e.GetPosition((IInputElement) sender).X - TimeCaretPosition.Left;
@ -113,10 +113,10 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties
_mouseOverCaret = false;
}
public void RightGridMouseMove(object sender, MouseEventArgs e)
public void TimelineMouseMove(object sender, MouseEventArgs e)
{
if (_mouseOverCaret && e.LeftButton == MouseButtonState.Pressed)
TimeCaretPosition = new Thickness(Math.Max(0, e.GetPosition((IInputElement) sender).X), 0, 0, 0);
TimeCaretPosition = new Thickness(Math.Max(0, e.GetPosition((IInputElement) sender).X + _caretStartMouseStartOffset), 0, 0, 0);
}
#endregion

View File

@ -60,7 +60,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline
protected override void OnRender(DrawingContext drawingContext)
{
SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased);
base.OnRender(drawingContext);
UpdateTimeScale();

View File

@ -64,6 +64,8 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline
{
foreach (var viewModel in PropertyTrackViewModels)
viewModel.UpdateKeyframes(LayerPropertiesViewModel.PixelsPerSecond);
UpdateEndTime();
}
/// <summary>