From b8a515dff5163ab31d157a204aa134c09ed7f20d Mon Sep 17 00:00:00 2001 From: V Date: Mon, 18 May 2026 04:28:46 +0200 Subject: [PATCH] add Windows background material customisation (#4230) --- browser/VencordNativeStub.ts | 1 + src/VencordNative.ts | 1 + src/api/Settings.ts | 2 + .../tabs/vencord/MacVibrancySettings.tsx | 135 +++++++++--------- .../tabs/vencord/WindowsMaterialSettings.tsx | 55 +++++++ .../settings/tabs/vencord/index.tsx | 12 +- src/main/ipcMain.ts | 5 + src/main/patcher.ts | 82 ++++++----- src/shared/IpcEvents.ts | 2 + 9 files changed, 183 insertions(+), 112 deletions(-) create mode 100644 src/components/settings/tabs/vencord/WindowsMaterialSettings.tsx diff --git a/browser/VencordNativeStub.ts b/browser/VencordNativeStub.ts index 77272d41c..1b2e87beb 100644 --- a/browser/VencordNativeStub.ts +++ b/browser/VencordNativeStub.ts @@ -55,6 +55,7 @@ window.VencordNative = { native: { getVersions: () => ({}), + supportsWindowsMaterial: () => false, openExternal: async (url) => void open(url, "_blank"), getRendererCss: async () => { if (IS_USERSCRIPT) diff --git a/src/VencordNative.ts b/src/VencordNative.ts index e30f83e83..67ea7a092 100644 --- a/src/VencordNative.ts +++ b/src/VencordNative.ts @@ -78,6 +78,7 @@ export default { native: { getVersions: () => process.versions as Partial, + supportsWindowsMaterial: () => sendSync(IpcEvents.SUPPORTS_WINDOWS_MATERIAL), openExternal: (url: string) => invoke(IpcEvents.OPEN_EXTERNAL, url), getRendererCss: () => invoke(IpcEvents.GET_RENDERER_CSS), onRendererCssUpdate: (cb: (newCss: string) => void) => { diff --git a/src/api/Settings.ts b/src/api/Settings.ts index 88d5cc131..73bc9ee6b 100644 --- a/src/api/Settings.ts +++ b/src/api/Settings.ts @@ -62,6 +62,7 @@ export interface Settings { | "under-page" | "window" | undefined; + windowsMaterial: "none" | "mica" | "tabbed" | "acrylic"; disableMinSize: boolean; winNativeTitleBar: boolean; plugins: { @@ -103,6 +104,7 @@ const DefaultSettings: Settings = { transparent: false, winCtrlQ: false, macosVibrancyStyle: undefined, + windowsMaterial: "none", disableMinSize: false, winNativeTitleBar: false, plugins: {}, diff --git a/src/components/settings/tabs/vencord/MacVibrancySettings.tsx b/src/components/settings/tabs/vencord/MacVibrancySettings.tsx index 784b0be00..3fe9f8da9 100644 --- a/src/components/settings/tabs/vencord/MacVibrancySettings.tsx +++ b/src/components/settings/tabs/vencord/MacVibrancySettings.tsx @@ -6,79 +6,80 @@ import { useSettings } from "@api/Settings"; import ErrorBoundary from "@components/ErrorBoundary"; +import { IS_MAC } from "@utils/constants"; import { Margins } from "@utils/margins"; import { identity } from "@utils/misc"; import { Forms, Select } from "@webpack/common"; -export function VibrancySettings() { +export function MacOSVibrancySettings() { const settings = useSettings(["macosVibrancyStyle"]); + if (!IS_MAC || IS_WEB) return null; + return ( - <> - Window vibrancy style (requires restart) - - settings.macosVibrancyStyle = v} + isSelected={v => settings.macosVibrancyStyle === v} + serialize={identity} + /> + ); } diff --git a/src/components/settings/tabs/vencord/WindowsMaterialSettings.tsx b/src/components/settings/tabs/vencord/WindowsMaterialSettings.tsx new file mode 100644 index 000000000..0fec4ef88 --- /dev/null +++ b/src/components/settings/tabs/vencord/WindowsMaterialSettings.tsx @@ -0,0 +1,55 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2026 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { useSettings } from "@api/Settings"; +import ErrorBoundary from "@components/ErrorBoundary"; +import { Heading } from "@components/Heading"; +import { Margins } from "@components/margins"; +import { Paragraph } from "@components/Paragraph"; +import { IS_WINDOWS } from "@utils/constants"; +import { Select } from "@webpack/common"; + +export function WindowsMaterialSettings() { + const settings = useSettings(["windowsMaterial"]); + + if (!IS_WINDOWS || IS_WEB || !VencordNative.native.supportsWindowsMaterial()) return null; + + return ( + + Background Material + + Windows transparent background effects. You need a theme that supports transparency or this will do nothing. A restart is required after changing this setting. + + +