From 467134e606969be458992a18e4e40ff50b74ef33 Mon Sep 17 00:00:00 2001 From: Oleh Polisan Date: Sun, 7 Jul 2024 16:34:13 +0300 Subject: [PATCH] feat: add ability to use dynamic accent color --- src/renderer/components/settings/Settings.tsx | 9 ++- .../components/settings/TraySettings.tsx | 70 +++++++++++++------ src/renderer/patches/tray.ts | 11 +-- 3 files changed, 63 insertions(+), 27 deletions(-) diff --git a/src/renderer/components/settings/Settings.tsx b/src/renderer/components/settings/Settings.tsx index 0591dc6..6cc5d82 100644 --- a/src/renderer/components/settings/Settings.tsx +++ b/src/renderer/components/settings/Settings.tsx @@ -14,7 +14,13 @@ import { isMac, isWindows } from "renderer/utils"; import { AutoStartToggle } from "./AutoStartToggle"; import { DiscordBranchPicker } from "./DiscordBranchPicker"; import { NotificationBadgeToggle } from "./NotificationBadgeToggle"; -import { CustomizeTraySwitch, TrayFillColorSwitch, TrayIconPicker, TraySwitch } from "./TraySettings"; +import { + CustomizeTraySwitch, + TrayColorTypeSelect, + TrayFillColorSwitch, + TrayIconPicker, + TraySwitch +} from "./TraySettings"; import { VencordLocationPicker } from "./VencordLocationPicker"; import { WindowsTransparencyControls } from "./WindowsTransparencyControls"; @@ -71,6 +77,7 @@ const SettingsOptions: Record> Tray: [ TraySwitch, CustomizeTraySwitch, + TrayColorTypeSelect, TrayIconPicker, TrayFillColorSwitch, { diff --git a/src/renderer/components/settings/TraySettings.tsx b/src/renderer/components/settings/TraySettings.tsx index 88d75e8..7c51961 100644 --- a/src/renderer/components/settings/TraySettings.tsx +++ b/src/renderer/components/settings/TraySettings.tsx @@ -186,8 +186,37 @@ export const CustomizeTraySwitch: SettingsComponent = ({ settings }) => { ); }; -export const TrayIconPicker: SettingsComponent = ({ settings }) => { +export const TrayColorTypeSelect: SettingsComponent = ({ settings }) => { if (!settings.tray) return null; + return ( +
+
+ Tray Color Type +
+ + + +
+ ); +}; + +export const TrayIconPicker: SettingsComponent = ({ settings }) => { + if (!settings.tray || settings.trayColorType !== "custom") return null; return (
@@ -215,28 +244,25 @@ export const TrayFillColorSwitch: SettingsComponent = ({ settings }) => { if (!settings.tray) return null; return (
-
-
- Tray Icon Color - Choose the main color of the Tray Icons -
- - +
+ Tray Icon Main Color
+ +
); diff --git a/src/renderer/patches/tray.ts b/src/renderer/patches/tray.ts index 50784d8..59a069e 100644 --- a/src/renderer/patches/tray.ts +++ b/src/renderer/patches/tray.ts @@ -27,9 +27,11 @@ export function setCurrentTrayIcon() { } } -function changeColorsInSvg(svg: string, stockColor: string) { - const pickedColor = VesktopNative.settings.get().trayColor || VesktopNative.app.getAccentColor(); - const fillColor = VesktopNative.settings.get().trayAutoFill ?? "auto"; +function changeColorsInSvg(svg: string, stockColor: string, accentColor: string = "f6bfac") { + const Settings = VesktopNative.settings.get(); + if (Settings.trayColorType === "default") return svg; + const pickedColor = Settings.trayColorType === "system" ? accentColor : Settings.trayColor || accentColor; + const fillColor = Settings.trayAutoFill ?? "auto"; const reg = new RegExp(stockColor, "gim"); svg = svg.replace(reg, "#" + (pickedColor ?? stockColor)); @@ -44,7 +46,8 @@ function changeColorsInSvg(svg: string, stockColor: string) { VesktopNative.tray.createIconRequest(async (iconName: string, svgIcon: string = "") => { try { var svg = svgIcon || (await VesktopNative.tray.getIcon(iconName)); - svg = changeColorsInSvg(svg, "#f6bfac"); + svg = changeColorsInSvg(svg, "#f6bfac", (await VesktopNative.app.getAccentColor()).substring(1)); + const canvas = document.createElement("canvas"); canvas.width = 128; canvas.height = 128;