mirror of
https://github.com/ayufan/steam-deck-tools.git
synced 2025-12-06 07:12:01 +01:00
141 lines
4.3 KiB
C#
141 lines
4.3 KiB
C#
using PerformanceOverlay.External;
|
|
using RTSSSharedMemoryNET;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace PerformanceOverlay
|
|
{
|
|
internal class Controller : IDisposable
|
|
{
|
|
Container components = new Container();
|
|
RTSSSharedMemoryNET.OSD? osd;
|
|
ToolStripMenuItem showItem;
|
|
Sensors sensors = new Sensors();
|
|
|
|
LibreHardwareMonitor.Hardware.Computer libreHardwareComputer = new LibreHardwareMonitor.Hardware.Computer
|
|
{
|
|
IsCpuEnabled = true,
|
|
IsGpuEnabled = true,
|
|
IsStorageEnabled = true,
|
|
IsBatteryEnabled = true
|
|
};
|
|
|
|
public Controller()
|
|
{
|
|
var contextMenu = new System.Windows.Forms.ContextMenuStrip(components);
|
|
|
|
showItem = new ToolStripMenuItem("&Show OSD");
|
|
showItem.Click += ShowItem_Click;
|
|
showItem.Checked = Settings.Default.ShowOSD;
|
|
contextMenu.Items.Add(showItem);
|
|
contextMenu.Items.Add(new ToolStripSeparator());
|
|
foreach (var mode in Enum.GetValues<Overlays.Mode>())
|
|
{
|
|
var modeItem = new ToolStripMenuItem(mode.ToString());
|
|
modeItem.Tag = mode;
|
|
modeItem.Click += delegate
|
|
{
|
|
Settings.Default.OSDModeParsed = mode;
|
|
updateContextItems(contextMenu);
|
|
};
|
|
contextMenu.Items.Add(modeItem);
|
|
}
|
|
updateContextItems(contextMenu);
|
|
|
|
contextMenu.Items.Add(new ToolStripSeparator());
|
|
|
|
var exitItem = contextMenu.Items.Add("&Exit");
|
|
exitItem.Click += ExitItem_Click;
|
|
|
|
var notifyIcon = new System.Windows.Forms.NotifyIcon(components);
|
|
notifyIcon.Icon = Resources.traffic_light_outline1;
|
|
notifyIcon.Text = "Steam Deck Fan Control";
|
|
notifyIcon.Visible = true;
|
|
notifyIcon.ContextMenuStrip = contextMenu;
|
|
notifyIcon.Click += NotifyIcon_Click;
|
|
|
|
var osdTimer = new System.Windows.Forms.Timer(components);
|
|
osdTimer.Tick += OsdTimer_Tick;
|
|
osdTimer.Interval = 250;
|
|
osdTimer.Enabled = true;
|
|
|
|
GlobalHotKey.RegisterHotKey("F11", () =>
|
|
{
|
|
showItem.Checked = !showItem.Checked;
|
|
});
|
|
|
|
// Select next overlay
|
|
GlobalHotKey.RegisterHotKey("Shift+F11", () =>
|
|
{
|
|
var values = Enum.GetValues<Overlays.Mode>().ToList();
|
|
|
|
int index = values.IndexOf(Settings.Default.OSDModeParsed);
|
|
Settings.Default.OSDModeParsed = values[(index + 1) % values.Count];
|
|
|
|
showItem.Checked = true;
|
|
updateContextItems(contextMenu);
|
|
});
|
|
}
|
|
|
|
private void updateContextItems(ContextMenuStrip contextMenu)
|
|
{
|
|
foreach (ToolStripItem item in contextMenu.Items)
|
|
{
|
|
if (item.Tag is Overlays.Mode)
|
|
((ToolStripMenuItem)item).Checked = ((Overlays.Mode)item.Tag == Settings.Default.OSDModeParsed);
|
|
}
|
|
}
|
|
|
|
private void NotifyIcon_Click(object? sender, EventArgs e)
|
|
{
|
|
((NotifyIcon)sender).ContextMenuStrip.Show(Control.MousePosition);
|
|
}
|
|
|
|
private void ShowItem_Click(object? sender, EventArgs e)
|
|
{
|
|
showItem.Checked = !showItem.Checked;
|
|
}
|
|
|
|
private void OsdTimer_Tick(object? sender, EventArgs e)
|
|
{
|
|
if (!showItem.Checked)
|
|
{
|
|
using (osd) { }
|
|
osd = null;
|
|
return;
|
|
}
|
|
|
|
sensors.Update();
|
|
|
|
var osdOverlay = Overlays.GetOSD(Settings.Default.OSDModeParsed, sensors);
|
|
|
|
try
|
|
{
|
|
if (osd == null)
|
|
osd = new OSD("PerformanceOverlay");
|
|
osd.Update(osdOverlay);
|
|
}
|
|
catch(SystemException)
|
|
{
|
|
osd = null;
|
|
}
|
|
}
|
|
|
|
private void ExitItem_Click(object? sender, EventArgs e)
|
|
{
|
|
Application.Exit();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
components.Dispose();
|
|
using (osd) { }
|
|
using (sensors) { }
|
|
}
|
|
}
|
|
}
|