diff options
author | V <vendicated@riseup.net> | 2023-09-25 18:53:10 +0200 |
---|---|---|
committer | V <vendicated@riseup.net> | 2023-09-25 18:53:10 +0200 |
commit | ae6584da7c38fd0f3414e3cb650b35a9a9b831be (patch) | |
tree | cb44b6a69e44a121b573fea9ba4a72876e918732 /src | |
parent | c6b1b9463ced6953bc7ba17fd26f9e463fb0b010 (diff) | |
download | Vencord-ae6584da7c38fd0f3414e3cb650b35a9a9b831be.tar.gz Vencord-ae6584da7c38fd0f3414e3cb650b35a9a9b831be.tar.bz2 Vencord-ae6584da7c38fd0f3414e3cb650b35a9a9b831be.zip |
add os-accent-color variable (following BetterDiscord)
Diffstat (limited to 'src')
-rw-r--r-- | src/VencordNative.ts | 3 | ||||
-rw-r--r-- | src/main/ipcMain.ts | 6 | ||||
-rw-r--r-- | src/utils/IpcEvents.ts | 1 | ||||
-rw-r--r-- | src/utils/quickCss.ts | 28 |
4 files changed, 28 insertions, 10 deletions
diff --git a/src/VencordNative.ts b/src/VencordNative.ts index 4f8638b..dd97b5d 100644 --- a/src/VencordNative.ts +++ b/src/VencordNative.ts @@ -23,7 +23,8 @@ export default { deleteTheme: (fileName: string) => invoke<void>(IpcEvents.DELETE_THEME, fileName), getThemesDir: () => invoke<string>(IpcEvents.GET_THEMES_DIR), getThemesList: () => invoke<Array<UserThemeHeader>>(IpcEvents.GET_THEMES_LIST), - getThemeData: (fileName: string) => invoke<string | undefined>(IpcEvents.GET_THEME_DATA, fileName) + getThemeData: (fileName: string) => invoke<string | undefined>(IpcEvents.GET_THEME_DATA, fileName), + getSystemValues: () => invoke<Record<string, string>>(IpcEvents.GET_THEME_SYSTEM_VALUES), }, updater: { diff --git a/src/main/ipcMain.ts b/src/main/ipcMain.ts index 61cbe7a..6254bc8 100644 --- a/src/main/ipcMain.ts +++ b/src/main/ipcMain.ts @@ -22,7 +22,7 @@ import "./ipcPlugins"; import { debounce } from "@utils/debounce"; import { IpcEvents } from "@utils/IpcEvents"; import { Queue } from "@utils/Queue"; -import { BrowserWindow, ipcMain, shell } from "electron"; +import { BrowserWindow, ipcMain, shell, systemPreferences } from "electron"; import { mkdirSync, readFileSync, watch } from "fs"; import { open, readdir, readFile, writeFile } from "fs/promises"; import { join, normalize } from "path"; @@ -112,6 +112,10 @@ ipcMain.handle(IpcEvents.SET_QUICK_CSS, (_, css) => ipcMain.handle(IpcEvents.GET_THEMES_DIR, () => THEMES_DIR); ipcMain.handle(IpcEvents.GET_THEMES_LIST, () => listThemes()); ipcMain.handle(IpcEvents.GET_THEME_DATA, (_, fileName) => getThemeData(fileName)); +ipcMain.handle(IpcEvents.GET_THEME_SYSTEM_VALUES, () => ({ + // win & mac only + "os-accent-color": `#${systemPreferences.getAccentColor?.() || ""}` +})); ipcMain.handle(IpcEvents.GET_SETTINGS_DIR, () => SETTINGS_DIR); ipcMain.on(IpcEvents.GET_SETTINGS, e => e.returnValue = readSettings()); diff --git a/src/utils/IpcEvents.ts b/src/utils/IpcEvents.ts index cb51f81..16bcfa6 100644 --- a/src/utils/IpcEvents.ts +++ b/src/utils/IpcEvents.ts @@ -26,6 +26,7 @@ export const enum IpcEvents { GET_THEMES_DIR = "VencordGetThemesDir", GET_THEMES_LIST = "VencordGetThemesList", GET_THEME_DATA = "VencordGetThemeData", + GET_THEME_SYSTEM_VALUES = "VencordGetThemeSystemValues", GET_SETTINGS_DIR = "VencordGetSettingsDir", GET_SETTINGS = "VencordGetSettings", SET_SETTINGS = "VencordSetSettings", diff --git a/src/utils/quickCss.ts b/src/utils/quickCss.ts index eee39ab..8132031 100644 --- a/src/utils/quickCss.ts +++ b/src/utils/quickCss.ts @@ -22,12 +22,27 @@ import { addSettingsListener, Settings } from "@api/Settings"; let style: HTMLStyleElement; let themesStyle: HTMLStyleElement; +function createStyle(id: string) { + const style = document.createElement("style"); + style.id = id; + document.documentElement.append(style); + return style; +} + +async function initSystemValues() { + const values = await VencordNative.themes.getSystemValues(); + const variables = Object.entries(values) + .filter(([, v]) => v !== "#") + .map(([k, v]) => `--${k}: ${v};`) + .join(""); + + createStyle("vencord-os-theme-values").textContent = `:root{${variables}}`; +} + export async function toggle(isEnabled: boolean) { if (!style) { if (isEnabled) { - style = document.createElement("style"); - style.id = "vencord-custom-css"; - document.documentElement.appendChild(style); + style = createStyle("vencord-custom-css"); VencordNative.quickCss.addChangeListener(css => { style.textContent = css; // At the time of writing this, changing textContent resets the disabled state @@ -40,11 +55,7 @@ export async function toggle(isEnabled: boolean) { } async function initThemes() { - if (!themesStyle) { - themesStyle = document.createElement("style"); - themesStyle.id = "vencord-themes"; - document.documentElement.appendChild(themesStyle); - } + themesStyle ??= createStyle("vencord-themes"); const { themeLinks, enabledThemes } = Settings; @@ -66,6 +77,7 @@ async function initThemes() { } document.addEventListener("DOMContentLoaded", () => { + initSystemValues(); initThemes(); toggle(Settings.useQuickCss); |