LenovoLegionToolkit
76 строк · 2.4 Кб
1using System;2using System.Threading.Tasks;3using LenovoLegionToolkit.Lib.Extensions;4using LenovoLegionToolkit.Lib.System;5using LenovoLegionToolkit.Lib.Utils;6
7namespace LenovoLegionToolkit.Lib.Features;8
9public class HDRFeature : IFeature<HDRState>10{
11public Task<bool> IsSupportedAsync()12{13if (Log.Instance.IsTraceEnabled)14Log.Instance.Trace($"Checking HDR support...");15
16var display = InternalDisplay.Get();17if (display is null)18{19if (Log.Instance.IsTraceEnabled)20Log.Instance.Trace($"Built in display not found");21
22return Task.FromResult(false);23}24
25var isSupported = display.GetAdvancedColorInfo().AdvancedColorSupported;26
27if (Log.Instance.IsTraceEnabled)28Log.Instance.Trace($"HDR support: {isSupported}");29
30return Task.FromResult(isSupported);31}32
33public Task<bool> IsHdrBlockedAsync()34{35var display = InternalDisplay.Get() ?? throw new InvalidOperationException("Built in display not found");36
37var result = display.GetAdvancedColorInfo().AdvancedColorForceDisabled;38return Task.FromResult(result);39}40
41public Task<HDRState[]> GetAllStatesAsync() => Task.FromResult(Enum.GetValues<HDRState>());42
43public Task<HDRState> GetStateAsync()44{45if (Log.Instance.IsTraceEnabled)46Log.Instance.Trace($"Getting current HDR state...");47
48var display = InternalDisplay.Get() ?? throw new InvalidOperationException("Built in display not found");49
50var result = display.GetAdvancedColorInfo().AdvancedColorEnabled ? HDRState.On : HDRState.Off;51
52if (Log.Instance.IsTraceEnabled)53Log.Instance.Trace($"HDR is {result}");54
55return Task.FromResult(result);56}57
58public async Task SetStateAsync(HDRState state)59{60var currentState = await GetStateAsync().ConfigureAwait(false);61
62if (currentState == state)63{64if (Log.Instance.IsTraceEnabled)65Log.Instance.Trace($"HDR already set to {state}");66return;67}68
69var display = InternalDisplay.Get() ?? throw new InvalidOperationException("Built in display not found");70
71if (Log.Instance.IsTraceEnabled)72Log.Instance.Trace($"Setting display HDR to {state}");73
74display.SetAdvancedColorState(state == HDRState.On);75}76}
77