LenovoLegionToolkit

Форк
0
76 строк · 2.4 Кб
1
using System;
2
using System.Threading.Tasks;
3
using LenovoLegionToolkit.Lib.Extensions;
4
using LenovoLegionToolkit.Lib.System;
5
using LenovoLegionToolkit.Lib.Utils;
6

7
namespace LenovoLegionToolkit.Lib.Features;
8

9
public class HDRFeature : IFeature<HDRState>
10
{
11
    public Task<bool> IsSupportedAsync()
12
    {
13
        if (Log.Instance.IsTraceEnabled)
14
            Log.Instance.Trace($"Checking HDR support...");
15

16
        var display = InternalDisplay.Get();
17
        if (display is null)
18
        {
19
            if (Log.Instance.IsTraceEnabled)
20
                Log.Instance.Trace($"Built in display not found");
21

22
            return Task.FromResult(false);
23
        }
24

25
        var isSupported = display.GetAdvancedColorInfo().AdvancedColorSupported;
26

27
        if (Log.Instance.IsTraceEnabled)
28
            Log.Instance.Trace($"HDR support: {isSupported}");
29

30
        return Task.FromResult(isSupported);
31
    }
32

33
    public Task<bool> IsHdrBlockedAsync()
34
    {
35
        var display = InternalDisplay.Get() ?? throw new InvalidOperationException("Built in display not found");
36

37
        var result = display.GetAdvancedColorInfo().AdvancedColorForceDisabled;
38
        return Task.FromResult(result);
39
    }
40

41
    public Task<HDRState[]> GetAllStatesAsync() => Task.FromResult(Enum.GetValues<HDRState>());
42

43
    public Task<HDRState> GetStateAsync()
44
    {
45
        if (Log.Instance.IsTraceEnabled)
46
            Log.Instance.Trace($"Getting current HDR state...");
47

48
        var display = InternalDisplay.Get() ?? throw new InvalidOperationException("Built in display not found");
49

50
        var result = display.GetAdvancedColorInfo().AdvancedColorEnabled ? HDRState.On : HDRState.Off;
51

52
        if (Log.Instance.IsTraceEnabled)
53
            Log.Instance.Trace($"HDR is {result}");
54

55
        return Task.FromResult(result);
56
    }
57

58
    public async Task SetStateAsync(HDRState state)
59
    {
60
        var currentState = await GetStateAsync().ConfigureAwait(false);
61

62
        if (currentState == state)
63
        {
64
            if (Log.Instance.IsTraceEnabled)
65
                Log.Instance.Trace($"HDR already set to {state}");
66
            return;
67
        }
68

69
        var display = InternalDisplay.Get() ?? throw new InvalidOperationException("Built in display not found");
70

71
        if (Log.Instance.IsTraceEnabled)
72
            Log.Instance.Trace($"Setting display HDR to {state}");
73

74
        display.SetAdvancedColorState(state == HDRState.On);
75
    }
76
}
77

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.