Skip to content

Commit

Permalink
1.0.16.0 RELEASE CANDIDATE 7
Browse files Browse the repository at this point in the history
  • Loading branch information
Erruar committed Aug 31, 2024
1 parent 225b626 commit c7265db
Show file tree
Hide file tree
Showing 5 changed files with 135 additions and 24 deletions.
14 changes: 14 additions & 0 deletions Saku Overclock/Strings/en-us/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -2390,4 +2390,18 @@ Maximum: </value>
<data name="Settings_ni_Values_MinValue" xml:space="preserve">
<value>Minimum: </value>
</data>
<data name="InfoANiIcons.ToolTipService.ToolTip" xml:space="preserve">
<value>TrayMon
It's modern monitoring system tracks
your laptop's metrics by using data from
the information page and displays them
in the Windows tray menu. This way, you
can easily monitor the key metrics you
need, never miss important details, and
always stay informed about your
laptop's current performance.

The application's CPU consumption
increases slightly</value>
</data>
</root>
17 changes: 16 additions & 1 deletion Saku Overclock/Strings/ru-ru/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -2334,7 +2334,7 @@ Overclock будут проигнорированы,
использует показатели со страницы
информации, чтобы отобразить их в
трей меню Windows. Так вы сможете
наблюдать нужные вам показатели,
следить за нужными показателями,
не пропустите самое важное и всегда
будете в курсе о текущих показателях
вашего ноутбука
Expand Down Expand Up @@ -2464,4 +2464,19 @@ Overclock будут проигнорированы,
<data name="Settings_ni_Values_MinValue" xml:space="preserve">
<value>Минимум: </value>
</data>
<data name="InfoANiIcons.ToolTipService.ToolTip" xml:space="preserve">
<value>TrayMon
Это современная система мониторинга
показателей вашего ноутбука, которая
использует показатели со страницы
информации, чтобы отобразить их в
трей меню Windows. Так вы сможете
следить за нужными показателями,
не пропустите самое важное и всегда
будете в курсе о текущих показателях
вашего ноутбука

Незначительно увеличит потребление
приложением вашего процессора</value>
</data>
</root>
2 changes: 1 addition & 1 deletion Saku Overclock/ViewModels/SettingsViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public ICommand SwitchThemeCommand
get;
}

public const int VersionId = 0; //"Consumer Creative" = 0; "Release Candidate" = 1
public const int VersionId = 1; //"Consumer Creative" = 0; "Release Candidate" = 1
private static string? VersionString;

public SettingsViewModel(IThemeSelectorService themeSelectorService)
Expand Down
5 changes: 4 additions & 1 deletion Saku Overclock/Views/ИнформацияPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,15 @@

<Grid x:Name="ContentArea">
<TextBlock x:Uid="Info_Name" Text="Информация" FontSize="30" Margin="-48,-65,0,0"></TextBlock>
<ToggleButton Shadow="{StaticResource SharedShadow}" Translation="0,0,20" Click="InfoRTSSButton_Click" x:Name="infoRTSSButton" x:Uid="InfoARTSSTooltip" ToolTipService.ToolTip="Enable RTSS updater" Background="Transparent" BorderBrush="Transparent" VerticalAlignment="Top" Margin="0,-57,0,0" HorizontalAlignment="Right">
<ToggleButton Shadow="{StaticResource SharedShadow}" Translation="0,0,20" Click="InfoRTSSButton_Click" x:Name="infoRTSSButton" x:Uid="InfoARTSSTooltip" ToolTipService.ToolTip="Enable RTSS updater" Background="Transparent" BorderBrush="Transparent" VerticalAlignment="Top" Margin="0,-57,20,0" HorizontalAlignment="Right">
<StackPanel Orientation="Horizontal">
<FontIcon Glyph="&#xE7AC;"/>
<TextBlock Padding="7,0,0,0" x:Uid="InfoARTSSShowText" FontWeight="Bold" Text="Show RTSS metrics"/>
</StackPanel>
</ToggleButton>
<ToggleButton Shadow="{StaticResource SharedShadow}" Translation="0,0,20" Click="infoNiIconsButton_Click" x:Name="infoNiIconsButton" x:Uid="InfoANiIcons" ToolTipService.ToolTip="Enable RTSS updater" Background="Transparent" BorderBrush="Transparent" VerticalAlignment="Top" Margin="0,-57,-29,0" HorizontalAlignment="Right">
<FontIcon Glyph="&#xF6B8;"/>
</ToggleButton>
<TeachingTip x:Name="Info_RTSSTeacherTip" Target="{x:Bind infoRTSSButton}" Title="You have enabled RTSS metrics!" Subtitle="Now you can easily minimize Saku Overclock to tray menu and all information will be updated automatically. Saku Overclock will switch to the mode of reduced consumption of laptop resources">
<TeachingTip.IconSource>
<SymbolIconSource>
Expand Down
121 changes: 100 additions & 21 deletions Saku Overclock/Views/ИнформацияPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ public sealed partial class ИнформацияPage : Page
private JsonContainers.RTSSsettings rtssset = new();
private JsonContainers.NiIconsSettings niicons = new();
private readonly Dictionary<string, System.Windows.Forms.NotifyIcon> trayIcons = [];
private class MinMax
private class MinMax
{
public float Min;
public float Max;
}
private readonly List<MinMax> niicons_Min_MaxValues = [ new(), new(), new(), new(), new(), new(), new(), new(), new(), new(), new()];
private readonly List<MinMax> niicons_Min_MaxValues = [new(), new(), new(), new(), new(), new(), new(), new(), new(), new(), new()];
public double refreshtime;
private bool loaded = false;
private string? rtss_line;
Expand Down Expand Up @@ -93,6 +93,7 @@ public ИнформацияPage()
{
ConfigLoad();
infoRTSSButton.IsChecked = config.RTSSMetricsEnabled;
infoNiIconsButton.IsChecked = config.NiIconsEnabled;
if (config.NiIconsEnabled)
{
CreateNotifyIcons();
Expand Down Expand Up @@ -210,7 +211,7 @@ public void CreateNotifyIcons()
}
}

private System.Drawing.Icon? CreateIconFromElement(JsonContainers.NiIconsElements element)
private static System.Drawing.Icon? CreateIconFromElement(JsonContainers.NiIconsElements element)
{
// Создаём Grid виртуально и растрируем в Bitmap
// Пример создания иконки будет зависеть от элемента:
Expand Down Expand Up @@ -250,15 +251,14 @@ public void CreateNotifyIcons()
System.Windows.Forms.TextRenderer.DrawText(g, "Text", font, new System.Drawing.Point(-6, 5), InvertColor(element.Color)); // Пример текста, нужно заменить на реальный

}
catch { } // Игнорим
catch { } // Игнорим
}
try
{
return System.Drawing.Icon.FromHandle(bitmap.GetHicon());
}
catch
{
NiLoad();
{
return null;
}
}
Expand Down Expand Up @@ -311,51 +311,111 @@ public void Change_Ni_Icons_Text(string IconName, string? NewText, string? Toolt
if (element.Name == IconName)
{
// Изменяем текст на иконке (слой 2)
notifyIcon.Icon = UpdateIconText(notifyIcon.Icon, NewText, element.Color, element.FontSize, element.IconShape, element.BgOpacity);
notifyIcon.Icon = UpdateIconText(NewText, element.Color, element.FontSize, element.IconShape, element.BgOpacity, notifyIcon.Icon);

// Обновляем TooltipText, если он задан
if (TooltipText != null && notifyIcon.Text != null)
{
notifyIcon.Text = element.ContextMenuType == 2 ? TooltipText + "\n" + AdvancedTooltip : TooltipText;
}
}
}
}
}
}
catch
catch
{
CreateNotifyIcons();
}
}

private static System.Drawing.Icon UpdateIconText(System.Drawing.Icon? existingIcon, string? newText, string NewColor, int FontSize, int IconShape, double Opacity)
private static System.Drawing.Icon UpdateIconText(string ? newText, string NewColor, int FontSize, int IconShape, double Opacity, System.Drawing.Icon? oldIcon = null)
{
// Уничтожаем старую иконку, если она существует
if (oldIcon != null)
{
DestroyIcon(oldIcon.Handle); // Освобождение старой иконки
oldIcon.Dispose(); // Освобождаем ресурсы иконки
}
// Создаём новую иконку на основе существующей с новым текстом
var bitmap = new System.Drawing.Bitmap(32, 32);
var g = Graphics.FromImage(bitmap);
g.SmoothingMode = SmoothingMode.AntiAlias;

// Цвет фона и кисть
var bgColor = System.Drawing.ColorTranslator.FromHtml("#" + NewColor);
System.Drawing.Brush bgBrush = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb((int)(Opacity * 255), bgColor));
// Очищаем старый текст и рисуем новый
var bgBrush = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb((int)(Opacity * 255), bgColor));
// Рисуем фон иконки в зависимости от формы
switch (IconShape)
{
case 0: // Куб
g.FillRectangle(bgBrush, 0, 0, 32, 32);
break;
case 1: // Скруглённый куб
var path = CreateRoundedRectanglePath(new Rectangle(0, 0, 32, 32), 7);
g.FillPath(bgBrush, path!);
if (path != null)
{
g.FillPath(bgBrush, path);
}
else
{
g.FillRectangle(bgBrush, 0, 0, 32, 32);
}
break;
case 2: // Круг
g.FillEllipse(bgBrush, 0, 0, 32, 32);
break;
// Добавьте остальные фигуры и обработку ico
// Добавьте остальные фигуры и обработку ico при необходимости
default:
g.FillRectangle(bgBrush, 0, 0, 32, 32);
break;
} // Или очистить только текстовый слой, если разделено
var font = new System.Drawing.Font(new System.Drawing.FontFamily("Arial"), FontSize * 2, System.Drawing.FontStyle.Regular, GraphicsUnit.Pixel);
System.Windows.Forms.TextRenderer.DrawText(g, newText, font, new Point(-5, 6), InvertColor(NewColor));
return System.Drawing.Icon.FromHandle(bitmap.GetHicon());
}
// Определение позиции текста
var textPosition = GetTextPosition(newText, FontSize, out var NewFontSize);
// Установка шрифта
var font = new System.Drawing.Font(new System.Drawing.FontFamily("Arial"), NewFontSize * 2, System.Drawing.FontStyle.Regular, GraphicsUnit.Pixel);

// Рисуем текст
System.Windows.Forms.TextRenderer.DrawText(g, newText, font, textPosition, InvertColor(NewColor));
// Создание иконки из Bitmap
// Создание иконки из Bitmap и освобождение ресурсов
return System.Drawing.Icon.FromHandle(bitmap.GetHicon());
}
// Метод для освобождения ресурсов, используемый после GetHicon()
[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
private static extern bool DestroyIcon(IntPtr hIcon);
// Метод для вычисления позиции текста в зависимости от условий
private static Point GetTextPosition(string? newText, int fontSize, out int NewFontSize)
{
// По умолчанию позиция текста для трех символов
var position = new Point(-5, 6);

// Определение масштаба шрифта
var scale = fontSize / 9.0f;

if (newText != null)
{
// Если текст состоит из одного символа
if (newText.Contains(",") && newText.Split(',')[0].Length == 1 && newText.Split(',')[1].Length >= 2)
{
position = new Point(-5, 6);
}
if (newText.Contains(",") && newText.Split(',')[0].Length == 2 || newText.Contains(",") && newText.Split(',')[0].Length == 1 && newText.Split(',')[1].Length <= 1)
{
position = new Point(2, 6);
}
// Если текст состоит из четырёх символов
else if (newText.Contains(",") && newText.Split(',')[0].Length == 4)
{
position = new Point(-6, 8);
fontSize -= 2; // уменьшение размера шрифта на 2
}
}

// Корректируем позицию текста на основе масштаба
position.X = (int)Math.Floor(position.X * scale);
position.Y = (int)Math.Floor(position.Y * scale);
NewFontSize = fontSize;
return position;
}
private static System.Drawing.Color InvertColor(string Color)
{
Expand Down Expand Up @@ -742,7 +802,7 @@ private void Window_VisibilityChanged(object sender, WindowVisibilityChangedEven
}
else
{
if (infoRTSSButton.IsChecked == false)
if (infoRTSSButton.IsChecked == false && config.NiIconsEnabled == false)
{
dispatcherTimer?.Stop();
IsAppInTray = true;
Expand Down Expand Up @@ -1342,7 +1402,7 @@ private void UpdateInfoAsync()
.Replace("$average_cpu_clock$", Math.Round(avgCoreCLK / numberOfCores, 3).ToString())
.Replace("$average_cpu_voltage$", Math.Round(avgCoreVolt / numberOfCores, 3).ToString());


if (niicons_Min_MaxValues[0].Min == 0.0f) { niicons_Min_MaxValues[0].Min = RyzenADJWrapper.get_stapm_value(ryzenAccess); }
if (niicons_Min_MaxValues[1].Min == 0.0f) { niicons_Min_MaxValues[1].Min = RyzenADJWrapper.get_fast_value(ryzenAccess); }
if (niicons_Min_MaxValues[2].Min == 0.0f) { niicons_Min_MaxValues[2].Min = RyzenADJWrapper.get_slow_value(ryzenAccess); }
Expand Down Expand Up @@ -1676,6 +1736,25 @@ private async void InfoRTSSButton_Click(object sender, RoutedEventArgs e)
await Task.Delay(3000);
Info_RTSSTeacherTip.IsOpen = false;
}
if (!loaded) { return; }
ConfigLoad();
config.RTSSMetricsEnabled = infoRTSSButton.IsChecked == true;
ConfigSave();
}
private void infoNiIconsButton_Click(object sender, RoutedEventArgs e)
{
if (!loaded) { return; }
if (infoNiIconsButton.IsChecked == true)
{
CreateNotifyIcons();
}
else
{
DisposeAllNotifyIcons();
}
ConfigLoad();
config.NiIconsEnabled = infoNiIconsButton.IsChecked == true;
ConfigSave();
}
private void CPUFlyout_Opening(object sender, object e)
{
Expand Down Expand Up @@ -1929,5 +2008,5 @@ private void PSTBannerButton_PointerEntered(object sender, Microsoft.UI.Xaml.Inp
}
}
}
#endregion
#endregion
}

0 comments on commit c7265db

Please sign in to comment.