Skip to content

Commit

Permalink
DynamicLightingManager will now disable OS Ambient Lighting setting o…
Browse files Browse the repository at this point in the history
…n startup and restore on close
  • Loading branch information
Valkirie committed Dec 26, 2024
1 parent 9e42eef commit c507890
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 7 deletions.
44 changes: 37 additions & 7 deletions HandheldCompanion/Managers/DynamicLightingManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using HandheldCompanion.Misc;
using HandheldCompanion.Models;
using HandheldCompanion.Shared;
using Microsoft.Win32;
using SharpDX;
using SharpDX.Direct3D9;
using System;
Expand Down Expand Up @@ -44,6 +45,9 @@ public static class DynamicLightingManager

private static bool VerticalBlackBarDetectionEnabled;

private static bool OSAmbientLightingEnabled = false;
private const string OSAmbientLightingEnabledKey = "AmbientLightingEnabled";

static DynamicLightingManager()
{
// Keep track of left and right LEDs history
Expand All @@ -67,9 +71,6 @@ public static void Start()
if (IsInitialized)
return;

IsInitialized = true;
Initialized?.Invoke();

// manage events
SettingsManager.SettingValueChanged += SettingsManager_SettingValueChanged;
MultimediaManager.DisplaySettingsChanged += MultimediaManager_DisplaySettingsChanged;
Expand All @@ -86,6 +87,13 @@ public static void Start()
MultimediaManager_DisplaySettingsChanged(MultimediaManager.PrimaryDesktop, MultimediaManager.PrimaryDesktop.GetResolution());
}

// store and disable system setting AmbientLightingEnabled
OSAmbientLightingEnabled = GetAmbientLightingEnabled();
SetAmbientLightingEnabled(false);

IsInitialized = true;
Initialized?.Invoke();

LogManager.LogInformation("{0} has started", "DynamicLightingManager");
}

Expand All @@ -94,19 +102,41 @@ public static void Stop()
if (!IsInitialized)
return;

StopAmbilight();

ReleaseDirect3DDevice();

// manage events
SettingsManager.SettingValueChanged -= SettingsManager_SettingValueChanged;
MultimediaManager.DisplaySettingsChanged -= MultimediaManager_DisplaySettingsChanged;

// restore system setting AmbientLightingEnabled
SetAmbientLightingEnabled(OSAmbientLightingEnabled);
StopAmbilight();
ReleaseDirect3DDevice();

IsInitialized = false;

LogManager.LogInformation("{0} has stopped", "DynamicLightingManager");
}

private static bool GetAmbientLightingEnabled()
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Lighting"))
if (key != null)
return Convert.ToBoolean(key.GetValue(OSAmbientLightingEnabledKey));

return false;
}

private static void SetAmbientLightingEnabled(bool enabled)
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Lighting", writable: true))
{
if (key != null)
{
// disable
key.SetValue(OSAmbientLightingEnabledKey, enabled ? 1 : 0);
}
}
}

private static void MultimediaManager_DisplaySettingsChanged(DesktopScreen desktopScreen, ScreenResolution resolution)
{
// Update the screen width and height values when display changes
Expand Down
1 change: 1 addition & 0 deletions HandheldCompanion/Views/Windows/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,7 @@ private void Window_Closed(object sender, EventArgs e)
ProfileManager.Stop();
LayoutManager.Stop();
SystemManager.Stop();
DynamicLightingManager.Stop();
ProcessManager.Stop();
ToastManager.Stop();
TaskManager.Stop();
Expand Down

0 comments on commit c507890

Please sign in to comment.