Compare commits
No commits in common. "708180dc8e8e8e07a7e611e36e1d8c0872e67d82" and "f94052e54b49285d3c59e9c1b74de6ee91b70d22" have entirely different histories.
708180dc8e
...
f94052e54b
@ -10,11 +10,6 @@ namespace FocusVolumeControl.AudioSessions
|
|||||||
{
|
{
|
||||||
public static float GetAdjustedVolume(float startingVolume, int step, int ticks)
|
public static float GetAdjustedVolume(float startingVolume, int step, int ticks)
|
||||||
{
|
{
|
||||||
if(step <= 0)
|
|
||||||
{
|
|
||||||
step = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
var level = startingVolume;
|
var level = startingVolume;
|
||||||
|
|
||||||
level += 0.01f * step * ticks;
|
level += 0.01f * step * ticks;
|
||||||
|
@ -26,13 +26,20 @@ public class DialAction : EncoderBase
|
|||||||
{
|
{
|
||||||
PluginSettings instance = new PluginSettings();
|
PluginSettings instance = new PluginSettings();
|
||||||
instance.FallbackBehavior = FallbackBehavior.SystemSounds;
|
instance.FallbackBehavior = FallbackBehavior.SystemSounds;
|
||||||
instance.StepSize = 1;
|
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginSettings settings;
|
private PluginSettings settings;
|
||||||
|
|
||||||
|
IntPtr _foregroundWindowChangedEvent;
|
||||||
|
Native.WinEventDelegate _delegate;
|
||||||
|
|
||||||
AudioHelper _audioHelper = new AudioHelper();
|
AudioHelper _audioHelper = new AudioHelper();
|
||||||
|
|
||||||
|
Thread _thread;
|
||||||
|
Dispatcher _dispatcher;
|
||||||
|
|
||||||
UIState _previousState;
|
UIState _previousState;
|
||||||
|
|
||||||
public DialAction(ISDConnection connection, InitialPayload payload) : base(connection, payload)
|
public DialAction(ISDConnection connection, InitialPayload payload) : base(connection, payload)
|
||||||
@ -47,7 +54,19 @@ public class DialAction : EncoderBase
|
|||||||
settings = payload.Settings.ToObject<PluginSettings>();
|
settings = payload.Settings.ToObject<PluginSettings>();
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowChangedEventLoop.Instance.WindowChanged += WindowChanged;
|
_thread = new Thread(() =>
|
||||||
|
{
|
||||||
|
Logger.Instance.LogMessage(TracingLevel.DEBUG, "Registering for events");
|
||||||
|
_delegate = new Native.WinEventDelegate(WinEventProc);
|
||||||
|
_foregroundWindowChangedEvent = Native.RegisterForForegroundWindowChangedEvent(_delegate);
|
||||||
|
|
||||||
|
Logger.Instance.LogMessage(TracingLevel.DEBUG, "Starting Dispatcher");
|
||||||
|
_dispatcher = Dispatcher.CurrentDispatcher;
|
||||||
|
Dispatcher.Run();
|
||||||
|
Logger.Instance.LogMessage(TracingLevel.DEBUG, "Dispatcher Stopped");
|
||||||
|
});
|
||||||
|
_thread.SetApartmentState(ApartmentState.STA);
|
||||||
|
_thread.Start();
|
||||||
|
|
||||||
var session = _audioHelper.GetActiveSession(settings.FallbackBehavior);
|
var session = _audioHelper.GetActiveSession(settings.FallbackBehavior);
|
||||||
_ = UpdateStateIfNeeded(session);
|
_ = UpdateStateIfNeeded(session);
|
||||||
@ -55,15 +74,19 @@ public class DialAction : EncoderBase
|
|||||||
|
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
//Logger.Instance.LogMessage(TracingLevel.DEBUG, "Disposing");
|
Logger.Instance.LogMessage(TracingLevel.DEBUG, "Disposing");
|
||||||
WindowChangedEventLoop.Instance.WindowChanged -= WindowChanged;
|
if (_foregroundWindowChangedEvent != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
Native.UnhookWinEvent(_foregroundWindowChangedEvent);
|
||||||
|
}
|
||||||
|
_dispatcher.InvokeShutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async void DialDown(DialPayload payload)
|
public override async void DialDown(DialPayload payload)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//Logger.Instance.LogMessage(TracingLevel.INFO, "Dial Down");
|
Logger.Instance.LogMessage(TracingLevel.INFO, "Dial Down");
|
||||||
await ToggleMuteAsync();
|
await ToggleMuteAsync();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -77,7 +100,7 @@ public class DialAction : EncoderBase
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//Logger.Instance.LogMessage(TracingLevel.INFO, "Touch Press");
|
Logger.Instance.LogMessage(TracingLevel.INFO, "Touch Press");
|
||||||
if (payload.IsLongPress)
|
if (payload.IsLongPress)
|
||||||
{
|
{
|
||||||
await ResetAllAsync();
|
await ResetAllAsync();
|
||||||
@ -97,7 +120,7 @@ public class DialAction : EncoderBase
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//Logger.Instance.LogMessage(TracingLevel.INFO, "Dial Rotate");
|
Logger.Instance.LogMessage(TracingLevel.INFO, "Dial Rotate");
|
||||||
//dial rotated. ticks positive for right, negative for left
|
//dial rotated. ticks positive for right, negative for left
|
||||||
var activeSession = _audioHelper.Current;
|
var activeSession = _audioHelper.Current;
|
||||||
if (activeSession != null)
|
if (activeSession != null)
|
||||||
@ -235,7 +258,7 @@ public class DialAction : EncoderBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void WindowChanged()
|
public void WinEventProc(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -243,7 +266,7 @@ public class DialAction : EncoderBase
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Logger.Instance.LogMessage(TracingLevel.ERROR, $"Unexpected Error in Window Down:\n {ex}");
|
Logger.Instance.LogMessage(TracingLevel.ERROR, $"Unexpected Error in DialDown:\n {ex}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,6 @@
|
|||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="UI\UIState.cs" />
|
<Compile Include="UI\UIState.cs" />
|
||||||
<Compile Include="UI\ValueWithOpacity.cs" />
|
<Compile Include="UI\ValueWithOpacity.cs" />
|
||||||
<Compile Include="WindowChangedEventLoop.cs" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
using BarRaider.SdTools;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Threading;
|
|
||||||
|
|
||||||
namespace FocusVolumeControl
|
|
||||||
{
|
|
||||||
internal class WindowChangedEventLoop
|
|
||||||
{
|
|
||||||
private static readonly Lazy<WindowChangedEventLoop> _lazy = new Lazy<WindowChangedEventLoop>(() => new WindowChangedEventLoop());
|
|
||||||
public static WindowChangedEventLoop Instance => _lazy.Value;
|
|
||||||
|
|
||||||
readonly Thread _thread;
|
|
||||||
Dispatcher _dispatcher;
|
|
||||||
|
|
||||||
IntPtr _foregroundWindowChangedEvent;
|
|
||||||
Native.WinEventDelegate _delegate;
|
|
||||||
|
|
||||||
private WindowChangedEventLoop()
|
|
||||||
{
|
|
||||||
_thread = new Thread(() =>
|
|
||||||
{
|
|
||||||
Logger.Instance.LogMessage(TracingLevel.DEBUG, "Starting Window Changed Event Loop");
|
|
||||||
_delegate = new Native.WinEventDelegate(WinEventProc);
|
|
||||||
_foregroundWindowChangedEvent = Native.RegisterForForegroundWindowChangedEvent(_delegate);
|
|
||||||
|
|
||||||
_dispatcher = Dispatcher.CurrentDispatcher;
|
|
||||||
Dispatcher.Run();
|
|
||||||
Logger.Instance.LogMessage(TracingLevel.DEBUG, "Window Changed Event Loop Stopped");
|
|
||||||
});
|
|
||||||
_thread.SetApartmentState(ApartmentState.STA);
|
|
||||||
_thread.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public event Action WindowChanged;
|
|
||||||
|
|
||||||
private void WinEventProc(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
WindowChanged?.Invoke();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Logger.Instance.LogMessage(TracingLevel.ERROR, $"Unexpected Error in EventHandler:\n {ex}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user