Readded requalizer, started UI for the equalizer

This commit is contained in:
DarthAffe committed 2017-08-13 00:27:12 +02:00
1 parent cfff1671c4
commit 478298fac4
18 files changed
+370 -87

No files matched your search

@@ -41,7 +41,7 @@
<controls:Formular Grid.Column="2">
<Label controls:Formular.IsLabel="True" Content="Scale:" />
<Slider controls:Formular.Fill="True" Minimum="1" Maximum="10" IsSnapToTickEnabled="True" TickFrequency="0.5" TickPlacement="BottomRight"
<Slider controls:Formular.Fill="True" Minimum="1" Maximum="20" IsSnapToTickEnabled="True" TickFrequency="0.5" TickPlacement="BottomRight"
Value="{Binding Scale}" />
</controls:Formular>
@@ -2,10 +2,11 @@
using System.Diagnostics;
using System.Reflection;
using KeyboardAudioVisualizer.Helper;
using RGB.NET.Core;
namespace KeyboardAudioVisualizer.UI
{
public class ConfigurationViewModel
public class ConfigurationViewModel : AbstractBindable
{
#region Properties & Fields
@@ -0,0 +1,101 @@
using System.Windows;
using System.Windows.Controls;
using KeyboardAudioVisualizer.AudioProcessing.Equalizer;
namespace KeyboardAudioVisualizer.UI.Visualization
{
//[TemplatePart(Name = "PART_Grips", Type = typeof(Canvas))]
public class EqualizerVisualizer : Control
{
#region DependencyProperties
// ReSharper disable InconsistentNaming
public static readonly DependencyProperty EqualizerProperty = DependencyProperty.Register(
"Equalizer", typeof(IEqualizer), typeof(EqualizerVisualizer), new PropertyMetadata(default(IEqualizer)));
public IEqualizer Equalizer
{
get => (IEqualizer)GetValue(EqualizerProperty);
set => SetValue(EqualizerProperty, value);
}
public static readonly DependencyProperty ReferenceLevelProperty = DependencyProperty.Register(
"ReferenceLevel", typeof(double), typeof(EqualizerVisualizer), new PropertyMetadata(default(double)));
public double ReferenceLevel
{
get => (double)GetValue(ReferenceLevelProperty);
set => SetValue(ReferenceLevelProperty, value);
}
// ReSharper restore InconsistentNaming
#endregion
#region Properties & Fields
//private Canvas _canvas;
#endregion
#region Constructors
//public EqualizerVisualizer()
//{
// SizeChanged += (sender, args) => Update();
// Update();
//}
#endregion
#region Methods
//public override void OnApplyTemplate()
//{
// base.OnApplyTemplate();
// _canvas = GetTemplateChild("PART_Grips") as Canvas;
//}
//private static void EqualizerChanged(DependencyObject dependencyObject,
// DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
//{
// EqualizerVisualizer visualizer = dependencyObject as EqualizerVisualizer;
// if (visualizer == null) return;
// void BandsChanged(object sender, NotifyCollectionChangedEventArgs args) => visualizer.Update();
// if (dependencyPropertyChangedEventArgs.OldValue is IEqualizer oldEqualizer)
// oldEqualizer.Bands.CollectionChanged -= BandsChanged;
// if (dependencyPropertyChangedEventArgs.NewValue is IEqualizer newEqualizer)
// newEqualizer.Bands.CollectionChanged += BandsChanged;
//}
//private void Update()
//{
// if (_canvas == null) return;
// void OnBandChanged(object sender, PropertyChangedEventArgs args) => Update();
// foreach (object child in _canvas.Children)
// {
// EqualizerBand band = (child as ContentControl)?.Content as EqualizerBand;
// if (band == null) continue;
// band.PropertyChanged -= OnBandChanged;
// }
// _canvas.Children.Clear();
// foreach (EqualizerBand band in Equalizer.Bands)
// {
// ContentControl ctrl = new ContentControl();
// ctrl.Content = band;
// _canvas.Children.Add(ctrl);
// }
//}
#endregion
}
}
@@ -2,19 +2,24 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:styles="clr-namespace:KeyboardAudioVisualizer.Styles"
xmlns:visualizationProvider="clr-namespace:KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider"
xmlns:visualization="clr-namespace:KeyboardAudioVisualizer.UI.Visualization">
xmlns:visualization="clr-namespace:KeyboardAudioVisualizer.UI.Visualization"
xmlns:equalizer="clr-namespace:KeyboardAudioVisualizer.AudioProcessing.Equalizer"
xmlns:converter="clr-namespace:KeyboardAudioVisualizer.Converter">
<styles:CachedResourceDictionary.MergedDictionaries>
<styles:CachedResourceDictionary Source="/KeyboardAudioVisualizer;component/Styles/FrameworkElement.xaml" />
<styles:CachedResourceDictionary Source="/KeyboardAudioVisualizer;component/Styles/Theme.xaml" />
</styles:CachedResourceDictionary.MergedDictionaries>
<converter:OffsetToPosXConverter x:Key="OffsetToPosXConverter" />
<converter:ValueToPosYConverter x:Key="ValueToPosYConverter" />
<Style x:Key="StyleFrequencyBarsVisualizer"
BasedOn="{StaticResource StyleFrameworkElement}"
TargetType="{x:Type visualization:FrequencyBarsVisualizer}">
<Setter Property="SnapsToDevicePixels" Value="False" />
<Setter Property="UseLayoutRounding" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type visualization:FrequencyBarsVisualizer}">
@@ -24,8 +29,87 @@
</Setter>
</Style>
<Style x:Key="StyleEqualizerVisualizer"
BasedOn="{StaticResource StyleFrameworkElement}"
TargetType="{x:Type visualization:EqualizerVisualizer}">
<Setter Property="SnapsToDevicePixels" Value="False" />
<Setter Property="UseLayoutRounding" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type visualization:EqualizerVisualizer}">
<Grid Background="Transparent">
<ItemsControl x:Name="PART_Grips" Opacity="0" Margin="-12,-12,12,12"
Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Equalizer.IsEnabled, Converter={StaticResource BoolToVisibilityConverter}}"
ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Equalizer.Bands}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="equalizer:EqualizerBand">
<Border Width="24" Height="24" CornerRadius="12"
BorderThickness="3" BorderBrush="{StaticResource BrushEqualizerBorder}"
Background="{StaticResource BrushEqualizerBackground}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left">
<Setter.Value>
<MultiBinding Converter="{StaticResource OffsetToPosXConverter}">
<Binding Path="Offset" />
<Binding Path="ActualWidth" ElementName="PART_Grips" />
</MultiBinding>
</Setter.Value>
</Setter>
<Setter Property="Canvas.Top">
<Setter.Value>
<MultiBinding Converter="{StaticResource ValueToPosYConverter}">
<Binding Path="Value" />
<Binding Path="ActualHeight" ElementName="PART_Grips" />
<Binding Path="ReferenceLevel" RelativeSource="{RelativeSource AncestorType={x:Type visualization:EqualizerVisualizer}}" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:0.2" To="1"
Storyboard.TargetName="PART_Grips" Storyboard.TargetProperty="Opacity" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:0.25" To="0"
Storyboard.TargetName="PART_Grips" Storyboard.TargetProperty="Opacity" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<DataTemplate DataType="{x:Type visualizationProvider:FrequencyBarsVisualizationProvider}">
<visualization:FrequencyBarsVisualizer Style="{StaticResource StyleFrequencyBarsVisualizer}" VisualizationProvider="{Binding}" />
<Grid>
<visualization:FrequencyBarsVisualizer Style="{StaticResource StyleFrequencyBarsVisualizer}" VisualizationProvider="{Binding}" />
<visualization:EqualizerVisualizer Style="{StaticResource StyleEqualizerVisualizer}" Equalizer="{Binding Equalizer}" ReferenceLevel="{Binding Configuration.ReferenceLevel}" />
</Grid>
</DataTemplate>
</styles:CachedResourceDictionary>