aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/VencordNative.ts3
-rw-r--r--src/main/ipcMain.ts6
-rw-r--r--src/utils/IpcEvents.ts1
-rw-r--r--src/utils/quickCss.ts28
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);