mirror of
https://github.com/antebudimir/feishin.git
synced 2025-12-31 18:13:31 +00:00
* [feature]: Support using system fonts Uses the **experimental** queryLocalFonts API, when prompted, to get the fonts and do CSS. Resolves #270 and #288 (by proxy) Caveats/notes: - This is experimental, and is only supported by Chrome/Chromium/Edgeium (see https://caniuse.com/?search=querylocalfonts) - As far as I can tell, the only way to dynamically change the font (shown in https://wicg.github.io/local-font-access/#example-style-with-local-fonts) was by DOM manipulation; css variables did not seem to work - This shows **all** fonts, including their variants (bold/italic/etc); given that the style names could be localized, not sure of a way to parse this (on my system, for instance, I had 859 different combinations) - I made fonts a separate top-level setting because it was easier to manipulate without causing as many rerenders; feel free to put that back * add permission chec * add electron magic to support custom font * restrict content types
59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
import { IpcRendererEvent, ipcRenderer, webFrame } from 'electron';
|
|
import Store from 'electron-store';
|
|
|
|
const store = new Store();
|
|
|
|
const set = (property: string, value: string | Record<string, unknown> | boolean | string[]) => {
|
|
store.set(`${property}`, value);
|
|
};
|
|
|
|
const get = (property: string) => {
|
|
return store.get(`${property}`);
|
|
};
|
|
|
|
const restart = () => {
|
|
ipcRenderer.send('app-restart');
|
|
};
|
|
|
|
const enableMediaKeys = () => {
|
|
ipcRenderer.send('global-media-keys-enable');
|
|
};
|
|
|
|
const disableMediaKeys = () => {
|
|
ipcRenderer.send('global-media-keys-disable');
|
|
};
|
|
|
|
const passwordGet = async (server: string): Promise<string | null> => {
|
|
return ipcRenderer.invoke('password-get', server);
|
|
};
|
|
|
|
const passwordRemove = (server: string) => {
|
|
ipcRenderer.send('password-remove', server);
|
|
};
|
|
|
|
const passwordSet = async (password: string, server: string): Promise<boolean> => {
|
|
return ipcRenderer.invoke('password-set', password, server);
|
|
};
|
|
|
|
const setZoomFactor = (zoomFactor: number) => {
|
|
webFrame.setZoomFactor(zoomFactor / 100);
|
|
};
|
|
|
|
const fontError = (cb: (event: IpcRendererEvent, file: string) => void) => {
|
|
ipcRenderer.on('custom-font-error', cb);
|
|
};
|
|
|
|
export const localSettings = {
|
|
disableMediaKeys,
|
|
enableMediaKeys,
|
|
fontError,
|
|
get,
|
|
passwordGet,
|
|
passwordRemove,
|
|
passwordSet,
|
|
restart,
|
|
set,
|
|
setZoomFactor,
|
|
};
|
|
|
|
export type LocalSettings = typeof localSettings;
|