mirror of
https://github.com/ayufan/steam-deck-tools.git
synced 2025-12-06 07:12:01 +01:00
PowerControl: Add 3 dots + L1 + R1 to reset current resolution
This commit is contained in:
parent
903e5fefae
commit
3417b529b5
|
|
@ -1,5 +1,6 @@
|
|||
using System.Diagnostics;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using Sentry;
|
||||
|
||||
namespace CommonHelpers
|
||||
|
|
@ -129,6 +130,15 @@ namespace CommonHelpers
|
|||
}
|
||||
}
|
||||
|
||||
public static void TraceObject(string name, object subject)
|
||||
{
|
||||
var serialized = JsonSerializer.Serialize(
|
||||
subject,
|
||||
new JsonSerializerOptions { IncludeFields = true }
|
||||
);
|
||||
TraceLine("Object: {0}: {1}", name, serialized);
|
||||
}
|
||||
|
||||
public static void TraceLine(string format, params object?[] arg)
|
||||
{
|
||||
if (!LogToTrace && !LogToConsole && !LogToFile)
|
||||
|
|
|
|||
|
|
@ -323,12 +323,27 @@ namespace PowerControl
|
|||
input.buttons4 == (SDCButton4.BTN_L4 | SDCButton4.BTN_R4) &&
|
||||
input.buttons5 == SDCButton5.BTN_QUICK_ACCESS)
|
||||
{
|
||||
dismissNeptuneInput();
|
||||
rootMenu.Show();
|
||||
rootMenu.Reset();
|
||||
notifyIcon.ShowBalloonTip(3000, TitleWithVersion, "Settings were reset to default.", ToolTipIcon.Info);
|
||||
return;
|
||||
}
|
||||
|
||||
// Display reset sequence
|
||||
if (input.buttons0 == (SDCButton0.BTN_L1 | SDCButton0.BTN_R1) &&
|
||||
input.buttons1 == 0 &&
|
||||
input.buttons2 == 0 &&
|
||||
input.buttons3 == 0 &&
|
||||
input.buttons4 == 0 &&
|
||||
input.buttons5 == SDCButton5.BTN_QUICK_ACCESS)
|
||||
{
|
||||
dismissNeptuneInput();
|
||||
DisplayResolutionController.ResetCurrentResolution();
|
||||
notifyIcon.ShowBalloonTip(3000, TitleWithVersion, "Resolution was reset.", ToolTipIcon.Info);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!neptuneDeviceState.buttons5.HasFlag(SDCButton5.BTN_QUICK_ACCESS) || !OSDHelpers.IsOSDForeground())
|
||||
{
|
||||
// schedule next repeat far in the future
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ using System.Linq;
|
|||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using CommonHelpers;
|
||||
using static PowerControl.Helpers.PhysicalMonitorBrightnessController;
|
||||
|
||||
namespace PowerControl.Helpers
|
||||
|
|
@ -71,15 +72,91 @@ namespace PowerControl.Helpers
|
|||
return null;
|
||||
}
|
||||
|
||||
public static bool SetDisplaySettings(DEVMODE? best)
|
||||
private static bool SetDisplaySettings(String type, DEVMODE? best)
|
||||
{
|
||||
if (best == null)
|
||||
return false;
|
||||
|
||||
DEVMODE oldDm = new DEVMODE();
|
||||
if (!EnumDisplaySettings(null, ENUM_CURRENT_SETTINGS, ref oldDm))
|
||||
return false;
|
||||
|
||||
Log.TraceObject("SetDisplaySettings:" + type + ":IN", oldDm);
|
||||
|
||||
DEVMODE dm = best.Value;
|
||||
|
||||
var dispChange = ChangeDisplaySettingsEx(null, ref dm, IntPtr.Zero, ChangeDisplaySettingsFlags.CDS_NONE, IntPtr.Zero);
|
||||
return dispChange == DISP_CHANGE.Successful;
|
||||
if (dm.dmPelsWidth == oldDm.dmPelsWidth &&
|
||||
dm.dmPelsHeight == oldDm.dmPelsHeight &&
|
||||
dm.dmDisplayFrequency == oldDm.dmDisplayFrequency)
|
||||
{
|
||||
Log.TraceLine(
|
||||
"DispChange: {0}, already set: {1}x{2}@{3}",
|
||||
type,
|
||||
oldDm.dmPelsWidth, oldDm.dmPelsHeight, oldDm.dmDisplayFrequency);
|
||||
return true;
|
||||
}
|
||||
|
||||
var testChange = ChangeDisplaySettingsEx(
|
||||
null, ref dm, IntPtr.Zero,
|
||||
ChangeDisplaySettingsFlags.CDS_TEST, IntPtr.Zero);
|
||||
var applyChange = DISP_CHANGE.NotUpdated;
|
||||
Log.TraceObject("SetDisplaySettings:" + type + ":REQ", dm);
|
||||
|
||||
if (testChange == DISP_CHANGE.Successful)
|
||||
{
|
||||
applyChange = ChangeDisplaySettingsEx(
|
||||
null, ref dm, IntPtr.Zero,
|
||||
ChangeDisplaySettingsFlags.CDS_RESET, IntPtr.Zero);
|
||||
}
|
||||
|
||||
DEVMODE newDm = new DEVMODE();
|
||||
if (!EnumDisplaySettings(null, ENUM_CURRENT_SETTINGS, ref newDm))
|
||||
return false;
|
||||
|
||||
Log.TraceObject("SetDisplaySettings:" + type + ":OUT", newDm);
|
||||
|
||||
Log.TraceLine(
|
||||
"DispChange: {0}, Test: {1}, Set: {8}, from: {2}x{3}@{4}, to: {5}x{6}@{7}",
|
||||
type, testChange,
|
||||
oldDm.dmPelsWidth, oldDm.dmPelsHeight, oldDm.dmDisplayFrequency,
|
||||
newDm.dmPelsWidth, newDm.dmPelsHeight, newDm.dmDisplayFrequency,
|
||||
applyChange
|
||||
);
|
||||
|
||||
return applyChange == DISP_CHANGE.Successful;
|
||||
}
|
||||
|
||||
public static bool SetDisplaySettings(DisplayResolution size, int hz, String type = "DisplaySettings")
|
||||
{
|
||||
DEVMODE? best = FindAllDisplaySettings()
|
||||
.Where((dm) => dm.dmPelsWidth == size.Width && dm.dmPelsHeight == size.Height)
|
||||
.Where((dm) => dm.dmDisplayFrequency == hz)
|
||||
.First();
|
||||
|
||||
if (best is null)
|
||||
return false;
|
||||
|
||||
return SetDisplaySettings(type, best);
|
||||
}
|
||||
|
||||
public static bool ResetCurrentResolution()
|
||||
{
|
||||
try
|
||||
{
|
||||
var dm = CurrentDisplaySettings();
|
||||
|
||||
// Reset to best default
|
||||
var bestResolution = GetAllResolutions().Last();
|
||||
var bestRefreshRate = GetRefreshRates(bestResolution).Max();
|
||||
SetDisplaySettings(bestResolution, bestRefreshRate, "ResetToDefault");
|
||||
|
||||
return SetDisplaySettings("Reset", dm);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.TraceException("ResetResolution", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static DisplayResolution[] GetAllResolutions()
|
||||
|
|
@ -108,20 +185,7 @@ namespace PowerControl.Helpers
|
|||
if (best == null)
|
||||
return false;
|
||||
|
||||
DEVMODE dm = best.Value;
|
||||
|
||||
var dispChange = ChangeDisplaySettingsEx(null, ref dm, IntPtr.Zero, ChangeDisplaySettingsFlags.CDS_NONE, IntPtr.Zero);
|
||||
|
||||
if (!EnumDisplaySettings(null, ENUM_CURRENT_SETTINGS, ref dm))
|
||||
return false;
|
||||
|
||||
Trace.WriteLine("DispChange: " + dispChange.ToString() + " Size:" + size.ToString() +
|
||||
" SetSize:" + new DisplayResolution(dm.dmPelsWidth, dm.dmPelsHeight).ToString());
|
||||
|
||||
if (dispChange == DISP_CHANGE.Successful)
|
||||
return true;
|
||||
|
||||
return true;
|
||||
return SetDisplaySettings("Resolution", best);
|
||||
}
|
||||
|
||||
public static int[] GetRefreshRates(DisplayResolution? size = null)
|
||||
|
|
@ -150,32 +214,11 @@ namespace PowerControl.Helpers
|
|||
|
||||
public static bool SetRefreshRate(int hz)
|
||||
{
|
||||
var current = CurrentDisplaySettings();
|
||||
|
||||
var current = GetResolution();
|
||||
if (current is null)
|
||||
return false;
|
||||
|
||||
DEVMODE? best = FindAllDisplaySettings()
|
||||
.Where((dm) => dm.dmPelsWidth == current.Value.dmPelsWidth && dm.dmPelsHeight == current.Value.dmPelsHeight)
|
||||
.Where((dm) => dm.dmDisplayFrequency == hz)
|
||||
.First();
|
||||
|
||||
if (best is null)
|
||||
return false;
|
||||
|
||||
DEVMODE dm = best.Value;
|
||||
|
||||
var dispChange = ChangeDisplaySettingsEx(null, ref dm, IntPtr.Zero, ChangeDisplaySettingsFlags.CDS_NONE, IntPtr.Zero);
|
||||
|
||||
if (!EnumDisplaySettings(null, ENUM_CURRENT_SETTINGS, ref dm))
|
||||
return false;
|
||||
|
||||
Trace.WriteLine("DispChange: " + dispChange.ToString() + " HZ:" + hz.ToString() + " SetHZ:" + dm.dmDisplayFrequency.ToString());
|
||||
|
||||
if (dispChange == DISP_CHANGE.Successful)
|
||||
return true;
|
||||
|
||||
return true;
|
||||
return SetDisplaySettings(current.Value, hz, "SetRefreshRate");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
12
RELEASE.md
12
RELEASE.md
|
|
@ -4,14 +4,24 @@
|
|||
|
||||
[**READ IF PLAYING ONLINE GAMES AND/OR GAMES THAT HAVE ANTI-CHEAT ENABLED**](https://steam-deck-tools.ayufan.dev/#anti-cheat-and-antivirus-software)
|
||||
|
||||
## 0.6.x
|
||||
## Latest
|
||||
|
||||
- PowerControl: Add `3 dots + L1 + R1` to reset current resolution
|
||||
|
||||
## 0.6.17
|
||||
|
||||
- SteamController/PowerControl: Create Logs in Documents/SteamDeckTools/Logs
|
||||
- SteamController: Improve **Steam Input** support for **Steam Version 1684535786** WARNING: only English is supported!
|
||||
- SteamController: Allow to configure DS4 back buttons
|
||||
- SteamController: Allow to `EnableDS4Support=false` to hide DS4 controller
|
||||
|
||||
## 0.6.16
|
||||
|
||||
- All: Support [unofficial APU drivers](https://sourceforge.net/projects/amernimezone/files/Release%20Polaris-Vega-Navi/AMD%20SOC%20Driver%20Variant/) that present themselves as `AMD Radeon 670M`
|
||||
- PowerControl: Show Game Profiles menu item
|
||||
|
||||
## 0.6.15
|
||||
|
||||
- PowerControl: Support SMU of Vangogh GPU shipped with BIOS 115
|
||||
- SteamController: Add `DS4` support (with Gyro, Accel, Trackpads and Haptics)
|
||||
- SteamController: Move `KeepX360AlwaysConnected` to `Settings`
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ Additional shortcuts:
|
|||
- Control Volume: use Volume Up and Down
|
||||
- Control Brightness: press and hold Quick Access (3 dots), and then Volume Up and Down
|
||||
- Press `3 dots + L4 + R4 + L5 + R5` to reset (TDP, Refresh Rate, FPS limit) to default
|
||||
- Press `3 dots + L1 + R1` to reset current resolution (allows to fix black screen)
|
||||
|
||||
## 2. SWICD configuration
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue