Skip to content

Commit

Permalink
feat: add splash window theming
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanccn committed Oct 13, 2023
1 parent 0d93e08 commit bf2a9fe
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 7 deletions.
8 changes: 4 additions & 4 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 13 additions & 3 deletions src/main/mainWindow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
dialog,
Menu,
MenuItemConstructorOptions,
nativeTheme,
Tray
} from "electron";
import { rm } from "fs/promises";
Expand Down Expand Up @@ -341,7 +342,9 @@ function createMainWindow() {
removeSettingsListeners();
removeVencordSettingsListeners();

const { staticTitle, transparencyOption, enableMenu, discordWindowsTitleBar } = Settings.store;
const { staticTitle, transparencyOption, splashTheming, splashBackground, enableMenu, discordWindowsTitleBar } =
Settings.store;

const { frameless, macosTranslucency } = VencordSettings.store;

const noFrame = frameless === true || (process.platform === "win32" && discordWindowsTitleBar === true);
Expand All @@ -361,7 +364,7 @@ function createMainWindow() {
...(transparencyOption && transparencyOption !== "none"
? {
backgroundColor: "#00000000",
backgroundMaterial: Settings.store.transparencyOption,
backgroundMaterial: transparencyOption,
transparent: true
}
: {}),
Expand All @@ -371,7 +374,14 @@ function createMainWindow() {
vibrancy: "sidebar",
backgroundColor: "#ffffff00"
}
: {}),
: {
backgroundColor: splashTheming
? splashBackground
: nativeTheme.shouldUseDarkColors
? "#313338"
: "#ffffff",
transparent: false
}),
...(process.platform === "darwin" ? { titleBarStyle: "hiddenInset" } : {}),
...getWindowBoundsOptions(),
autoHideMenuBar: enableMenu
Expand Down
17 changes: 17 additions & 0 deletions src/main/splash.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import { join } from "path";
import { SplashProps } from "shared/browserWinProperties";
import { ICON_PATH, VIEW_DIR } from "shared/paths";

import { Settings } from "./settings";

export function createSplashWindow() {
const splash = new BrowserWindow({
...SplashProps,
Expand All @@ -17,5 +19,20 @@ export function createSplashWindow() {

splash.loadFile(join(VIEW_DIR, "splash.html"));

const { splashBackground, splashColor, splashTheming } = Settings.store;

if (splashTheming) {
if (splashColor) {
const semiTransparentSplashColor = splashColor.replace("rgb(", "rgba(").replace(")", ", 0.2)");

splash.webContents.insertCSS(`body { --fg: ${splashColor} !important }`);
splash.webContents.insertCSS(`body { --fg-semi-trans: ${semiTransparentSplashColor} !important }`);
}

if (splashBackground) {
splash.webContents.insertCSS(`body { --bg: ${splashBackground} !important }`);
}
}

return splash;
}
1 change: 1 addition & 0 deletions src/renderer/components/Settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export default function SettingsUi() {
],
["staticTitle", "Static Title", 'Makes the window title "Vesktop" instead of changing to the current page'],
["enableMenu", "Enable Menu Bar", "Enables the application menu bar. Press ALT to toggle visibility."],
["splashTheming", "Splash theming", "Adapt the splash window colors to your custom theme", false],
[
"openLinksWithElectron",
"Open Links in app (experimental)",
Expand Down
1 change: 1 addition & 0 deletions src/renderer/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import "./fixes";
import "./appBadge";
import "./patches";
import "./themedSplash";

console.log("read if cute :3");

Expand Down
46 changes: 46 additions & 0 deletions src/renderer/themedSplash.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* SPDX-License-Identifier: GPL-3.0
* Vesktop, a desktop app aiming to give you a snappier Discord Experience
* Copyright (c) 2023 Vendicated and Vencord contributors
*/

import { Settings } from "./settings";

function isValidColor(color: CSSStyleValue | undefined): color is CSSUnparsedValue & { [0]: string } {
return color instanceof CSSUnparsedValue && typeof color[0] === "string" && CSS.supports("color", color[0]);
}

function resolveColor(color: string) {
const span = document.createElement("span");
span.style.color = color;
span.style.display = "none";

document.body.append(span);
const rgbColor = getComputedStyle(span).color;
span.remove();

return rgbColor;
}

const updateSplashColors = () => {
const bodyStyles = document.body.computedStyleMap();

const color = bodyStyles.get("--text-normal");
const backgroundColor = bodyStyles.get("--background-primary");

if (isValidColor(color)) {
Settings.store.splashColor = resolveColor(color[0]);
}

if (isValidColor(backgroundColor)) {
Settings.store.splashBackground = resolveColor(backgroundColor[0]);
}
};

if (document.readyState === "complete") {
updateSplashColors();
} else {
window.addEventListener("load", updateSplashColors);
}

window.addEventListener("beforeunload", updateSplashColors);
4 changes: 4 additions & 0 deletions src/shared/settings.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,8 @@ export interface Settings {

skippedUpdate?: string;
firstLaunch?: boolean;

splashTheming?: boolean;
splashColor?: string;
splashBackground?: string;
}

0 comments on commit bf2a9fe

Please sign in to comment.