using PowerControl.Helpers; using PowerControl.Helpers.AMD; namespace PowerControl.Options { public static class Resolution { public static Menu.MenuItemWithOptions Instance = new Menu.MenuItemWithOptions() { Name = "Resolution", PersistentKey = "Resolution", ApplyDelay = 1000, ResetValue = () => { if (!GPUScaling.SafeResolutionChange && !Settings.Default.EnableExperimentalFeatures) return null; return DisplayResolutionController.GetAllResolutions().Last().ToString(); }, OptionsValues = delegate () { var resolutions = DisplayResolutionController.GetAllResolutions().ToList(); var currentResolution = DisplayResolutionController.GetResolution(); if (currentResolution is not null && !resolutions.Contains(currentResolution.Value)) { resolutions.Add(currentResolution.Value); resolutions.Sort(); } if (resolutions.Count() > 1) return resolutions.Select(item => item.ToString()).ToArray(); return null; }, CurrentValue = delegate () { if (!GPUScaling.SafeResolutionChange && !Settings.Default.EnableExperimentalFeatures) return null; return DisplayResolutionController.GetResolution().ToString(); }, ApplyValue = (selected) => { var selectedResolution = new DisplayResolutionController.DisplayResolution(selected); #if USE_ADL2 if (ExternalHelpers.DisplayConfig.IsInternalConnected == true) { ModeTiming.ReplaceTiming(new Helpers.AMD.ADLDisplayModeX2() { PelsWidth = selectedResolution.Width, PelsHeight = selectedResolution.Height, RefreshRate = DisplayResolutionController.GetRefreshRate(), TimingStandard = Helpers.AMD.ADL.ADL_DL_MODETIMING_STANDARD_CVT, }); } #endif DisplayResolutionController.SetResolution(selectedResolution); return DisplayResolutionController.GetResolution().ToString(); }, Impacts = { RefreshRate.Instance, FPSLimit.Instance } }; } }