madiator.com/ui/util/zoomWindow.js
2021-08-16 12:11:25 +02:00

55 lines
1.5 KiB
JavaScript

import { webFrame } from 'electron';
import { SETTINGS } from 'lbry-redux';
const isDev = process.env.NODE_ENV !== 'production';
export const ZOOM = {
INCREMENT: 'INCREMENT',
DECREMENT: 'DECREMENT',
RESET: 'RESET',
LOAD_FROM_LOCAL_STORAGE: 'LOAD_FROM_LOCAL_STORAGE',
};
function getNextZoomFactor(curFactor, isIncreasing) {
const zoomTable = [0.25, 0.33, 0.5, 0.67, 0.75, 0.8, 0.9, 1.0, 1.1, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0];
curFactor = curFactor.toPrecision(3);
let i = zoomTable.length;
while (curFactor < zoomTable[--i]) {}
if (isIncreasing) {
return zoomTable[Math.min(zoomTable.length - 1, i + 1)];
} else {
return zoomTable[Math.max(0, i - 1)];
}
}
export function changeZoomFactor(action) {
const ZOOM_DFLT_FACTOR = 1.0;
const curFactor = webFrame.getZoomFactor();
let newFactor = null;
switch (action) {
case ZOOM.INCREMENT:
newFactor = getNextZoomFactor(curFactor, true);
break;
case ZOOM.DECREMENT:
newFactor = getNextZoomFactor(curFactor, false);
break;
case ZOOM.RESET:
newFactor = ZOOM_DFLT_FACTOR;
break;
case ZOOM.LOAD_FROM_LOCAL_STORAGE:
newFactor = parseFloat(window.localStorage.getItem(SETTINGS.DESKTOP_WINDOW_ZOOM));
if (isNaN(newFactor)) {
newFactor = ZOOM_DFLT_FACTOR;
}
break;
default:
if (isDev) throw new Error('changeZoomFactor: unexpected action');
return;
}
webFrame.setZoomFactor(newFactor);
window.localStorage.setItem(SETTINGS.DESKTOP_WINDOW_ZOOM, newFactor);
}