mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
06be8c726e | ||
|
|
265c6ce417 | ||
|
|
add852ce5d | ||
|
|
d4a5164b16 | ||
|
|
14618ee19e | ||
|
|
0b3a75e373 | ||
|
|
64e390a61f | ||
|
|
1cd808de07 | ||
|
|
d82f1c8d70 | ||
|
|
9189cf0a46 | ||
|
|
3a7c4278a0 | ||
|
|
7065ba8661 | ||
|
|
1bce4a4b51 | ||
|
|
468f9c4034 | ||
|
|
4d347df45c | ||
|
|
d7f1d1d5fd | ||
|
|
6800ae38dd | ||
|
|
9b2b96fbf0 |
11
.github/ISSUE_TEMPLATE/bug_report.md
vendored
11
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -25,14 +25,7 @@ If applicable, add screenshots to help explain your problem.
|
|||||||
|
|
||||||
**Desktop (please complete the following information):**
|
**Desktop (please complete the following information):**
|
||||||
- OS: [e.g. iOS]
|
- OS: [e.g. iOS]
|
||||||
- Browser [e.g. chrome, safari]
|
- Laptop model
|
||||||
- Version [e.g. 22]
|
|
||||||
|
|
||||||
**Smartphone (please complete the following information):**
|
|
||||||
- Device: [e.g. iPhone6]
|
|
||||||
- OS: [e.g. iOS8.1]
|
|
||||||
- Browser [e.g. stock browser, safari]
|
|
||||||
- Version [e.g. 22]
|
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context about the problem here.
|
Add any other context about the problem here.
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ public class ASUSWmi
|
|||||||
|
|
||||||
public const uint BatteryLimit = 0x00120057;
|
public const uint BatteryLimit = 0x00120057;
|
||||||
public const uint ScreenOverdrive = 0x00050019;
|
public const uint ScreenOverdrive = 0x00050019;
|
||||||
|
public const uint ScreenMiniled = 0x0005001E;
|
||||||
|
|
||||||
public const uint DevsCPUFanCurve = 0x00110024;
|
public const uint DevsCPUFanCurve = 0x00110024;
|
||||||
public const uint DevsGPUFanCurve = 0x00110025;
|
public const uint DevsGPUFanCurve = 0x00110025;
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ using Starlight.Communication;
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Management;
|
using System.Management;
|
||||||
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace Starlight.AnimeMatrix
|
namespace Starlight.AnimeMatrix
|
||||||
{
|
{
|
||||||
@@ -62,26 +65,25 @@ namespace Starlight.AnimeMatrix
|
|||||||
Off = 0,
|
Off = 0,
|
||||||
Dim = 1,
|
Dim = 1,
|
||||||
Medium = 2,
|
Medium = 2,
|
||||||
Full = 3
|
Full = 3,
|
||||||
|
Super = 4, //test, doesn't work
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class AnimeMatrixDevice : Device
|
public class AnimeMatrixDevice : Device
|
||||||
{
|
{
|
||||||
private const int UpdatePageLength = 0x0278;
|
int UpdatePageLength = 490;
|
||||||
|
int LedCount = 1450;
|
||||||
|
|
||||||
public int LedCount => 1450;
|
byte[] _displayBuffer;
|
||||||
|
List<byte[]> frames = new List<byte[]>();
|
||||||
private byte[] _displayBuffer = new byte[UpdatePageLength * 3];
|
|
||||||
private List<byte[]> frames = new List<byte[]>();
|
|
||||||
|
|
||||||
private int pages = 3;
|
|
||||||
|
|
||||||
public int MaxColumns = 34;
|
public int MaxColumns = 34;
|
||||||
public int MaxRows = 61;
|
public int MaxRows = 61;
|
||||||
|
|
||||||
public int FullRows = 11;
|
public int FullRows = 11;
|
||||||
|
|
||||||
|
public int EmptyFirstRow = 0;
|
||||||
|
|
||||||
private int frameIndex = 0;
|
private int frameIndex = 0;
|
||||||
|
|
||||||
public AnimeMatrixDevice()
|
public AnimeMatrixDevice()
|
||||||
@@ -89,14 +91,19 @@ namespace Starlight.AnimeMatrix
|
|||||||
{
|
{
|
||||||
string model = GetModel();
|
string model = GetModel();
|
||||||
Debug.WriteLine(model);
|
Debug.WriteLine(model);
|
||||||
|
|
||||||
if (model is not null && model.Contains("401"))
|
if (model is not null && model.Contains("401"))
|
||||||
{
|
{
|
||||||
pages = 2;
|
EmptyFirstRow = 1;
|
||||||
|
|
||||||
FullRows = 6;
|
FullRows = 6;
|
||||||
MaxColumns = 33;
|
MaxColumns = 33;
|
||||||
MaxRows = 55;
|
MaxRows = 55;
|
||||||
|
LedCount = 1213;
|
||||||
|
UpdatePageLength = 410;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_displayBuffer = new byte[LedCount];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -145,6 +152,7 @@ namespace Starlight.AnimeMatrix
|
|||||||
|
|
||||||
public int EmptyColumns(int row)
|
public int EmptyColumns(int row)
|
||||||
{
|
{
|
||||||
|
if (row == 0) return EmptyFirstRow;
|
||||||
return (int)Math.Ceiling(Math.Max(0, row - FullRows) / 2.0);
|
return (int)Math.Ceiling(Math.Max(0, row - FullRows) / 2.0);
|
||||||
}
|
}
|
||||||
public int Columns(int row)
|
public int Columns(int row)
|
||||||
@@ -159,11 +167,8 @@ namespace Starlight.AnimeMatrix
|
|||||||
|
|
||||||
var ret = 0;
|
var ret = 0;
|
||||||
|
|
||||||
if (row > 0)
|
for (var i = 0; i < row; i++)
|
||||||
{
|
ret += Columns(i);
|
||||||
for (var i = 0; i < row; i++)
|
|
||||||
ret += Columns(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -175,13 +180,13 @@ namespace Starlight.AnimeMatrix
|
|||||||
|
|
||||||
public void SetLedLinear(int address, byte value)
|
public void SetLedLinear(int address, byte value)
|
||||||
{
|
{
|
||||||
EnsureAddressableLed(address);
|
if (!IsAddressableLed(address)) return;
|
||||||
_displayBuffer[address] = value;
|
_displayBuffer[address] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetLedLinearImmediate(int address, byte value)
|
public void SetLedLinearImmediate(int address, byte value)
|
||||||
{
|
{
|
||||||
EnsureAddressableLed(address);
|
if (!IsAddressableLed(address)) return;
|
||||||
_displayBuffer[address] = value;
|
_displayBuffer[address] = value;
|
||||||
|
|
||||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||||
@@ -198,7 +203,7 @@ namespace Starlight.AnimeMatrix
|
|||||||
EnsureRowInRange(y);
|
EnsureRowInRange(y);
|
||||||
var start = RowToLinearAddress(y) - EmptyColumns(y);
|
var start = RowToLinearAddress(y) - EmptyColumns(y);
|
||||||
|
|
||||||
if (x > EmptyColumns(y))
|
if (x >= EmptyColumns(y))
|
||||||
SetLedLinear(start + x, value);
|
SetLedLinear(start + x, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,26 +219,23 @@ namespace Starlight.AnimeMatrix
|
|||||||
public void Present()
|
public void Present()
|
||||||
{
|
{
|
||||||
|
|
||||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
int page = 0;
|
||||||
.AppendData(BitConverter.GetBytes((ushort)(UpdatePageLength * 0 + 1)))
|
int start, end;
|
||||||
.AppendData(BitConverter.GetBytes((ushort)UpdatePageLength))
|
|
||||||
.AppendData(_displayBuffer[(UpdatePageLength * 0)..(UpdatePageLength * 1)])
|
|
||||||
);
|
|
||||||
|
|
||||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
while (page * UpdatePageLength < LedCount)
|
||||||
.AppendData(BitConverter.GetBytes((ushort)(UpdatePageLength * 1 + 1)))
|
{
|
||||||
.AppendData(BitConverter.GetBytes((ushort)UpdatePageLength))
|
start = page * UpdatePageLength;
|
||||||
.AppendData(_displayBuffer[(UpdatePageLength * 1)..(UpdatePageLength * 2)])
|
end = Math.Min(LedCount, (page + 1) * UpdatePageLength);
|
||||||
);
|
|
||||||
|
|
||||||
if (pages > 2)
|
|
||||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||||
.AppendData(BitConverter.GetBytes((ushort)(UpdatePageLength * 2 + 1)))
|
.AppendData(BitConverter.GetBytes((ushort)(start + 1)))
|
||||||
.AppendData(BitConverter.GetBytes((ushort)(LedCount - UpdatePageLength * 2)))
|
.AppendData(BitConverter.GetBytes((ushort)(end - start)))
|
||||||
.AppendData(
|
.AppendData(_displayBuffer[start..end])
|
||||||
_displayBuffer[(UpdatePageLength * 2)..(UpdatePageLength * 2 + (LedCount - UpdatePageLength * 2))])
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
page++;
|
||||||
|
}
|
||||||
|
|
||||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x03));
|
Set(Packet<AnimeMatrixPacket>(0xC0, 0x03));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,10 +272,15 @@ namespace Starlight.AnimeMatrix
|
|||||||
Set(Packet<AnimeMatrixPacket>(0xC5, animation.AsByte));
|
Set(Packet<AnimeMatrixPacket>(0xC5, animation.AsByte));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int GetColor(Bitmap bmp, int x, int y)
|
||||||
|
{
|
||||||
|
var pixel = bmp.GetPixel(Math.Max(0,Math.Min(bmp.Width - 1,x)), Math.Max(0, Math.Min(bmp.Height - 1, y)));
|
||||||
|
return (Math.Max((pixel.R + pixel.G + pixel.B) / 3 - 10, 0));
|
||||||
|
}
|
||||||
public void GenerateFrame(Image image)
|
public void GenerateFrame(Image image)
|
||||||
{
|
{
|
||||||
|
|
||||||
int width = MaxColumns * 3;
|
int width = MaxColumns*3;
|
||||||
int height = MaxRows;
|
int height = MaxRows;
|
||||||
float scale;
|
float scale;
|
||||||
|
|
||||||
@@ -289,17 +296,20 @@ namespace Starlight.AnimeMatrix
|
|||||||
graph.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
|
graph.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
|
||||||
graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
|
graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
|
||||||
|
|
||||||
graph.DrawImage(image, ((int)width - scaleWidth), ((int)height - scaleHeight) / 2, scaleWidth, scaleHeight);
|
graph.DrawImage(image, ((int)width - scaleWidth), 0, scaleWidth, scaleHeight);
|
||||||
|
|
||||||
Bitmap bmp = new Bitmap(canvas, MaxColumns, MaxRows);
|
Bitmap bmp = new Bitmap(canvas, MaxColumns * 2, MaxRows);
|
||||||
|
|
||||||
for (int y = 0; y < bmp.Height; y++)
|
for (int y = 0; y < bmp.Height; y++)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < bmp.Width; x++)
|
for (int x = 0; x < bmp.Width; x++)
|
||||||
{
|
{
|
||||||
var pixel = bmp.GetPixel(x, y);
|
if (x % 2 == (y % 2))
|
||||||
byte color = (byte)(Math.Max((pixel.R + pixel.G + pixel.B) / 3 - 10, 0));
|
{
|
||||||
SetLedPlanar(x, y, color);
|
var color = GetColor(bmp, x, y);
|
||||||
|
//var color2= GetColor(bmp, x+1, y);
|
||||||
|
SetLedPlanar(x/2,y, (byte)color);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,12 +323,9 @@ namespace Starlight.AnimeMatrix
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void EnsureAddressableLed(int address)
|
private bool IsAddressableLed(int address)
|
||||||
{
|
{
|
||||||
if (address < 0 || address >= LedCount)
|
return (address >= 0 && address < LedCount);
|
||||||
{
|
|
||||||
throw new IndexOutOfRangeException($"Linear LED address must be in range of [0, {LedCount - 1}].");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Text.Json;
|
using System.Management;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
public class AppConfig
|
public class AppConfig
|
||||||
{
|
{
|
||||||
@@ -6,6 +7,8 @@ public class AppConfig
|
|||||||
public string appPath;
|
public string appPath;
|
||||||
string configFile;
|
string configFile;
|
||||||
|
|
||||||
|
string _model;
|
||||||
|
|
||||||
public Dictionary<string, object> config = new Dictionary<string, object>();
|
public Dictionary<string, object> config = new Dictionary<string, object>();
|
||||||
|
|
||||||
public AppConfig()
|
public AppConfig()
|
||||||
@@ -36,6 +39,26 @@ public class AppConfig
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public bool ContainsModel(string contains)
|
||||||
|
{
|
||||||
|
if (_model is null)
|
||||||
|
{
|
||||||
|
_model = "";
|
||||||
|
using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_ComputerSystem"))
|
||||||
|
{
|
||||||
|
foreach (var process in searcher.Get())
|
||||||
|
{
|
||||||
|
_model = process["Model"].ToString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (_model is not null && _model.Contains(contains));
|
||||||
|
|
||||||
|
}
|
||||||
private void initConfig()
|
private void initConfig()
|
||||||
{
|
{
|
||||||
config = new Dictionary<string, object>();
|
config = new Dictionary<string, object>();
|
||||||
|
|||||||
182
app/ControlHelper.cs
Normal file
182
app/ControlHelper.cs
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
using CustomControls;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Windows.Forms.DataVisualization.Charting;
|
||||||
|
|
||||||
|
public static class ControlHelper
|
||||||
|
{
|
||||||
|
|
||||||
|
static bool _invert = false;
|
||||||
|
static bool _resize = false;
|
||||||
|
|
||||||
|
static float _scale = 1;
|
||||||
|
|
||||||
|
static Color formBack;
|
||||||
|
static Color backMain;
|
||||||
|
static Color foreMain;
|
||||||
|
static Color foreAccent;
|
||||||
|
static Color borderMain;
|
||||||
|
static Color buttonMain;
|
||||||
|
|
||||||
|
public static void Adjust(RForm container, bool darkTheme = false, bool invert = false)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (darkTheme)
|
||||||
|
{
|
||||||
|
formBack = Color.FromArgb(255, 35, 35, 35);
|
||||||
|
backMain = Color.FromArgb(255, 50, 50, 50);
|
||||||
|
foreMain = Color.White;
|
||||||
|
foreAccent = Color.FromArgb(255, 100, 100, 100);
|
||||||
|
borderMain = Color.FromArgb(255, 50, 50, 50);
|
||||||
|
buttonMain = Color.FromArgb(255, 80, 80, 80);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
formBack = SystemColors.Control;
|
||||||
|
backMain = SystemColors.ControlLightLight;
|
||||||
|
foreMain = SystemColors.ControlText;
|
||||||
|
foreAccent = Color.LightGray;
|
||||||
|
borderMain = Color.LightGray;
|
||||||
|
buttonMain = SystemColors.ControlLight;
|
||||||
|
}
|
||||||
|
|
||||||
|
container.BackColor = formBack;
|
||||||
|
container.ForeColor = foreMain;
|
||||||
|
|
||||||
|
_invert = invert;
|
||||||
|
AdjustControls(container.Controls);
|
||||||
|
_invert = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Resize(RForm container, float baseScale = 2)
|
||||||
|
{
|
||||||
|
_scale = GetDpiScale(container).Value / baseScale;
|
||||||
|
ResizeControls(container.Controls);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ResizeControls(Control.ControlCollection controls)
|
||||||
|
{
|
||||||
|
foreach (Control control in controls)
|
||||||
|
{
|
||||||
|
var button = control as RButton;
|
||||||
|
if (button != null && button.Image is not null)
|
||||||
|
button.Image = ResizeImage(button.Image);
|
||||||
|
|
||||||
|
var pictureBox = control as PictureBox;
|
||||||
|
if (pictureBox != null && pictureBox.BackgroundImage is not null)
|
||||||
|
pictureBox.BackgroundImage = ResizeImage(pictureBox.BackgroundImage);
|
||||||
|
|
||||||
|
ResizeControls(control.Controls);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static void AdjustControls(Control.ControlCollection controls)
|
||||||
|
{
|
||||||
|
foreach (Control control in controls)
|
||||||
|
{
|
||||||
|
var button = control as RButton;
|
||||||
|
if (button != null)
|
||||||
|
{
|
||||||
|
button.BackColor = button.Secondary ? buttonMain : backMain;
|
||||||
|
button.ForeColor = foreMain;
|
||||||
|
|
||||||
|
button.FlatStyle = FlatStyle.Flat;
|
||||||
|
button.FlatAppearance.BorderColor = borderMain;
|
||||||
|
|
||||||
|
if (button.Image is not null)
|
||||||
|
button.Image = AdjustImage(button.Image);
|
||||||
|
}
|
||||||
|
|
||||||
|
var pictureBox = control as PictureBox;
|
||||||
|
if (pictureBox != null && pictureBox.BackgroundImage is not null)
|
||||||
|
pictureBox.BackgroundImage = AdjustImage(pictureBox.BackgroundImage);
|
||||||
|
|
||||||
|
|
||||||
|
var combo = control as RComboBox;
|
||||||
|
if (combo != null)
|
||||||
|
{
|
||||||
|
combo.BackColor = backMain;
|
||||||
|
combo.ForeColor = foreMain;
|
||||||
|
combo.BorderColor = backMain;
|
||||||
|
combo.ButtonColor = buttonMain;
|
||||||
|
}
|
||||||
|
|
||||||
|
var gb = control as GroupBox;
|
||||||
|
if (gb != null)
|
||||||
|
{
|
||||||
|
gb.ForeColor = foreMain;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var chart = control as Chart;
|
||||||
|
if (chart != null)
|
||||||
|
{
|
||||||
|
chart.BackColor = backMain;
|
||||||
|
chart.ChartAreas[0].BackColor = backMain;
|
||||||
|
chart.ChartAreas[0].AxisX.MajorGrid.LineColor = foreAccent;
|
||||||
|
chart.ChartAreas[0].AxisY.MajorGrid.LineColor = foreAccent;
|
||||||
|
|
||||||
|
chart.ChartAreas[0].AxisX.TitleForeColor = foreMain;
|
||||||
|
chart.ChartAreas[0].AxisY.TitleForeColor = foreMain;
|
||||||
|
|
||||||
|
chart.ChartAreas[0].AxisX.LabelStyle.ForeColor = foreMain;
|
||||||
|
chart.ChartAreas[0].AxisY.LabelStyle.ForeColor = foreMain;
|
||||||
|
|
||||||
|
chart.ChartAreas[0].AxisX.MajorTickMark.LineColor = foreMain;
|
||||||
|
chart.ChartAreas[0].AxisY.MajorTickMark.LineColor = foreMain;
|
||||||
|
|
||||||
|
chart.ChartAreas[0].AxisX.LineColor = foreAccent;
|
||||||
|
chart.ChartAreas[0].AxisY.LineColor = foreAccent;
|
||||||
|
|
||||||
|
chart.Titles[0].ForeColor = foreMain;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
AdjustControls(control.Controls);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Lazy<float> GetDpiScale(Control control)
|
||||||
|
{
|
||||||
|
return new Lazy<float>(() =>
|
||||||
|
{
|
||||||
|
using (var graphics = control.CreateGraphics())
|
||||||
|
return graphics.DpiX / 96.0f;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Image ResizeImage(Image image)
|
||||||
|
{
|
||||||
|
var newSize = new Size((int)(image.Width * _scale), (int)(image.Height * _scale));
|
||||||
|
var pic = new Bitmap(newSize.Width, newSize.Height);
|
||||||
|
|
||||||
|
using (var g = Graphics.FromImage(pic))
|
||||||
|
{
|
||||||
|
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||||
|
g.DrawImage(image, new Rectangle(new Point(), newSize));
|
||||||
|
}
|
||||||
|
return pic;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Image AdjustImage(Image image)
|
||||||
|
{
|
||||||
|
var pic = new Bitmap(image);
|
||||||
|
|
||||||
|
if (_invert)
|
||||||
|
{
|
||||||
|
for (int y = 0; (y <= (pic.Height - 1)); y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; (x <= (pic.Width - 1)); x++)
|
||||||
|
{
|
||||||
|
Color col = pic.GetPixel(x, y);
|
||||||
|
pic.SetPixel(x, y, Color.FromArgb(col.A, (255 - col.R), (255 - col.G), (255 - col.B)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pic;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
338
app/CustomControls.cs
Normal file
338
app/CustomControls.cs
Normal file
@@ -0,0 +1,338 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace CustomControls
|
||||||
|
{
|
||||||
|
|
||||||
|
public class RForm : Form
|
||||||
|
{
|
||||||
|
|
||||||
|
protected static Color colorEco = Color.FromArgb(255, 6, 180, 138);
|
||||||
|
protected static Color colorStandard = Color.FromArgb(255, 58, 174, 239);
|
||||||
|
protected static Color colorTurbo = Color.FromArgb(255, 255, 32, 32);
|
||||||
|
|
||||||
|
[DllImport("UXTheme.dll", SetLastError = true, EntryPoint = "#138")]
|
||||||
|
public static extern bool CheckSystemDarkModeStatus();
|
||||||
|
|
||||||
|
[DllImport("DwmApi")] //System.Runtime.InteropServices
|
||||||
|
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);
|
||||||
|
|
||||||
|
public bool darkTheme = false;
|
||||||
|
|
||||||
|
private static bool IsDarkTheme()
|
||||||
|
{
|
||||||
|
using var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize");
|
||||||
|
var registryValueObject = key?.GetValue("AppsUseLightTheme");
|
||||||
|
|
||||||
|
if (registryValueObject == null) return false;
|
||||||
|
return (int)registryValueObject <= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InitTheme(bool setDPI = true)
|
||||||
|
{
|
||||||
|
bool newDarkTheme = IsDarkTheme();
|
||||||
|
bool changed = (darkTheme != newDarkTheme);
|
||||||
|
darkTheme = newDarkTheme;
|
||||||
|
|
||||||
|
if (setDPI)
|
||||||
|
ControlHelper.Resize(this);
|
||||||
|
|
||||||
|
DwmSetWindowAttribute(this.Handle, 20, new[] { darkTheme ? 1 : 0 }, 4);
|
||||||
|
ControlHelper.Adjust(this, darkTheme, changed);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class RTrackBar : TrackBar
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RComboBox : ComboBox
|
||||||
|
{
|
||||||
|
private Color borderColor = Color.Gray;
|
||||||
|
[DefaultValue(typeof(Color), "Gray")]
|
||||||
|
public Color BorderColor
|
||||||
|
{
|
||||||
|
get { return borderColor; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (borderColor != value)
|
||||||
|
{
|
||||||
|
borderColor = value;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private Color buttonColor = Color.LightGray;
|
||||||
|
[DefaultValue(typeof(Color), "LightGray")]
|
||||||
|
public Color ButtonColor
|
||||||
|
{
|
||||||
|
get { return buttonColor; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (buttonColor != value)
|
||||||
|
{
|
||||||
|
buttonColor = value;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Color arrowColor = Color.Black;
|
||||||
|
[DefaultValue(typeof(Color), "Black")]
|
||||||
|
public Color ArrowColor
|
||||||
|
{
|
||||||
|
get { return arrowColor; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (arrowColor != value)
|
||||||
|
{
|
||||||
|
arrowColor = value;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected override void WndProc(ref Message m)
|
||||||
|
{
|
||||||
|
if (m.Msg == WM_PAINT && DropDownStyle != ComboBoxStyle.Simple)
|
||||||
|
{
|
||||||
|
var clientRect = ClientRectangle;
|
||||||
|
var dropDownButtonWidth = SystemInformation.HorizontalScrollBarArrowWidth;
|
||||||
|
var outerBorder = new Rectangle(clientRect.Location,
|
||||||
|
new Size(clientRect.Width - 1, clientRect.Height - 1));
|
||||||
|
var innerBorder = new Rectangle(outerBorder.X + 1, outerBorder.Y + 1,
|
||||||
|
outerBorder.Width - dropDownButtonWidth - 2, outerBorder.Height - 2);
|
||||||
|
var innerInnerBorder = new Rectangle(innerBorder.X + 1, innerBorder.Y + 1,
|
||||||
|
innerBorder.Width - 2, innerBorder.Height - 2);
|
||||||
|
var dropDownRect = new Rectangle(innerBorder.Right + 1, innerBorder.Y,
|
||||||
|
dropDownButtonWidth, innerBorder.Height + 1);
|
||||||
|
if (RightToLeft == RightToLeft.Yes)
|
||||||
|
{
|
||||||
|
innerBorder.X = clientRect.Width - innerBorder.Right;
|
||||||
|
innerInnerBorder.X = clientRect.Width - innerInnerBorder.Right;
|
||||||
|
dropDownRect.X = clientRect.Width - dropDownRect.Right;
|
||||||
|
dropDownRect.Width += 1;
|
||||||
|
}
|
||||||
|
var innerBorderColor = Enabled ? BackColor : SystemColors.Control;
|
||||||
|
var outerBorderColor = Enabled ? BorderColor : SystemColors.ControlDark;
|
||||||
|
var buttonColor = Enabled ? ButtonColor : SystemColors.Control;
|
||||||
|
var middle = new Point(dropDownRect.Left + dropDownRect.Width / 2,
|
||||||
|
dropDownRect.Top + dropDownRect.Height / 2);
|
||||||
|
var arrow = new Point[]
|
||||||
|
{
|
||||||
|
new Point(middle.X - 3, middle.Y - 2),
|
||||||
|
new Point(middle.X + 4, middle.Y - 2),
|
||||||
|
new Point(middle.X, middle.Y + 2)
|
||||||
|
};
|
||||||
|
var ps = new PAINTSTRUCT();
|
||||||
|
bool shoulEndPaint = false;
|
||||||
|
IntPtr dc;
|
||||||
|
if (m.WParam == IntPtr.Zero)
|
||||||
|
{
|
||||||
|
dc = BeginPaint(Handle, ref ps);
|
||||||
|
m.WParam = dc;
|
||||||
|
shoulEndPaint = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dc = m.WParam;
|
||||||
|
}
|
||||||
|
var rgn = CreateRectRgn(innerInnerBorder.Left, innerInnerBorder.Top,
|
||||||
|
innerInnerBorder.Right, innerInnerBorder.Bottom);
|
||||||
|
SelectClipRgn(dc, rgn);
|
||||||
|
DefWndProc(ref m);
|
||||||
|
DeleteObject(rgn);
|
||||||
|
rgn = CreateRectRgn(clientRect.Left, clientRect.Top,
|
||||||
|
clientRect.Right, clientRect.Bottom);
|
||||||
|
SelectClipRgn(dc, rgn);
|
||||||
|
using (var g = Graphics.FromHdc(dc))
|
||||||
|
{
|
||||||
|
using (var b = new SolidBrush(buttonColor))
|
||||||
|
{
|
||||||
|
g.FillRectangle(b, dropDownRect);
|
||||||
|
}
|
||||||
|
using (var b = new SolidBrush(arrowColor))
|
||||||
|
{
|
||||||
|
g.FillPolygon(b, arrow);
|
||||||
|
}
|
||||||
|
using (var p = new Pen(innerBorderColor))
|
||||||
|
{
|
||||||
|
g.DrawRectangle(p, innerBorder);
|
||||||
|
g.DrawRectangle(p, innerInnerBorder);
|
||||||
|
}
|
||||||
|
using (var p = new Pen(outerBorderColor))
|
||||||
|
{
|
||||||
|
g.DrawRectangle(p, outerBorder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (shoulEndPaint)
|
||||||
|
EndPaint(Handle, ref ps);
|
||||||
|
DeleteObject(rgn);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
base.WndProc(ref m);
|
||||||
|
}
|
||||||
|
|
||||||
|
private const int WM_PAINT = 0xF;
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct RECT
|
||||||
|
{
|
||||||
|
public int L, T, R, B;
|
||||||
|
}
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct PAINTSTRUCT
|
||||||
|
{
|
||||||
|
public IntPtr hdc;
|
||||||
|
public bool fErase;
|
||||||
|
public int rcPaint_left;
|
||||||
|
public int rcPaint_top;
|
||||||
|
public int rcPaint_right;
|
||||||
|
public int rcPaint_bottom;
|
||||||
|
public bool fRestore;
|
||||||
|
public bool fIncUpdate;
|
||||||
|
public int reserved1;
|
||||||
|
public int reserved2;
|
||||||
|
public int reserved3;
|
||||||
|
public int reserved4;
|
||||||
|
public int reserved5;
|
||||||
|
public int reserved6;
|
||||||
|
public int reserved7;
|
||||||
|
public int reserved8;
|
||||||
|
}
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
private static extern IntPtr BeginPaint(IntPtr hWnd,
|
||||||
|
[In, Out] ref PAINTSTRUCT lpPaint);
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
private static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT lpPaint);
|
||||||
|
|
||||||
|
[DllImport("gdi32.dll")]
|
||||||
|
public static extern int SelectClipRgn(IntPtr hDC, IntPtr hRgn);
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern int GetUpdateRgn(IntPtr hwnd, IntPtr hrgn, bool fErase);
|
||||||
|
public enum RegionFlags
|
||||||
|
{
|
||||||
|
ERROR = 0,
|
||||||
|
NULLREGION = 1,
|
||||||
|
SIMPLEREGION = 2,
|
||||||
|
COMPLEXREGION = 3,
|
||||||
|
}
|
||||||
|
[DllImport("gdi32.dll")]
|
||||||
|
internal static extern bool DeleteObject(IntPtr hObject);
|
||||||
|
|
||||||
|
[DllImport("gdi32.dll")]
|
||||||
|
private static extern IntPtr CreateRectRgn(int x1, int y1, int x2, int y2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RButton : Button
|
||||||
|
{
|
||||||
|
//Fields
|
||||||
|
private int borderSize = 5;
|
||||||
|
private int borderRadius = 5;
|
||||||
|
|
||||||
|
private bool activated = false;
|
||||||
|
private bool secondary = false;
|
||||||
|
|
||||||
|
private Color borderColor = Color.Transparent;
|
||||||
|
|
||||||
|
public Color BorderColor
|
||||||
|
{
|
||||||
|
get { return borderColor; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
borderColor = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public bool Activated
|
||||||
|
{
|
||||||
|
get { return activated; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (activated != value)
|
||||||
|
this.Invalidate();
|
||||||
|
activated = value;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Secondary
|
||||||
|
{
|
||||||
|
get { return secondary; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
secondary = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public RButton()
|
||||||
|
{
|
||||||
|
this.FlatStyle = FlatStyle.Flat;
|
||||||
|
this.FlatAppearance.BorderSize = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private GraphicsPath GetFigurePath(Rectangle rect, int radius)
|
||||||
|
{
|
||||||
|
GraphicsPath path = new GraphicsPath();
|
||||||
|
float curveSize = radius * 2F;
|
||||||
|
|
||||||
|
path.StartFigure();
|
||||||
|
path.AddArc(rect.X, rect.Y, curveSize, curveSize, 180, 90);
|
||||||
|
path.AddArc(rect.Right - curveSize, rect.Y, curveSize, curveSize, 270, 90);
|
||||||
|
path.AddArc(rect.Right - curveSize, rect.Bottom - curveSize, curveSize, curveSize, 0, 90);
|
||||||
|
path.AddArc(rect.X, rect.Bottom - curveSize, curveSize, curveSize, 90, 90);
|
||||||
|
path.CloseFigure();
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected override void OnPaint(PaintEventArgs pevent)
|
||||||
|
{
|
||||||
|
|
||||||
|
base.OnPaint(pevent);
|
||||||
|
|
||||||
|
float ratio = pevent.Graphics.DpiX / 192.0f;
|
||||||
|
int border = (int)(ratio * borderSize);
|
||||||
|
|
||||||
|
Rectangle rectSurface = this.ClientRectangle;
|
||||||
|
Rectangle rectBorder = Rectangle.Inflate(rectSurface, -border, -border);
|
||||||
|
|
||||||
|
Color borderDrawColor = activated ? borderColor : Color.Transparent;
|
||||||
|
|
||||||
|
using (GraphicsPath pathSurface = GetFigurePath(rectSurface, borderRadius + border))
|
||||||
|
using (GraphicsPath pathBorder = GetFigurePath(rectBorder, borderRadius))
|
||||||
|
using (Pen penSurface = new Pen(this.Parent.BackColor, border))
|
||||||
|
using (Pen penBorder = new Pen(borderDrawColor, border))
|
||||||
|
{
|
||||||
|
penBorder.Alignment = PenAlignment.Outset;
|
||||||
|
pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||||
|
this.Region = new Region(pathSurface);
|
||||||
|
pevent.Graphics.DrawPath(penSurface, pathSurface);
|
||||||
|
pevent.Graphics.DrawPath(penBorder, pathBorder);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Enabled && ForeColor != SystemColors.ControlText)
|
||||||
|
{
|
||||||
|
var rect = pevent.ClipRectangle;
|
||||||
|
if (Image is not null)
|
||||||
|
{
|
||||||
|
rect.Y += Image.Height;
|
||||||
|
rect.Height -= Image.Height;
|
||||||
|
}
|
||||||
|
TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;
|
||||||
|
TextRenderer.DrawText(pevent.Graphics, this.Text, this.Font, rect, Color.Gray, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
120
app/CustomControls.resx
Normal file
120
app/CustomControls.resx
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
57
app/Fans.Designer.cs
generated
57
app/Fans.Designer.cs
generated
@@ -1,4 +1,7 @@
|
|||||||
namespace GHelper
|
using CustomControls;
|
||||||
|
using System.Windows.Forms.DataVisualization.Charting;
|
||||||
|
|
||||||
|
namespace GHelper
|
||||||
{
|
{
|
||||||
partial class Fans
|
partial class Fans
|
||||||
{
|
{
|
||||||
@@ -28,25 +31,27 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
|
ChartArea chartArea1 = new ChartArea();
|
||||||
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
|
Title title1 = new Title();
|
||||||
|
ChartArea chartArea2 = new ChartArea();
|
||||||
|
Title title2 = new Title();
|
||||||
panelFans = new Panel();
|
panelFans = new Panel();
|
||||||
labelTip = new Label();
|
labelTip = new Label();
|
||||||
labelBoost = new Label();
|
labelBoost = new Label();
|
||||||
comboBoost = new ComboBox();
|
comboBoost = new RComboBox();
|
||||||
picturePerf = new PictureBox();
|
picturePerf = new PictureBox();
|
||||||
tableFanCharts = new TableLayoutPanel();
|
tableFanCharts = new TableLayoutPanel();
|
||||||
chartGPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
|
chartGPU = new Chart();
|
||||||
chartCPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
|
chartCPU = new Chart();
|
||||||
labelFans = new Label();
|
labelFans = new Label();
|
||||||
checkAuto = new CheckBox();
|
checkAuto = new CheckBox();
|
||||||
buttonReset = new Button();
|
buttonReset = new RButton();
|
||||||
buttonApply = new Button();
|
buttonApply = new RButton();
|
||||||
panelPower = new Panel();
|
panelPower = new Panel();
|
||||||
pictureBox1 = new PictureBox();
|
pictureBox1 = new PictureBox();
|
||||||
labelPowerLimits = new Label();
|
labelPowerLimits = new Label();
|
||||||
checkApplyPower = new CheckBox();
|
checkApplyPower = new CheckBox();
|
||||||
buttonApplyPower = new Button();
|
buttonApplyPower = new RButton();
|
||||||
panelCPU = new Panel();
|
panelCPU = new Panel();
|
||||||
labelCPU = new Label();
|
labelCPU = new Label();
|
||||||
label2 = new Label();
|
label2 = new Label();
|
||||||
@@ -114,6 +119,7 @@
|
|||||||
// comboBoost
|
// comboBoost
|
||||||
//
|
//
|
||||||
comboBoost.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
comboBoost.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
comboBoost.BorderColor = Color.White;
|
||||||
comboBoost.DropDownStyle = ComboBoxStyle.DropDownList;
|
comboBoost.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||||
comboBoost.FormattingEnabled = true;
|
comboBoost.FormattingEnabled = true;
|
||||||
comboBoost.Items.AddRange(new object[] { "Disabled", "Enabled", "Aggressive", "Efficient Enabled", "Efficient Aggressive" });
|
comboBoost.Items.AddRange(new object[] { "Disabled", "Enabled", "Aggressive", "Efficient Enabled", "Efficient Aggressive" });
|
||||||
@@ -163,6 +169,8 @@
|
|||||||
chartGPU.Size = new Size(760, 476);
|
chartGPU.Size = new Size(760, 476);
|
||||||
chartGPU.TabIndex = 17;
|
chartGPU.TabIndex = 17;
|
||||||
chartGPU.Text = "chart1";
|
chartGPU.Text = "chart1";
|
||||||
|
title1.Name = "Title1";
|
||||||
|
chartGPU.Titles.Add(title1);
|
||||||
//
|
//
|
||||||
// chartCPU
|
// chartCPU
|
||||||
//
|
//
|
||||||
@@ -175,6 +183,8 @@
|
|||||||
chartCPU.Size = new Size(760, 476);
|
chartCPU.Size = new Size(760, 476);
|
||||||
chartCPU.TabIndex = 14;
|
chartCPU.TabIndex = 14;
|
||||||
chartCPU.Text = "chartCPU";
|
chartCPU.Text = "chartCPU";
|
||||||
|
title2.Name = "Title1";
|
||||||
|
chartCPU.Titles.Add(title2);
|
||||||
//
|
//
|
||||||
// labelFans
|
// labelFans
|
||||||
//
|
//
|
||||||
@@ -201,25 +211,35 @@
|
|||||||
//
|
//
|
||||||
// buttonReset
|
// buttonReset
|
||||||
//
|
//
|
||||||
|
buttonReset.Activated = false;
|
||||||
buttonReset.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
buttonReset.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
||||||
|
buttonReset.BackColor = SystemColors.ControlLight;
|
||||||
|
buttonReset.BorderColor = Color.Transparent;
|
||||||
|
buttonReset.FlatStyle = FlatStyle.Flat;
|
||||||
buttonReset.Location = new Point(30, 1081);
|
buttonReset.Location = new Point(30, 1081);
|
||||||
buttonReset.Margin = new Padding(4, 2, 4, 2);
|
buttonReset.Margin = new Padding(4, 2, 4, 2);
|
||||||
buttonReset.Name = "buttonReset";
|
buttonReset.Name = "buttonReset";
|
||||||
|
buttonReset.Secondary = true;
|
||||||
buttonReset.Size = new Size(232, 44);
|
buttonReset.Size = new Size(232, 44);
|
||||||
buttonReset.TabIndex = 15;
|
buttonReset.TabIndex = 15;
|
||||||
buttonReset.Text = "Factory Defaults";
|
buttonReset.Text = "Factory Defaults";
|
||||||
buttonReset.UseVisualStyleBackColor = true;
|
buttonReset.UseVisualStyleBackColor = false;
|
||||||
//
|
//
|
||||||
// buttonApply
|
// buttonApply
|
||||||
//
|
//
|
||||||
|
buttonApply.Activated = false;
|
||||||
buttonApply.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
buttonApply.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
buttonApply.BackColor = SystemColors.ControlLight;
|
||||||
|
buttonApply.BorderColor = Color.Transparent;
|
||||||
|
buttonApply.FlatStyle = FlatStyle.Flat;
|
||||||
buttonApply.Location = new Point(542, 1081);
|
buttonApply.Location = new Point(542, 1081);
|
||||||
buttonApply.Margin = new Padding(4, 2, 4, 2);
|
buttonApply.Margin = new Padding(4, 2, 4, 2);
|
||||||
buttonApply.Name = "buttonApply";
|
buttonApply.Name = "buttonApply";
|
||||||
|
buttonApply.Secondary = true;
|
||||||
buttonApply.Size = new Size(248, 44);
|
buttonApply.Size = new Size(248, 44);
|
||||||
buttonApply.TabIndex = 14;
|
buttonApply.TabIndex = 14;
|
||||||
buttonApply.Text = "Apply Fan Curve";
|
buttonApply.Text = "Apply Fan Curve";
|
||||||
buttonApply.UseVisualStyleBackColor = true;
|
buttonApply.UseVisualStyleBackColor = false;
|
||||||
//
|
//
|
||||||
// panelPower
|
// panelPower
|
||||||
//
|
//
|
||||||
@@ -277,14 +297,19 @@
|
|||||||
//
|
//
|
||||||
// buttonApplyPower
|
// buttonApplyPower
|
||||||
//
|
//
|
||||||
|
buttonApplyPower.Activated = false;
|
||||||
buttonApplyPower.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
buttonApplyPower.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
buttonApplyPower.BackColor = SystemColors.ControlLight;
|
||||||
|
buttonApplyPower.BorderColor = Color.Transparent;
|
||||||
|
buttonApplyPower.FlatStyle = FlatStyle.Flat;
|
||||||
buttonApplyPower.Location = new Point(20, 1081);
|
buttonApplyPower.Location = new Point(20, 1081);
|
||||||
buttonApplyPower.Margin = new Padding(4, 2, 4, 2);
|
buttonApplyPower.Margin = new Padding(4, 2, 4, 2);
|
||||||
buttonApplyPower.Name = "buttonApplyPower";
|
buttonApplyPower.Name = "buttonApplyPower";
|
||||||
|
buttonApplyPower.Secondary = true;
|
||||||
buttonApplyPower.Size = new Size(324, 44);
|
buttonApplyPower.Size = new Size(324, 44);
|
||||||
buttonApplyPower.TabIndex = 24;
|
buttonApplyPower.TabIndex = 24;
|
||||||
buttonApplyPower.Text = "Apply Power Limits";
|
buttonApplyPower.Text = "Apply Power Limits";
|
||||||
buttonApplyPower.UseVisualStyleBackColor = true;
|
buttonApplyPower.UseVisualStyleBackColor = false;
|
||||||
//
|
//
|
||||||
// panelCPU
|
// panelCPU
|
||||||
//
|
//
|
||||||
@@ -456,11 +481,11 @@
|
|||||||
#endregion
|
#endregion
|
||||||
private Panel panelFans;
|
private Panel panelFans;
|
||||||
private CheckBox checkAuto;
|
private CheckBox checkAuto;
|
||||||
private Button buttonReset;
|
private RButton buttonReset;
|
||||||
private Button buttonApply;
|
private RButton buttonApply;
|
||||||
private Panel panelPower;
|
private Panel panelPower;
|
||||||
private CheckBox checkApplyPower;
|
private CheckBox checkApplyPower;
|
||||||
private Button buttonApplyPower;
|
private RButton buttonApplyPower;
|
||||||
private Panel panelCPU;
|
private Panel panelCPU;
|
||||||
private Label labelCPU;
|
private Label labelCPU;
|
||||||
private Label label2;
|
private Label label2;
|
||||||
@@ -479,7 +504,7 @@
|
|||||||
private Label labelFans;
|
private Label labelFans;
|
||||||
private PictureBox picturePerf;
|
private PictureBox picturePerf;
|
||||||
private PictureBox pictureBox1;
|
private PictureBox pictureBox1;
|
||||||
private ComboBox comboBoost;
|
private RComboBox comboBoost;
|
||||||
private Label labelBoost;
|
private Label labelBoost;
|
||||||
private Label labelTip;
|
private Label labelTip;
|
||||||
}
|
}
|
||||||
|
|||||||
43
app/Fans.cs
43
app/Fans.cs
@@ -1,24 +1,23 @@
|
|||||||
using System;
|
using System.Diagnostics;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Diagnostics.Metrics;
|
|
||||||
using System.Drawing.Imaging;
|
|
||||||
using System.Drawing.Text;
|
|
||||||
using System.IO;
|
|
||||||
using System.Windows.Forms.DataVisualization.Charting;
|
using System.Windows.Forms.DataVisualization.Charting;
|
||||||
|
using CustomControls;
|
||||||
|
|
||||||
namespace GHelper
|
namespace GHelper
|
||||||
{
|
{
|
||||||
public partial class Fans : Form
|
public partial class Fans : RForm
|
||||||
{
|
{
|
||||||
|
|
||||||
DataPoint curPoint = null;
|
DataPoint curPoint = null;
|
||||||
Series seriesCPU;
|
Series seriesCPU;
|
||||||
Series seriesGPU;
|
Series seriesGPU;
|
||||||
|
|
||||||
|
static int MinRPM, MaxRPM;
|
||||||
|
|
||||||
static string ChartPercToRPM(int percentage, string unit = "")
|
static string ChartPercToRPM(int percentage, string unit = "")
|
||||||
{
|
{
|
||||||
if (percentage == 0) return "OFF";
|
if (percentage == 0) return "OFF";
|
||||||
return (1800 + 200 * Math.Floor(percentage * 0.2)).ToString() + unit;
|
|
||||||
|
return (200 * Math.Round((float)(MinRPM + (MaxRPM - MinRPM) * percentage * 0.01) / 200)).ToString() + unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetChart(Chart chart, int device)
|
void SetChart(Chart chart, int device)
|
||||||
@@ -34,13 +33,7 @@ namespace GHelper
|
|||||||
if (Program.settingsForm.perfName.Length > 0)
|
if (Program.settingsForm.perfName.Length > 0)
|
||||||
labelFans.Text = "Fan Profiles: " + Program.settingsForm.perfName;
|
labelFans.Text = "Fan Profiles: " + Program.settingsForm.perfName;
|
||||||
|
|
||||||
if (chart.Titles.Count > 0)
|
chart.Titles[0].Text = title;
|
||||||
chart.Titles[0].Text = title;
|
|
||||||
else
|
|
||||||
chart.Titles.Add(title);
|
|
||||||
|
|
||||||
chart.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.LightGray;
|
|
||||||
chart.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.LightGray;
|
|
||||||
|
|
||||||
chart.ChartAreas[0].AxisX.Minimum = 10;
|
chart.ChartAreas[0].AxisX.Minimum = 10;
|
||||||
chart.ChartAreas[0].AxisX.Maximum = 100;
|
chart.ChartAreas[0].AxisX.Maximum = 100;
|
||||||
@@ -84,6 +77,18 @@ namespace GHelper
|
|||||||
{
|
{
|
||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
InitTheme();
|
||||||
|
|
||||||
|
MinRPM = 1800;
|
||||||
|
|
||||||
|
if (Program.config.ContainsModel("401"))
|
||||||
|
MaxRPM = 7200;
|
||||||
|
else if (Program.config.ContainsModel("503"))
|
||||||
|
MaxRPM = 6800;
|
||||||
|
else
|
||||||
|
MaxRPM = 5800;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
labelTip.Visible = false;
|
labelTip.Visible = false;
|
||||||
labelTip.BackColor = Color.Transparent;
|
labelTip.BackColor = Color.Transparent;
|
||||||
@@ -93,8 +98,8 @@ namespace GHelper
|
|||||||
seriesCPU = chartCPU.Series.Add("CPU");
|
seriesCPU = chartCPU.Series.Add("CPU");
|
||||||
seriesGPU = chartGPU.Series.Add("GPU");
|
seriesGPU = chartGPU.Series.Add("GPU");
|
||||||
|
|
||||||
seriesCPU.Color = Color.Blue;
|
seriesCPU.Color = colorStandard;
|
||||||
seriesGPU.Color = Color.Red;
|
seriesGPU.Color = colorTurbo;
|
||||||
|
|
||||||
chartCPU.MouseMove += ChartCPU_MouseMove;
|
chartCPU.MouseMove += ChartCPU_MouseMove;
|
||||||
chartCPU.MouseUp += ChartCPU_MouseUp;
|
chartCPU.MouseUp += ChartCPU_MouseUp;
|
||||||
@@ -245,12 +250,12 @@ namespace GHelper
|
|||||||
{
|
{
|
||||||
if (applied)
|
if (applied)
|
||||||
{
|
{
|
||||||
labelApplied.ForeColor = Color.Blue;
|
labelApplied.ForeColor = colorStandard;
|
||||||
labelApplied.Text = "Applied";
|
labelApplied.Text = "Applied";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
labelApplied.ForeColor = Color.Red;
|
labelApplied.ForeColor = colorTurbo;
|
||||||
labelApplied.Text = "Not Applied";
|
labelApplied.Text = "Not Applied";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||||
<AssemblyVersion>0.31</AssemblyVersion>
|
<AssemblyVersion>0.33</AssemblyVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -51,15 +51,6 @@
|
|||||||
<PackageReference Include="WinForms.DataVisualization" Version="1.7.0" />
|
<PackageReference Include="WinForms.DataVisualization" Version="1.7.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="Microsoft.Management.Infrastructure">
|
|
||||||
<HintPath>..\..\.nuget\packages\microsoft.management.infrastructure\2.0.0\ref\net451\Microsoft.Management.Infrastructure.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Management.Infrastructure.Native">
|
|
||||||
<HintPath>..\..\.nuget\packages\microsoft.management.infrastructure.runtime.win\2.0.0\runtimes\win10-x64\lib\netstandard1.6\Microsoft.Management.Infrastructure.Native.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Resources\eco.ico">
|
<Content Include="Resources\eco.ico">
|
||||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||||
|
|||||||
@@ -58,28 +58,36 @@ public static class HardwareMonitor
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void RecreateGpuTemperatureProvider() {
|
public static void RecreateGpuTemperatureProvider() {
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
GpuTemperatureProvider?.Dispose();
|
GpuTemperatureProvider?.Dispose();
|
||||||
|
|
||||||
// Detect valid GPU temperature provider.
|
// Detect valid GPU temperature provider.
|
||||||
// We start with NVIDIA because there's always at least an integrated AMD GPU
|
// We start with NVIDIA because there's always at least an integrated AMD GPU
|
||||||
IGpuTemperatureProvider gpuTemperatureProvider = new NvidiaGpuTemperatureProvider();
|
IGpuTemperatureProvider gpuTemperatureProvider = new NvidiaGpuTemperatureProvider();
|
||||||
if (gpuTemperatureProvider.IsValid) {
|
if (gpuTemperatureProvider.IsValid)
|
||||||
|
{
|
||||||
GpuTemperatureProvider = gpuTemperatureProvider;
|
GpuTemperatureProvider = gpuTemperatureProvider;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
gpuTemperatureProvider.Dispose();
|
gpuTemperatureProvider.Dispose();
|
||||||
gpuTemperatureProvider = new AmdGpuTemperatureProvider();
|
gpuTemperatureProvider = new AmdGpuTemperatureProvider();
|
||||||
if (gpuTemperatureProvider.IsValid) {
|
if (gpuTemperatureProvider.IsValid)
|
||||||
|
{
|
||||||
GpuTemperatureProvider = gpuTemperatureProvider;
|
GpuTemperatureProvider = gpuTemperatureProvider;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
gpuTemperatureProvider.Dispose();
|
gpuTemperatureProvider.Dispose();
|
||||||
|
|
||||||
GpuTemperatureProvider = null;
|
GpuTemperatureProvider = null;
|
||||||
} finally {
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
Logger.WriteLine($"GpuTemperatureProvider: {GpuTemperatureProvider?.GetType().Name}");
|
Logger.WriteLine($"GpuTemperatureProvider: {GpuTemperatureProvider?.GetType().Name}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,67 +0,0 @@
|
|||||||
using System.Drawing.Drawing2D;
|
|
||||||
|
|
||||||
public static class HighDpiHelper
|
|
||||||
{
|
|
||||||
public static void AdjustControlImagesDpiScale(Control container, float baseScale = 2)
|
|
||||||
{
|
|
||||||
var dpiScale = GetDpiScale(container).Value;
|
|
||||||
AdjustControlImagesDpiScale(container.Controls, dpiScale / baseScale);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void AdjustButtonDpiScale(ButtonBase button, float dpiScale)
|
|
||||||
{
|
|
||||||
var image = button.Image;
|
|
||||||
|
|
||||||
if (image == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
button.Image = ScaleImage(image, dpiScale);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void AdjustControlImagesDpiScale(Control.ControlCollection controls, float dpiScale)
|
|
||||||
{
|
|
||||||
foreach (Control control in controls)
|
|
||||||
{
|
|
||||||
var button = control as ButtonBase;
|
|
||||||
if (button != null)
|
|
||||||
AdjustButtonDpiScale(button, dpiScale);
|
|
||||||
|
|
||||||
AdjustControlImagesDpiScale(control.Controls, dpiScale);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Lazy<float> GetDpiScale(Control control)
|
|
||||||
{
|
|
||||||
return new Lazy<float>(() =>
|
|
||||||
{
|
|
||||||
using (var graphics = control.CreateGraphics())
|
|
||||||
return graphics.DpiX / 96.0f;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Image ScaleImage(Image image, float dpiScale)
|
|
||||||
{
|
|
||||||
var newSize = ScaleSize(image.Size, dpiScale);
|
|
||||||
var newBitmap = new Bitmap(newSize.Width, newSize.Height);
|
|
||||||
|
|
||||||
using (var g = Graphics.FromImage(newBitmap))
|
|
||||||
{
|
|
||||||
// According to this blog post http://blogs.msdn.com/b/visualstudio/archive/2014/03/19/improving-high-dpi-support-for-visual-studio-2013.aspx
|
|
||||||
// NearestNeighbor is more adapted for 200% and 200%+ DPI
|
|
||||||
|
|
||||||
var interpolationMode = InterpolationMode.HighQualityBicubic;
|
|
||||||
if (dpiScale >= 2.0f)
|
|
||||||
interpolationMode = InterpolationMode.NearestNeighbor;
|
|
||||||
|
|
||||||
g.InterpolationMode = interpolationMode;
|
|
||||||
g.DrawImage(image, new Rectangle(new Point(), newSize));
|
|
||||||
}
|
|
||||||
|
|
||||||
return newBitmap;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Size ScaleSize(Size size, float scale)
|
|
||||||
{
|
|
||||||
return new Size((int)(size.Width * scale), (int)(size.Height * scale));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
16
app/Keyboard.Designer.cs
generated
16
app/Keyboard.Designer.cs
generated
@@ -1,4 +1,6 @@
|
|||||||
namespace GHelper
|
using CustomControls;
|
||||||
|
|
||||||
|
namespace GHelper
|
||||||
{
|
{
|
||||||
partial class Keyboard
|
partial class Keyboard
|
||||||
{
|
{
|
||||||
@@ -31,12 +33,12 @@
|
|||||||
groupBox1 = new GroupBox();
|
groupBox1 = new GroupBox();
|
||||||
textM4 = new TextBox();
|
textM4 = new TextBox();
|
||||||
textM3 = new TextBox();
|
textM3 = new TextBox();
|
||||||
comboM4 = new ComboBox();
|
comboM4 = new RComboBox();
|
||||||
labelM4 = new Label();
|
labelM4 = new Label();
|
||||||
comboM3 = new ComboBox();
|
comboM3 = new RComboBox();
|
||||||
labelM3 = new Label();
|
labelM3 = new Label();
|
||||||
textFNF4 = new TextBox();
|
textFNF4 = new TextBox();
|
||||||
comboFNF4 = new ComboBox();
|
comboFNF4 = new RComboBox();
|
||||||
labelFNF4 = new Label();
|
labelFNF4 = new Label();
|
||||||
groupBox1.SuspendLayout();
|
groupBox1.SuspendLayout();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
@@ -161,13 +163,13 @@
|
|||||||
|
|
||||||
private GroupBox groupBox1;
|
private GroupBox groupBox1;
|
||||||
private Label labelM3;
|
private Label labelM3;
|
||||||
private ComboBox comboM3;
|
private RComboBox comboM3;
|
||||||
private ComboBox comboM4;
|
private RComboBox comboM4;
|
||||||
private Label labelM4;
|
private Label labelM4;
|
||||||
private TextBox textM4;
|
private TextBox textM4;
|
||||||
private TextBox textM3;
|
private TextBox textM3;
|
||||||
private TextBox textFNF4;
|
private TextBox textFNF4;
|
||||||
private ComboBox comboFNF4;
|
private RComboBox comboFNF4;
|
||||||
private Label labelFNF4;
|
private Label labelFNF4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
namespace GHelper
|
using CustomControls;
|
||||||
|
|
||||||
|
namespace GHelper
|
||||||
{
|
{
|
||||||
public partial class Keyboard : Form
|
public partial class Keyboard : RForm
|
||||||
{
|
{
|
||||||
|
|
||||||
Dictionary<string, string> customActions = new Dictionary<string, string>
|
Dictionary<string, string> customActions = new Dictionary<string, string>
|
||||||
@@ -51,6 +53,7 @@
|
|||||||
public Keyboard()
|
public Keyboard()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
InitTheme();
|
||||||
|
|
||||||
SetKeyCombo(comboM3, textM3, "m3");
|
SetKeyCombo(comboM3, textM3, "m3");
|
||||||
SetKeyCombo(comboM4, textM4, "m4");
|
SetKeyCombo(comboM4, textM4, "m4");
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace GHelper
|
|||||||
private static IntPtr ds;
|
private static IntPtr ds;
|
||||||
|
|
||||||
private static long lastAuto;
|
private static long lastAuto;
|
||||||
|
private static long lastTheme;
|
||||||
|
|
||||||
// The main entry point for the application
|
// The main entry point for the application
|
||||||
public static void Main()
|
public static void Main()
|
||||||
@@ -48,6 +49,9 @@ namespace GHelper
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SystemEvents.UserPreferenceChanged += new
|
||||||
|
UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
|
||||||
|
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
|
|
||||||
ds = settingsForm.Handle;
|
ds = settingsForm.Handle;
|
||||||
@@ -77,6 +81,31 @@ namespace GHelper
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastTheme) < 2000) return;
|
||||||
|
lastTheme = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||||
|
|
||||||
|
switch (e.Category)
|
||||||
|
{
|
||||||
|
case UserPreferenceCategory.General:
|
||||||
|
Debug.WriteLine("Theme Changed");
|
||||||
|
Thread.Sleep(500);
|
||||||
|
settingsForm.InitTheme(false);
|
||||||
|
|
||||||
|
if (settingsForm.fans is not null && settingsForm.fans.Text != "")
|
||||||
|
settingsForm.fans.InitTheme(false);
|
||||||
|
|
||||||
|
if (settingsForm.keyb is not null && settingsForm.keyb.Text != "")
|
||||||
|
settingsForm.keyb.InitTheme(false);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static async void CheckForUpdates()
|
static async void CheckForUpdates()
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -112,7 +141,7 @@ namespace GHelper
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void SetAutoModes()
|
public static void SetAutoModes(bool wait = false)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAuto) < 1000) return;
|
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAuto) < 1000) return;
|
||||||
@@ -126,6 +155,9 @@ namespace GHelper
|
|||||||
|
|
||||||
settingsForm.AutoPerformance(isPlugged);
|
settingsForm.AutoPerformance(isPlugged);
|
||||||
|
|
||||||
|
// waiting a bit before turning off dGPU
|
||||||
|
// if (wait && isPlugged != PowerLineStatus.Online) Thread.Sleep(3000);
|
||||||
|
|
||||||
bool switched = settingsForm.AutoGPUMode(isPlugged);
|
bool switched = settingsForm.AutoGPUMode(isPlugged);
|
||||||
if (!switched) settingsForm.AutoScreen(isPlugged);
|
if (!switched) settingsForm.AutoScreen(isPlugged);
|
||||||
|
|
||||||
@@ -135,7 +167,7 @@ namespace GHelper
|
|||||||
private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
|
private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
|
||||||
{
|
{
|
||||||
Logger.WriteLine("Windows - Power Mode Changed");
|
Logger.WriteLine("Windows - Power Mode Changed");
|
||||||
SetAutoModes();
|
SetAutoModes(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,85 +0,0 @@
|
|||||||
using System.ComponentModel;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Drawing.Drawing2D;
|
|
||||||
|
|
||||||
namespace CustomControls
|
|
||||||
{
|
|
||||||
public class RoundedButton : Button
|
|
||||||
{
|
|
||||||
//Fields
|
|
||||||
private int borderSize = 5;
|
|
||||||
private int borderRadius = 5;
|
|
||||||
private bool activated = false;
|
|
||||||
private Color borderColor = Color.Transparent;
|
|
||||||
|
|
||||||
public Color BorderColor
|
|
||||||
{
|
|
||||||
get { return borderColor; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
borderColor = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public bool Activated
|
|
||||||
{
|
|
||||||
get { return activated; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (activated != value)
|
|
||||||
this.Invalidate();
|
|
||||||
activated = value;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public RoundedButton()
|
|
||||||
{
|
|
||||||
this.FlatStyle = FlatStyle.Flat;
|
|
||||||
this.FlatAppearance.BorderSize = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private GraphicsPath GetFigurePath(Rectangle rect, int radius)
|
|
||||||
{
|
|
||||||
GraphicsPath path = new GraphicsPath();
|
|
||||||
float curveSize = radius * 2F;
|
|
||||||
|
|
||||||
path.StartFigure();
|
|
||||||
path.AddArc(rect.X, rect.Y, curveSize, curveSize, 180, 90);
|
|
||||||
path.AddArc(rect.Right - curveSize, rect.Y, curveSize, curveSize, 270, 90);
|
|
||||||
path.AddArc(rect.Right - curveSize, rect.Bottom - curveSize, curveSize, curveSize, 0, 90);
|
|
||||||
path.AddArc(rect.X, rect.Bottom - curveSize, curveSize, curveSize, 90, 90);
|
|
||||||
path.CloseFigure();
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected override void OnPaint(PaintEventArgs pevent)
|
|
||||||
{
|
|
||||||
base.OnPaint(pevent);
|
|
||||||
|
|
||||||
float ratio = pevent.Graphics.DpiX / 192.0f;
|
|
||||||
int border = (int)(ratio * borderSize);
|
|
||||||
|
|
||||||
Rectangle rectSurface = this.ClientRectangle;
|
|
||||||
Rectangle rectBorder = Rectangle.Inflate(rectSurface, -border, -border);
|
|
||||||
|
|
||||||
Color borderDrawColor = activated ? borderColor : Color.Transparent;
|
|
||||||
|
|
||||||
using (GraphicsPath pathSurface = GetFigurePath(rectSurface, borderRadius+ border))
|
|
||||||
using (GraphicsPath pathBorder = GetFigurePath(rectBorder, borderRadius))
|
|
||||||
using (Pen penSurface = new Pen(this.Parent.BackColor, border))
|
|
||||||
using (Pen penBorder = new Pen(borderDrawColor, border))
|
|
||||||
{
|
|
||||||
penBorder.Alignment = PenAlignment.Outset;
|
|
||||||
pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
|
||||||
this.Region = new Region(pathSurface);
|
|
||||||
pevent.Graphics.DrawPath(penSurface, pathSurface);
|
|
||||||
pevent.Graphics.DrawPath(penBorder, pathBorder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
142
app/Settings.Designer.cs
generated
142
app/Settings.Designer.cs
generated
@@ -34,9 +34,9 @@ namespace GHelper
|
|||||||
panelMatrix = new Panel();
|
panelMatrix = new Panel();
|
||||||
checkMatrix = new CheckBox();
|
checkMatrix = new CheckBox();
|
||||||
tableLayoutMatrix = new TableLayoutPanel();
|
tableLayoutMatrix = new TableLayoutPanel();
|
||||||
comboMatrix = new ComboBox();
|
comboMatrix = new RComboBox();
|
||||||
buttonMatrix = new Button();
|
buttonMatrix = new RButton();
|
||||||
comboMatrixRunning = new ComboBox();
|
comboMatrixRunning = new RComboBox();
|
||||||
pictureMatrix = new PictureBox();
|
pictureMatrix = new PictureBox();
|
||||||
labelMatrix = new Label();
|
labelMatrix = new Label();
|
||||||
panelBattery = new Panel();
|
panelBattery = new Panel();
|
||||||
@@ -46,45 +46,46 @@ namespace GHelper
|
|||||||
labelBatteryTitle = new Label();
|
labelBatteryTitle = new Label();
|
||||||
trackBattery = new TrackBar();
|
trackBattery = new TrackBar();
|
||||||
panelFooter = new Panel();
|
panelFooter = new Panel();
|
||||||
buttonQuit = new Button();
|
buttonQuit = new RButton();
|
||||||
checkStartup = new CheckBox();
|
checkStartup = new CheckBox();
|
||||||
panelPerformance = new Panel();
|
panelPerformance = new Panel();
|
||||||
picturePerf = new PictureBox();
|
picturePerf = new PictureBox();
|
||||||
labelPerf = new Label();
|
labelPerf = new Label();
|
||||||
labelCPUFan = new Label();
|
labelCPUFan = new Label();
|
||||||
tablePerf = new TableLayoutPanel();
|
tablePerf = new TableLayoutPanel();
|
||||||
buttonSilent = new RoundedButton();
|
buttonSilent = new RButton();
|
||||||
buttonBalanced = new RoundedButton();
|
buttonBalanced = new RButton();
|
||||||
buttonTurbo = new RoundedButton();
|
buttonTurbo = new RButton();
|
||||||
buttonFans = new Button();
|
buttonFans = new RButton();
|
||||||
panelGPU = new Panel();
|
panelGPU = new Panel();
|
||||||
labelTipGPU = new Label();
|
labelTipGPU = new Label();
|
||||||
pictureGPU = new PictureBox();
|
pictureGPU = new PictureBox();
|
||||||
labelGPU = new Label();
|
labelGPU = new Label();
|
||||||
labelGPUFan = new Label();
|
labelGPUFan = new Label();
|
||||||
tableGPU = new TableLayoutPanel();
|
tableGPU = new TableLayoutPanel();
|
||||||
buttonEco = new RoundedButton();
|
buttonEco = new RButton();
|
||||||
buttonStandard = new RoundedButton();
|
buttonStandard = new RButton();
|
||||||
buttonOptimized = new RoundedButton();
|
buttonOptimized = new RButton();
|
||||||
buttonUltimate = new RoundedButton();
|
buttonUltimate = new RButton();
|
||||||
panelScreen = new Panel();
|
panelScreen = new Panel();
|
||||||
labelTipScreen = new Label();
|
labelTipScreen = new Label();
|
||||||
tableScreen = new TableLayoutPanel();
|
tableScreen = new TableLayoutPanel();
|
||||||
buttonScreenAuto = new RoundedButton();
|
buttonScreenAuto = new RButton();
|
||||||
button60Hz = new RoundedButton();
|
button60Hz = new RButton();
|
||||||
button120Hz = new RoundedButton();
|
button120Hz = new RButton();
|
||||||
pictureScreen = new PictureBox();
|
pictureScreen = new PictureBox();
|
||||||
labelSreen = new Label();
|
labelSreen = new Label();
|
||||||
panelKeyboard = new Panel();
|
panelKeyboard = new Panel();
|
||||||
tableLayoutKeyboard = new TableLayoutPanel();
|
tableLayoutKeyboard = new TableLayoutPanel();
|
||||||
buttonKeyboard = new Button();
|
buttonKeyboard = new RButton();
|
||||||
comboKeyboard = new ComboBox();
|
comboKeyboard = new RComboBox();
|
||||||
panelColor = new Panel();
|
panelColor = new Panel();
|
||||||
pictureColor2 = new PictureBox();
|
pictureColor2 = new PictureBox();
|
||||||
pictureColor = new PictureBox();
|
pictureColor = new PictureBox();
|
||||||
buttonKeyboardColor = new Button();
|
buttonKeyboardColor = new RButton();
|
||||||
pictureKeyboard = new PictureBox();
|
pictureKeyboard = new PictureBox();
|
||||||
labelKeyboard = new Label();
|
labelKeyboard = new Label();
|
||||||
|
buttonMiniled = new RButton();
|
||||||
panelMatrix.SuspendLayout();
|
panelMatrix.SuspendLayout();
|
||||||
tableLayoutMatrix.SuspendLayout();
|
tableLayoutMatrix.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)pictureMatrix).BeginInit();
|
((System.ComponentModel.ISupportInitialize)pictureMatrix).BeginInit();
|
||||||
@@ -160,6 +161,8 @@ namespace GHelper
|
|||||||
//
|
//
|
||||||
// comboMatrix
|
// comboMatrix
|
||||||
//
|
//
|
||||||
|
comboMatrix.BorderColor = Color.White;
|
||||||
|
comboMatrix.ButtonColor = SystemColors.ControlLight;
|
||||||
comboMatrix.Dock = DockStyle.Top;
|
comboMatrix.Dock = DockStyle.Top;
|
||||||
comboMatrix.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
comboMatrix.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
||||||
comboMatrix.FormattingEnabled = true;
|
comboMatrix.FormattingEnabled = true;
|
||||||
@@ -174,12 +177,16 @@ namespace GHelper
|
|||||||
//
|
//
|
||||||
// buttonMatrix
|
// buttonMatrix
|
||||||
//
|
//
|
||||||
buttonMatrix.BackColor = SystemColors.ButtonFace;
|
buttonMatrix.Activated = false;
|
||||||
|
buttonMatrix.BackColor = SystemColors.ControlLight;
|
||||||
|
buttonMatrix.BorderColor = Color.Transparent;
|
||||||
buttonMatrix.Dock = DockStyle.Top;
|
buttonMatrix.Dock = DockStyle.Top;
|
||||||
buttonMatrix.FlatAppearance.BorderSize = 0;
|
buttonMatrix.FlatAppearance.BorderSize = 0;
|
||||||
|
buttonMatrix.FlatStyle = FlatStyle.Flat;
|
||||||
buttonMatrix.Location = new Point(390, 8);
|
buttonMatrix.Location = new Point(390, 8);
|
||||||
buttonMatrix.Margin = new Padding(4, 8, 4, 8);
|
buttonMatrix.Margin = new Padding(4, 8, 4, 8);
|
||||||
buttonMatrix.Name = "buttonMatrix";
|
buttonMatrix.Name = "buttonMatrix";
|
||||||
|
buttonMatrix.Secondary = true;
|
||||||
buttonMatrix.Size = new Size(185, 44);
|
buttonMatrix.Size = new Size(185, 44);
|
||||||
buttonMatrix.TabIndex = 43;
|
buttonMatrix.TabIndex = 43;
|
||||||
buttonMatrix.Text = "Picture / Gif";
|
buttonMatrix.Text = "Picture / Gif";
|
||||||
@@ -187,6 +194,8 @@ namespace GHelper
|
|||||||
//
|
//
|
||||||
// comboMatrixRunning
|
// comboMatrixRunning
|
||||||
//
|
//
|
||||||
|
comboMatrixRunning.BorderColor = Color.White;
|
||||||
|
comboMatrixRunning.ButtonColor = SystemColors.ControlLight;
|
||||||
comboMatrixRunning.Dock = DockStyle.Top;
|
comboMatrixRunning.Dock = DockStyle.Top;
|
||||||
comboMatrixRunning.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
comboMatrixRunning.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
||||||
comboMatrixRunning.FormattingEnabled = true;
|
comboMatrixRunning.FormattingEnabled = true;
|
||||||
@@ -314,11 +323,15 @@ namespace GHelper
|
|||||||
//
|
//
|
||||||
// buttonQuit
|
// buttonQuit
|
||||||
//
|
//
|
||||||
|
buttonQuit.Activated = false;
|
||||||
buttonQuit.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
buttonQuit.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||||
buttonQuit.BackColor = SystemColors.ButtonFace;
|
buttonQuit.BackColor = SystemColors.ControlLight;
|
||||||
|
buttonQuit.BorderColor = Color.Transparent;
|
||||||
|
buttonQuit.FlatStyle = FlatStyle.Flat;
|
||||||
buttonQuit.Location = new Point(578, 16);
|
buttonQuit.Location = new Point(578, 16);
|
||||||
buttonQuit.Margin = new Padding(8, 4, 8, 4);
|
buttonQuit.Margin = new Padding(8, 4, 8, 4);
|
||||||
buttonQuit.Name = "buttonQuit";
|
buttonQuit.Name = "buttonQuit";
|
||||||
|
buttonQuit.Secondary = true;
|
||||||
buttonQuit.Size = new Size(208, 44);
|
buttonQuit.Size = new Size(208, 44);
|
||||||
buttonQuit.TabIndex = 18;
|
buttonQuit.TabIndex = 18;
|
||||||
buttonQuit.Text = "Quit";
|
buttonQuit.Text = "Quit";
|
||||||
@@ -423,6 +436,7 @@ namespace GHelper
|
|||||||
buttonSilent.Location = new Point(4, 4);
|
buttonSilent.Location = new Point(4, 4);
|
||||||
buttonSilent.Margin = new Padding(4);
|
buttonSilent.Margin = new Padding(4);
|
||||||
buttonSilent.Name = "buttonSilent";
|
buttonSilent.Name = "buttonSilent";
|
||||||
|
buttonSilent.Secondary = false;
|
||||||
buttonSilent.Size = new Size(185, 120);
|
buttonSilent.Size = new Size(185, 120);
|
||||||
buttonSilent.TabIndex = 0;
|
buttonSilent.TabIndex = 0;
|
||||||
buttonSilent.Text = "Silent";
|
buttonSilent.Text = "Silent";
|
||||||
@@ -443,6 +457,7 @@ namespace GHelper
|
|||||||
buttonBalanced.Location = new Point(197, 4);
|
buttonBalanced.Location = new Point(197, 4);
|
||||||
buttonBalanced.Margin = new Padding(4);
|
buttonBalanced.Margin = new Padding(4);
|
||||||
buttonBalanced.Name = "buttonBalanced";
|
buttonBalanced.Name = "buttonBalanced";
|
||||||
|
buttonBalanced.Secondary = false;
|
||||||
buttonBalanced.Size = new Size(185, 120);
|
buttonBalanced.Size = new Size(185, 120);
|
||||||
buttonBalanced.TabIndex = 1;
|
buttonBalanced.TabIndex = 1;
|
||||||
buttonBalanced.Text = "Balanced";
|
buttonBalanced.Text = "Balanced";
|
||||||
@@ -463,6 +478,7 @@ namespace GHelper
|
|||||||
buttonTurbo.Location = new Point(390, 4);
|
buttonTurbo.Location = new Point(390, 4);
|
||||||
buttonTurbo.Margin = new Padding(4);
|
buttonTurbo.Margin = new Padding(4);
|
||||||
buttonTurbo.Name = "buttonTurbo";
|
buttonTurbo.Name = "buttonTurbo";
|
||||||
|
buttonTurbo.Secondary = false;
|
||||||
buttonTurbo.Size = new Size(185, 120);
|
buttonTurbo.Size = new Size(185, 120);
|
||||||
buttonTurbo.TabIndex = 2;
|
buttonTurbo.TabIndex = 2;
|
||||||
buttonTurbo.Text = "Turbo";
|
buttonTurbo.Text = "Turbo";
|
||||||
@@ -471,14 +487,18 @@ namespace GHelper
|
|||||||
//
|
//
|
||||||
// buttonFans
|
// buttonFans
|
||||||
//
|
//
|
||||||
buttonFans.BackColor = SystemColors.ButtonFace;
|
buttonFans.Activated = false;
|
||||||
|
buttonFans.BackColor = SystemColors.ControlLight;
|
||||||
|
buttonFans.BorderColor = Color.Transparent;
|
||||||
buttonFans.Dock = DockStyle.Fill;
|
buttonFans.Dock = DockStyle.Fill;
|
||||||
buttonFans.FlatAppearance.BorderSize = 0;
|
buttonFans.FlatAppearance.BorderSize = 0;
|
||||||
|
buttonFans.FlatStyle = FlatStyle.Flat;
|
||||||
buttonFans.Image = Properties.Resources.icons8_fan_48;
|
buttonFans.Image = Properties.Resources.icons8_fan_48;
|
||||||
buttonFans.ImageAlign = ContentAlignment.BottomCenter;
|
buttonFans.ImageAlign = ContentAlignment.BottomCenter;
|
||||||
buttonFans.Location = new Point(583, 4);
|
buttonFans.Location = new Point(583, 4);
|
||||||
buttonFans.Margin = new Padding(4);
|
buttonFans.Margin = new Padding(4);
|
||||||
buttonFans.Name = "buttonFans";
|
buttonFans.Name = "buttonFans";
|
||||||
|
buttonFans.Secondary = true;
|
||||||
buttonFans.Size = new Size(185, 120);
|
buttonFans.Size = new Size(185, 120);
|
||||||
buttonFans.TabIndex = 35;
|
buttonFans.TabIndex = 35;
|
||||||
buttonFans.Text = "Fans + Power";
|
buttonFans.Text = "Fans + Power";
|
||||||
@@ -582,6 +602,7 @@ namespace GHelper
|
|||||||
buttonEco.Location = new Point(4, 4);
|
buttonEco.Location = new Point(4, 4);
|
||||||
buttonEco.Margin = new Padding(4);
|
buttonEco.Margin = new Padding(4);
|
||||||
buttonEco.Name = "buttonEco";
|
buttonEco.Name = "buttonEco";
|
||||||
|
buttonEco.Secondary = false;
|
||||||
buttonEco.Size = new Size(185, 120);
|
buttonEco.Size = new Size(185, 120);
|
||||||
buttonEco.TabIndex = 0;
|
buttonEco.TabIndex = 0;
|
||||||
buttonEco.Text = "Eco";
|
buttonEco.Text = "Eco";
|
||||||
@@ -602,6 +623,7 @@ namespace GHelper
|
|||||||
buttonStandard.Location = new Point(197, 4);
|
buttonStandard.Location = new Point(197, 4);
|
||||||
buttonStandard.Margin = new Padding(4);
|
buttonStandard.Margin = new Padding(4);
|
||||||
buttonStandard.Name = "buttonStandard";
|
buttonStandard.Name = "buttonStandard";
|
||||||
|
buttonStandard.Secondary = false;
|
||||||
buttonStandard.Size = new Size(185, 120);
|
buttonStandard.Size = new Size(185, 120);
|
||||||
buttonStandard.TabIndex = 1;
|
buttonStandard.TabIndex = 1;
|
||||||
buttonStandard.Text = "Standard";
|
buttonStandard.Text = "Standard";
|
||||||
@@ -622,6 +644,7 @@ namespace GHelper
|
|||||||
buttonOptimized.Location = new Point(583, 4);
|
buttonOptimized.Location = new Point(583, 4);
|
||||||
buttonOptimized.Margin = new Padding(4);
|
buttonOptimized.Margin = new Padding(4);
|
||||||
buttonOptimized.Name = "buttonOptimized";
|
buttonOptimized.Name = "buttonOptimized";
|
||||||
|
buttonOptimized.Secondary = false;
|
||||||
buttonOptimized.Size = new Size(185, 120);
|
buttonOptimized.Size = new Size(185, 120);
|
||||||
buttonOptimized.TabIndex = 3;
|
buttonOptimized.TabIndex = 3;
|
||||||
buttonOptimized.Text = "Optimized";
|
buttonOptimized.Text = "Optimized";
|
||||||
@@ -642,6 +665,7 @@ namespace GHelper
|
|||||||
buttonUltimate.Location = new Point(390, 4);
|
buttonUltimate.Location = new Point(390, 4);
|
||||||
buttonUltimate.Margin = new Padding(4);
|
buttonUltimate.Margin = new Padding(4);
|
||||||
buttonUltimate.Name = "buttonUltimate";
|
buttonUltimate.Name = "buttonUltimate";
|
||||||
|
buttonUltimate.Secondary = false;
|
||||||
buttonUltimate.Size = new Size(185, 120);
|
buttonUltimate.Size = new Size(185, 120);
|
||||||
buttonUltimate.TabIndex = 2;
|
buttonUltimate.TabIndex = 2;
|
||||||
buttonUltimate.Text = "Ultimate";
|
buttonUltimate.Text = "Ultimate";
|
||||||
@@ -686,6 +710,8 @@ namespace GHelper
|
|||||||
tableScreen.Controls.Add(buttonScreenAuto, 0, 0);
|
tableScreen.Controls.Add(buttonScreenAuto, 0, 0);
|
||||||
tableScreen.Controls.Add(button60Hz, 1, 0);
|
tableScreen.Controls.Add(button60Hz, 1, 0);
|
||||||
tableScreen.Controls.Add(button120Hz, 2, 0);
|
tableScreen.Controls.Add(button120Hz, 2, 0);
|
||||||
|
tableScreen.Controls.Add(buttonMiniled, 3, 0);
|
||||||
|
|
||||||
tableScreen.Location = new Point(16, 51);
|
tableScreen.Location = new Point(16, 51);
|
||||||
tableScreen.Margin = new Padding(8, 4, 8, 4);
|
tableScreen.Margin = new Padding(8, 4, 8, 4);
|
||||||
tableScreen.Name = "tableScreen";
|
tableScreen.Name = "tableScreen";
|
||||||
@@ -706,6 +732,7 @@ namespace GHelper
|
|||||||
buttonScreenAuto.Location = new Point(4, 4);
|
buttonScreenAuto.Location = new Point(4, 4);
|
||||||
buttonScreenAuto.Margin = new Padding(4);
|
buttonScreenAuto.Margin = new Padding(4);
|
||||||
buttonScreenAuto.Name = "buttonScreenAuto";
|
buttonScreenAuto.Name = "buttonScreenAuto";
|
||||||
|
buttonScreenAuto.Secondary = false;
|
||||||
buttonScreenAuto.Size = new Size(185, 72);
|
buttonScreenAuto.Size = new Size(185, 72);
|
||||||
buttonScreenAuto.TabIndex = 0;
|
buttonScreenAuto.TabIndex = 0;
|
||||||
buttonScreenAuto.Text = "Auto";
|
buttonScreenAuto.Text = "Auto";
|
||||||
@@ -724,6 +751,7 @@ namespace GHelper
|
|||||||
button60Hz.Location = new Point(197, 4);
|
button60Hz.Location = new Point(197, 4);
|
||||||
button60Hz.Margin = new Padding(4);
|
button60Hz.Margin = new Padding(4);
|
||||||
button60Hz.Name = "button60Hz";
|
button60Hz.Name = "button60Hz";
|
||||||
|
button60Hz.Secondary = false;
|
||||||
button60Hz.Size = new Size(185, 72);
|
button60Hz.Size = new Size(185, 72);
|
||||||
button60Hz.TabIndex = 1;
|
button60Hz.TabIndex = 1;
|
||||||
button60Hz.Text = "60Hz";
|
button60Hz.Text = "60Hz";
|
||||||
@@ -741,6 +769,7 @@ namespace GHelper
|
|||||||
button120Hz.Location = new Point(390, 4);
|
button120Hz.Location = new Point(390, 4);
|
||||||
button120Hz.Margin = new Padding(4);
|
button120Hz.Margin = new Padding(4);
|
||||||
button120Hz.Name = "button120Hz";
|
button120Hz.Name = "button120Hz";
|
||||||
|
button120Hz.Secondary = false;
|
||||||
button120Hz.Size = new Size(185, 72);
|
button120Hz.Size = new Size(185, 72);
|
||||||
button120Hz.TabIndex = 2;
|
button120Hz.TabIndex = 2;
|
||||||
button120Hz.Text = "120Hz + OD";
|
button120Hz.Text = "120Hz + OD";
|
||||||
@@ -806,12 +835,16 @@ namespace GHelper
|
|||||||
//
|
//
|
||||||
// buttonKeyboard
|
// buttonKeyboard
|
||||||
//
|
//
|
||||||
buttonKeyboard.BackColor = SystemColors.ButtonFace;
|
buttonKeyboard.Activated = false;
|
||||||
|
buttonKeyboard.BackColor = SystemColors.ControlLight;
|
||||||
|
buttonKeyboard.BorderColor = Color.Transparent;
|
||||||
buttonKeyboard.Dock = DockStyle.Top;
|
buttonKeyboard.Dock = DockStyle.Top;
|
||||||
buttonKeyboard.FlatAppearance.BorderSize = 0;
|
buttonKeyboard.FlatAppearance.BorderSize = 0;
|
||||||
|
buttonKeyboard.FlatStyle = FlatStyle.Flat;
|
||||||
buttonKeyboard.Location = new Point(390, 8);
|
buttonKeyboard.Location = new Point(390, 8);
|
||||||
buttonKeyboard.Margin = new Padding(4, 8, 4, 8);
|
buttonKeyboard.Margin = new Padding(4, 8, 4, 8);
|
||||||
buttonKeyboard.Name = "buttonKeyboard";
|
buttonKeyboard.Name = "buttonKeyboard";
|
||||||
|
buttonKeyboard.Secondary = true;
|
||||||
buttonKeyboard.Size = new Size(185, 44);
|
buttonKeyboard.Size = new Size(185, 44);
|
||||||
buttonKeyboard.TabIndex = 37;
|
buttonKeyboard.TabIndex = 37;
|
||||||
buttonKeyboard.Text = "Extra";
|
buttonKeyboard.Text = "Extra";
|
||||||
@@ -819,7 +852,10 @@ namespace GHelper
|
|||||||
//
|
//
|
||||||
// comboKeyboard
|
// comboKeyboard
|
||||||
//
|
//
|
||||||
|
comboKeyboard.BorderColor = Color.White;
|
||||||
|
comboKeyboard.ButtonColor = SystemColors.ControlLight;
|
||||||
comboKeyboard.Dock = DockStyle.Top;
|
comboKeyboard.Dock = DockStyle.Top;
|
||||||
|
comboKeyboard.FlatStyle = FlatStyle.Flat;
|
||||||
comboKeyboard.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
comboKeyboard.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
||||||
comboKeyboard.FormattingEnabled = true;
|
comboKeyboard.FormattingEnabled = true;
|
||||||
comboKeyboard.ItemHeight = 32;
|
comboKeyboard.ItemHeight = 32;
|
||||||
@@ -866,14 +902,16 @@ namespace GHelper
|
|||||||
//
|
//
|
||||||
// buttonKeyboardColor
|
// buttonKeyboardColor
|
||||||
//
|
//
|
||||||
|
buttonKeyboardColor.Activated = false;
|
||||||
buttonKeyboardColor.BackColor = SystemColors.ButtonHighlight;
|
buttonKeyboardColor.BackColor = SystemColors.ButtonHighlight;
|
||||||
|
buttonKeyboardColor.BorderColor = Color.Transparent;
|
||||||
buttonKeyboardColor.Dock = DockStyle.Top;
|
buttonKeyboardColor.Dock = DockStyle.Top;
|
||||||
buttonKeyboardColor.FlatAppearance.BorderColor = Color.Red;
|
buttonKeyboardColor.FlatStyle = FlatStyle.Flat;
|
||||||
buttonKeyboardColor.FlatAppearance.BorderSize = 2;
|
|
||||||
buttonKeyboardColor.ForeColor = SystemColors.ControlText;
|
buttonKeyboardColor.ForeColor = SystemColors.ControlText;
|
||||||
buttonKeyboardColor.Location = new Point(0, 0);
|
buttonKeyboardColor.Location = new Point(0, 0);
|
||||||
buttonKeyboardColor.Margin = new Padding(4, 8, 4, 8);
|
buttonKeyboardColor.Margin = new Padding(4, 8, 4, 8);
|
||||||
buttonKeyboardColor.Name = "buttonKeyboardColor";
|
buttonKeyboardColor.Name = "buttonKeyboardColor";
|
||||||
|
buttonKeyboardColor.Secondary = false;
|
||||||
buttonKeyboardColor.Size = new Size(185, 44);
|
buttonKeyboardColor.Size = new Size(185, 44);
|
||||||
buttonKeyboardColor.TabIndex = 39;
|
buttonKeyboardColor.TabIndex = 39;
|
||||||
buttonKeyboardColor.Text = "Color ";
|
buttonKeyboardColor.Text = "Color ";
|
||||||
@@ -901,6 +939,25 @@ namespace GHelper
|
|||||||
labelKeyboard.TabIndex = 32;
|
labelKeyboard.TabIndex = 32;
|
||||||
labelKeyboard.Text = "Laptop Keyboard";
|
labelKeyboard.Text = "Laptop Keyboard";
|
||||||
//
|
//
|
||||||
|
// buttonMiniled
|
||||||
|
//
|
||||||
|
buttonMiniled.Activated = false;
|
||||||
|
buttonMiniled.BackColor = SystemColors.ControlLightLight;
|
||||||
|
buttonMiniled.BorderColor = Color.Transparent;
|
||||||
|
buttonMiniled.CausesValidation = false;
|
||||||
|
buttonMiniled.Dock = DockStyle.Fill;
|
||||||
|
buttonMiniled.FlatAppearance.BorderSize = 0;
|
||||||
|
buttonMiniled.FlatStyle = FlatStyle.Flat;
|
||||||
|
buttonMiniled.ForeColor = SystemColors.ControlText;
|
||||||
|
buttonMiniled.Location = new Point(197, 4);
|
||||||
|
buttonMiniled.Margin = new Padding(4);
|
||||||
|
buttonMiniled.Name = "buttonMiniled";
|
||||||
|
buttonMiniled.Secondary = false;
|
||||||
|
buttonMiniled.Size = new Size(185, 72);
|
||||||
|
buttonMiniled.TabIndex = 3;
|
||||||
|
buttonMiniled.Text = "Miniled";
|
||||||
|
buttonMiniled.UseVisualStyleBackColor = false;
|
||||||
|
//
|
||||||
// SettingsForm
|
// SettingsForm
|
||||||
//
|
//
|
||||||
AutoScaleDimensions = new SizeF(192F, 192F);
|
AutoScaleDimensions = new SizeF(192F, 192F);
|
||||||
@@ -971,49 +1028,50 @@ namespace GHelper
|
|||||||
private Label labelBatteryTitle;
|
private Label labelBatteryTitle;
|
||||||
private TrackBar trackBattery;
|
private TrackBar trackBattery;
|
||||||
private Panel panelFooter;
|
private Panel panelFooter;
|
||||||
private Button buttonQuit;
|
private RButton buttonQuit;
|
||||||
private CheckBox checkStartup;
|
private CheckBox checkStartup;
|
||||||
private Panel panelPerformance;
|
private Panel panelPerformance;
|
||||||
private PictureBox picturePerf;
|
private PictureBox picturePerf;
|
||||||
private Label labelPerf;
|
private Label labelPerf;
|
||||||
private Label labelCPUFan;
|
private Label labelCPUFan;
|
||||||
private TableLayoutPanel tablePerf;
|
private TableLayoutPanel tablePerf;
|
||||||
private RoundedButton buttonTurbo;
|
private RButton buttonTurbo;
|
||||||
private RoundedButton buttonBalanced;
|
private RButton buttonBalanced;
|
||||||
private RoundedButton buttonSilent;
|
private RButton buttonSilent;
|
||||||
private Panel panelGPU;
|
private Panel panelGPU;
|
||||||
private PictureBox pictureGPU;
|
private PictureBox pictureGPU;
|
||||||
private Label labelGPU;
|
private Label labelGPU;
|
||||||
private Label labelGPUFan;
|
private Label labelGPUFan;
|
||||||
private TableLayoutPanel tableGPU;
|
private TableLayoutPanel tableGPU;
|
||||||
private RoundedButton buttonUltimate;
|
private RButton buttonUltimate;
|
||||||
private RoundedButton buttonStandard;
|
private RButton buttonStandard;
|
||||||
private RoundedButton buttonEco;
|
private RButton buttonEco;
|
||||||
private Panel panelScreen;
|
private Panel panelScreen;
|
||||||
private TableLayoutPanel tableScreen;
|
private TableLayoutPanel tableScreen;
|
||||||
private RoundedButton buttonScreenAuto;
|
private RButton buttonScreenAuto;
|
||||||
private RoundedButton button60Hz;
|
private RButton button60Hz;
|
||||||
private PictureBox pictureScreen;
|
private PictureBox pictureScreen;
|
||||||
private Label labelSreen;
|
private Label labelSreen;
|
||||||
private Panel panelKeyboard;
|
private Panel panelKeyboard;
|
||||||
private PictureBox pictureKeyboard;
|
private PictureBox pictureKeyboard;
|
||||||
private Label labelKeyboard;
|
private Label labelKeyboard;
|
||||||
private TableLayoutPanel tableLayoutMatrix;
|
private TableLayoutPanel tableLayoutMatrix;
|
||||||
private Button buttonMatrix;
|
private RComboBox comboMatrixRunning;
|
||||||
private ComboBox comboMatrixRunning;
|
private RComboBox comboMatrix;
|
||||||
private ComboBox comboMatrix;
|
|
||||||
private TableLayoutPanel tableLayoutKeyboard;
|
private TableLayoutPanel tableLayoutKeyboard;
|
||||||
private Button buttonKeyboard;
|
private RComboBox comboKeyboard;
|
||||||
private ComboBox comboKeyboard;
|
|
||||||
private Panel panelColor;
|
private Panel panelColor;
|
||||||
private PictureBox pictureColor2;
|
private PictureBox pictureColor2;
|
||||||
private PictureBox pictureColor;
|
private PictureBox pictureColor;
|
||||||
private Button buttonKeyboardColor;
|
|
||||||
private CheckBox checkMatrix;
|
private CheckBox checkMatrix;
|
||||||
private RoundedButton button120Hz;
|
private RButton button120Hz;
|
||||||
private Button buttonFans;
|
private RButton buttonOptimized;
|
||||||
private RoundedButton buttonOptimized;
|
|
||||||
private Label labelTipGPU;
|
private Label labelTipGPU;
|
||||||
private Label labelTipScreen;
|
private Label labelTipScreen;
|
||||||
|
private RButton buttonMiniled;
|
||||||
|
private RButton buttonMatrix;
|
||||||
|
private RButton buttonKeyboard;
|
||||||
|
private RButton buttonKeyboardColor;
|
||||||
|
private RButton buttonFans;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
110
app/Settings.cs
110
app/Settings.cs
@@ -1,4 +1,5 @@
|
|||||||
using Starlight.AnimeMatrix;
|
using CustomControls;
|
||||||
|
using Starlight.AnimeMatrix;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using System.Timers;
|
using System.Timers;
|
||||||
@@ -6,13 +7,9 @@ using System.Timers;
|
|||||||
namespace GHelper
|
namespace GHelper
|
||||||
{
|
{
|
||||||
|
|
||||||
public partial class SettingsForm : Form
|
public partial class SettingsForm : RForm
|
||||||
{
|
{
|
||||||
|
|
||||||
static Color colorEco = Color.FromArgb(255, 6, 180, 138);
|
|
||||||
static Color colorStandard = Color.FromArgb(255, 58, 174, 239);
|
|
||||||
static Color colorTurbo = Color.FromArgb(255, 255, 32, 32);
|
|
||||||
|
|
||||||
static System.Timers.Timer aTimer = default!;
|
static System.Timers.Timer aTimer = default!;
|
||||||
static System.Timers.Timer matrixTimer = default!;
|
static System.Timers.Timer matrixTimer = default!;
|
||||||
|
|
||||||
@@ -20,16 +17,15 @@ namespace GHelper
|
|||||||
|
|
||||||
public string perfName = "Balanced";
|
public string perfName = "Balanced";
|
||||||
|
|
||||||
Fans fans;
|
public Fans fans;
|
||||||
Keyboard keyb;
|
public Keyboard keyb;
|
||||||
|
|
||||||
static AnimeMatrixDevice mat;
|
static AnimeMatrixDevice mat;
|
||||||
|
|
||||||
public SettingsForm()
|
public SettingsForm()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
InitTheme();
|
||||||
HighDpiHelper.AdjustControlImagesDpiScale(this, 2);
|
|
||||||
|
|
||||||
FormClosing += SettingsForm_FormClosing;
|
FormClosing += SettingsForm_FormClosing;
|
||||||
|
|
||||||
@@ -45,6 +41,7 @@ namespace GHelper
|
|||||||
button60Hz.BorderColor = SystemColors.ActiveBorder;
|
button60Hz.BorderColor = SystemColors.ActiveBorder;
|
||||||
button120Hz.BorderColor = SystemColors.ActiveBorder;
|
button120Hz.BorderColor = SystemColors.ActiveBorder;
|
||||||
buttonScreenAuto.BorderColor = SystemColors.ActiveBorder;
|
buttonScreenAuto.BorderColor = SystemColors.ActiveBorder;
|
||||||
|
buttonMiniled.BorderColor = colorTurbo;
|
||||||
|
|
||||||
buttonOptimized.Click += ButtonOptimized_Click;
|
buttonOptimized.Click += ButtonOptimized_Click;
|
||||||
buttonSilent.Click += ButtonSilent_Click;
|
buttonSilent.Click += ButtonSilent_Click;
|
||||||
@@ -62,6 +59,7 @@ namespace GHelper
|
|||||||
button60Hz.Click += Button60Hz_Click;
|
button60Hz.Click += Button60Hz_Click;
|
||||||
button120Hz.Click += Button120Hz_Click;
|
button120Hz.Click += Button120Hz_Click;
|
||||||
buttonScreenAuto.Click += ButtonScreenAuto_Click;
|
buttonScreenAuto.Click += ButtonScreenAuto_Click;
|
||||||
|
buttonMiniled.Click += ButtonMiniled_Click;
|
||||||
|
|
||||||
buttonQuit.Click += ButtonQuit_Click;
|
buttonQuit.Click += ButtonQuit_Click;
|
||||||
|
|
||||||
@@ -93,6 +91,7 @@ namespace GHelper
|
|||||||
checkStartup.CheckedChanged += CheckStartup_CheckedChanged;
|
checkStartup.CheckedChanged += CheckStartup_CheckedChanged;
|
||||||
|
|
||||||
labelVersion.Click += LabelVersion_Click;
|
labelVersion.Click += LabelVersion_Click;
|
||||||
|
labelVersion.ForeColor = Color.FromArgb(128, Color.Gray);
|
||||||
|
|
||||||
buttonOptimized.MouseMove += ButtonOptimized_MouseHover;
|
buttonOptimized.MouseMove += ButtonOptimized_MouseHover;
|
||||||
buttonOptimized.MouseLeave += ButtonGPU_MouseLeave;
|
buttonOptimized.MouseLeave += ButtonGPU_MouseLeave;
|
||||||
@@ -121,6 +120,7 @@ namespace GHelper
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void Button120Hz_MouseHover(object? sender, EventArgs e)
|
private void Button120Hz_MouseHover(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
labelTipScreen.Text = "Max refresh rate + screen overdrive for lower latency";
|
labelTipScreen.Text = "Max refresh rate + screen overdrive for lower latency";
|
||||||
@@ -532,8 +532,8 @@ namespace GHelper
|
|||||||
int brightness = Program.config.getConfig("matrix_brightness");
|
int brightness = Program.config.getConfig("matrix_brightness");
|
||||||
int running = Program.config.getConfig("matrix_running");
|
int running = Program.config.getConfig("matrix_running");
|
||||||
|
|
||||||
comboMatrix.SelectedIndex = (brightness != -1) ? brightness : 0;
|
comboMatrix.SelectedIndex = (brightness != -1) ? Math.Min(brightness, comboMatrix.Items.Count-1) : 0;
|
||||||
comboMatrixRunning.SelectedIndex = (running != -1) ? running : 0;
|
comboMatrixRunning.SelectedIndex = (running != -1) ? Math.Min(running, comboMatrixRunning.Items.Count - 1) : 0;
|
||||||
|
|
||||||
checkMatrix.Checked = (Program.config.getConfig("matrix_auto") == 1);
|
checkMatrix.Checked = (Program.config.getConfig("matrix_auto") == 1);
|
||||||
|
|
||||||
@@ -614,13 +614,17 @@ namespace GHelper
|
|||||||
SetScreen(60, 0);
|
SetScreen(60, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ButtonMiniled_Click(object? sender, EventArgs e)
|
||||||
|
{
|
||||||
|
int miniled = (Program.config.getConfig("miniled") == 1) ? 0 : 1;
|
||||||
|
Program.config.setConfig("miniled", miniled);
|
||||||
|
SetScreen(-1, -1, miniled);
|
||||||
|
}
|
||||||
|
|
||||||
public void SetScreen(int frequency = -1, int overdrive = -1)
|
public void SetScreen(int frequency = -1, int overdrive = -1, int miniled = -1)
|
||||||
{
|
{
|
||||||
|
|
||||||
int currentFrequency = NativeMethods.GetRefreshRate();
|
if (NativeMethods.GetRefreshRate() < 0) // Laptop screen not detected or has unknown refresh rate
|
||||||
|
|
||||||
if (currentFrequency < 0) // Laptop screen not detected or has unknown refresh rate
|
|
||||||
{
|
{
|
||||||
InitScreen();
|
InitScreen();
|
||||||
return;
|
return;
|
||||||
@@ -629,19 +633,25 @@ namespace GHelper
|
|||||||
if (frequency >= 1000)
|
if (frequency >= 1000)
|
||||||
{
|
{
|
||||||
frequency = Program.config.getConfig("max_frequency");
|
frequency = Program.config.getConfig("max_frequency");
|
||||||
if (frequency <= 60)
|
if (frequency <= 60) frequency = 120;
|
||||||
frequency = 120;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (frequency <= 0) return;
|
if (frequency > 0)
|
||||||
|
{
|
||||||
|
NativeMethods.SetRefreshRate(frequency);
|
||||||
|
Logger.WriteLine("Screen " + frequency.ToString() + "Hz");
|
||||||
|
}
|
||||||
|
|
||||||
NativeMethods.SetRefreshRate(frequency);
|
|
||||||
if (overdrive >= 0)
|
if (overdrive >= 0)
|
||||||
Program.wmi.DeviceSet(ASUSWmi.ScreenOverdrive, overdrive);
|
Program.wmi.DeviceSet(ASUSWmi.ScreenOverdrive, overdrive);
|
||||||
|
|
||||||
InitScreen();
|
if (miniled >= 0)
|
||||||
|
{
|
||||||
|
Program.wmi.DeviceSet(ASUSWmi.ScreenMiniled, miniled);
|
||||||
|
Debug.WriteLine("Miniled " + miniled);
|
||||||
|
}
|
||||||
|
|
||||||
Logger.WriteLine("Screen " + frequency.ToString() + "Hz");
|
InitScreen();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -653,37 +663,19 @@ namespace GHelper
|
|||||||
|
|
||||||
bool screenAuto = (Program.config.getConfig("screen_auto") == 1);
|
bool screenAuto = (Program.config.getConfig("screen_auto") == 1);
|
||||||
|
|
||||||
int overdrive = 0;
|
int overdrive = Program.wmi.DeviceGet(ASUSWmi.ScreenOverdrive);
|
||||||
try
|
int miniled = Program.wmi.DeviceGet(ASUSWmi.ScreenMiniled);
|
||||||
{
|
|
||||||
overdrive = Program.wmi.DeviceGet(ASUSWmi.ScreenOverdrive);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
Logger.WriteLine("Screen Overdrive not supported");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (frequency < 0)
|
bool screenEnabled = (frequency >= 0);
|
||||||
{
|
|
||||||
button60Hz.Enabled = false;
|
|
||||||
button120Hz.Enabled = false;
|
|
||||||
buttonScreenAuto.Enabled = false;
|
|
||||||
labelSreen.Text = "Laptop Screen: Turned off";
|
|
||||||
button60Hz.BackColor = SystemColors.ControlLight;
|
|
||||||
button120Hz.BackColor = SystemColors.ControlLight;
|
|
||||||
buttonScreenAuto.BackColor = SystemColors.ControlLight;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
button60Hz.Enabled = true;
|
|
||||||
button120Hz.Enabled = true;
|
|
||||||
buttonScreenAuto.Enabled = true;
|
|
||||||
button60Hz.BackColor = SystemColors.ControlLightLight;
|
|
||||||
button120Hz.BackColor = SystemColors.ControlLightLight;
|
|
||||||
buttonScreenAuto.BackColor = SystemColors.ControlLightLight;
|
|
||||||
labelSreen.Text = "Laptop Screen: " + frequency + "Hz" + ((overdrive == 1) ? " + Overdrive" : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
ButtonEnabled(button60Hz, screenEnabled);
|
||||||
|
ButtonEnabled(button120Hz, screenEnabled);
|
||||||
|
ButtonEnabled(buttonScreenAuto, screenEnabled);
|
||||||
|
ButtonEnabled(buttonMiniled, screenEnabled);
|
||||||
|
|
||||||
|
labelSreen.Text = screenEnabled
|
||||||
|
? "Laptop Screen: " + frequency + "Hz" + ((overdrive == 1) ? " + Overdrive" : "")
|
||||||
|
: "Laptop Screen: Turned off";
|
||||||
|
|
||||||
button60Hz.Activated = false;
|
button60Hz.Activated = false;
|
||||||
button120Hz.Activated = false;
|
button120Hz.Activated = false;
|
||||||
@@ -711,6 +703,15 @@ namespace GHelper
|
|||||||
button120Hz.Text = maxFrequency.ToString() + "Hz + OD";
|
button120Hz.Text = maxFrequency.ToString() + "Hz + OD";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (miniled >= 0)
|
||||||
|
{
|
||||||
|
buttonMiniled.Activated = (miniled == 1);
|
||||||
|
Program.config.setConfig("miniled", miniled);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
buttonMiniled.Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
Program.config.setConfig("frequency", frequency);
|
Program.config.setConfig("frequency", frequency);
|
||||||
Program.config.setConfig("overdrive", overdrive);
|
Program.config.setConfig("overdrive", overdrive);
|
||||||
}
|
}
|
||||||
@@ -1031,12 +1032,13 @@ namespace GHelper
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Program.config.setConfig("gpu_mode", GpuMode);
|
||||||
|
|
||||||
ButtonEnabled(buttonOptimized, true);
|
ButtonEnabled(buttonOptimized, true);
|
||||||
ButtonEnabled(buttonEco, true);
|
ButtonEnabled(buttonEco, true);
|
||||||
ButtonEnabled(buttonStandard, true);
|
ButtonEnabled(buttonStandard, true);
|
||||||
ButtonEnabled(buttonUltimate, true);
|
ButtonEnabled(buttonUltimate, true);
|
||||||
|
|
||||||
Program.config.setConfig("gpu_mode", GpuMode);
|
|
||||||
VisualiseGPUMode(GpuMode);
|
VisualiseGPUMode(GpuMode);
|
||||||
|
|
||||||
return GpuMode;
|
return GpuMode;
|
||||||
@@ -1204,10 +1206,10 @@ namespace GHelper
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ButtonEnabled(Button but, bool enabled)
|
public void ButtonEnabled(RButton but, bool enabled)
|
||||||
{
|
{
|
||||||
but.Enabled = enabled;
|
but.Enabled = enabled;
|
||||||
but.BackColor = enabled ? SystemColors.ControlLightLight : SystemColors.ControlLight;
|
but.BackColor = but.Enabled ? Color.FromArgb(255, but.BackColor) : Color.FromArgb(100, but.BackColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetStartupCheck(bool status)
|
public void SetStartupCheck(bool status)
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
# [G-Helper (GHelper)](https://github.com/seerge/g-helper)
|
# [G-Helper (GHelper)](https://github.com/seerge/g-helper)
|
||||||
|
|
||||||
[](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/releases/) [](https://github.com/seerge/g-helper/blob/master/LICENSE)
|
[](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/stargazers/)
|
||||||
[](https://GitHub.com/seerge/g-helper/stargazers/)
|
|
||||||
|
|
||||||
## Open source Armory Crate alternative for Asus ROG Zephyrus G14, G15, Flow X13, Flow X16, and other models
|
## Open source Armoury Crate alternative for Asus ROG Zephyrus G14, G15, Flow X13, Flow X16, and other models
|
||||||
|
|
||||||
A small utility that allows you to do almost everything you could do with Armory Crate but without extra bloat and unnecessary services.
|
A small utility that allows you to do almost everything you could do with Armoury Crate but without extra bloat and unnecessary services.
|
||||||
|
|
||||||
### :gift: Main advantages
|
### :gift: Main advantages
|
||||||
|
|
||||||
|
|||||||
BIN
docs/screenshot-dark.png
Normal file
BIN
docs/screenshot-dark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 MiB |
Reference in New Issue
Block a user