Files
Trilium/src/public/app/components/zoom.ts

70 lines
2.0 KiB
TypeScript
Raw Normal View History

2022-12-01 13:07:23 +01:00
import options from "../services/options.js";
import Component from "./component.js";
2020-04-12 14:22:51 +02:00
import utils from "../services/utils.js";
2018-06-09 10:34:51 -04:00
const MIN_ZOOM = 0.5;
const MAX_ZOOM = 2.0;
2022-12-01 13:07:23 +01:00
class ZoomComponent extends Component {
2020-02-27 10:03:14 +01:00
constructor() {
super();
if (utils.isElectron()) {
options.initializedPromise.then(() => {
const zoomFactor = options.getFloat('zoomFactor');
if (zoomFactor) {
this.setZoomFactor(zoomFactor);
}
});
2021-05-12 22:38:17 +02:00
window.addEventListener("wheel", event => {
2021-05-17 21:46:18 +02:00
if (event.ctrlKey) {
this.setZoomFactorAndSave(this.getCurrentZoom() + event.deltaY * 0.001);
}
2021-05-12 22:38:17 +02:00
});
}
2018-06-09 10:34:51 -04:00
}
setZoomFactor(zoomFactor: string | number) {
const parsedZoomFactor = (typeof zoomFactor !== "number" ? parseFloat(zoomFactor) : zoomFactor);
2020-04-12 14:22:51 +02:00
const webFrame = utils.dynamicRequire('electron').webFrame;
webFrame.setZoomFactor(parsedZoomFactor);
2018-06-09 10:34:51 -04:00
}
async setZoomFactorAndSave(zoomFactor: number) {
if (zoomFactor >= MIN_ZOOM && zoomFactor <= MAX_ZOOM) {
zoomFactor = Math.round(zoomFactor * 10) / 10;
2020-10-10 20:12:39 +02:00
this.setZoomFactor(zoomFactor);
await options.save('zoomFactor', zoomFactor);
}
else {
console.log(`Zoom factor ${zoomFactor} outside of the range, ignored.`);
}
}
getCurrentZoom() {
2020-04-12 14:22:51 +02:00
return utils.dynamicRequire('electron').webFrame.getZoomFactor();
2018-06-09 10:34:51 -04:00
}
2020-02-16 19:23:49 +01:00
zoomOutEvent() {
this.setZoomFactorAndSave(this.getCurrentZoom() - 0.1);
}
2020-02-16 19:23:49 +01:00
zoomInEvent() {
this.setZoomFactorAndSave(this.getCurrentZoom() + 0.1);
}
zoomResetEvent() {
this.setZoomFactorAndSave(1);
}
setZoomFactorAndSaveEvent({ zoomFactor }: { zoomFactor: number }) {
this.setZoomFactorAndSave(zoomFactor);
}
}
2022-12-01 13:07:23 +01:00
const zoomService = new ZoomComponent();
export default zoomService;