mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-04 05:28:59 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import options from "../services/options.js";
 | 
						|
import Component from "./component.js";
 | 
						|
import utils from "../services/utils.js";
 | 
						|
 | 
						|
const MIN_ZOOM = 0.5;
 | 
						|
const MAX_ZOOM = 2.0;
 | 
						|
 | 
						|
class ZoomComponent extends Component {
 | 
						|
    constructor() {
 | 
						|
        super();
 | 
						|
 | 
						|
        if (utils.isElectron()) {
 | 
						|
            options.initializedPromise.then(() => {
 | 
						|
                const zoomFactor = options.getFloat("zoomFactor");
 | 
						|
                if (zoomFactor) {
 | 
						|
                    this.setZoomFactor(zoomFactor);
 | 
						|
                }
 | 
						|
            });
 | 
						|
 | 
						|
            window.addEventListener("wheel", (event) => {
 | 
						|
                if (event.ctrlKey) {
 | 
						|
                    this.setZoomFactorAndSave(this.getCurrentZoom() - event.deltaY * 0.001);
 | 
						|
                }
 | 
						|
            });
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    setZoomFactor(zoomFactor: string | number) {
 | 
						|
        const parsedZoomFactor = typeof zoomFactor !== "number" ? parseFloat(zoomFactor) : zoomFactor;
 | 
						|
        const webFrame = utils.dynamicRequire("electron").webFrame;
 | 
						|
        webFrame.setZoomFactor(parsedZoomFactor);
 | 
						|
    }
 | 
						|
 | 
						|
    async setZoomFactorAndSave(zoomFactor: number) {
 | 
						|
        if (zoomFactor >= MIN_ZOOM && zoomFactor <= MAX_ZOOM) {
 | 
						|
            zoomFactor = Math.round(zoomFactor * 10) / 10;
 | 
						|
 | 
						|
            this.setZoomFactor(zoomFactor);
 | 
						|
 | 
						|
            await options.save("zoomFactor", zoomFactor);
 | 
						|
        } else {
 | 
						|
            console.log(`Zoom factor ${zoomFactor} outside of the range, ignored.`);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    getCurrentZoom() {
 | 
						|
        return utils.dynamicRequire("electron").webFrame.getZoomFactor();
 | 
						|
    }
 | 
						|
 | 
						|
    zoomOutEvent() {
 | 
						|
        this.setZoomFactorAndSave(this.getCurrentZoom() - 0.1);
 | 
						|
    }
 | 
						|
 | 
						|
    zoomInEvent() {
 | 
						|
        this.setZoomFactorAndSave(this.getCurrentZoom() + 0.1);
 | 
						|
    }
 | 
						|
    zoomResetEvent() {
 | 
						|
        this.setZoomFactorAndSave(1);
 | 
						|
    }
 | 
						|
 | 
						|
    setZoomFactorAndSaveEvent({ zoomFactor }: { zoomFactor: number }) {
 | 
						|
        this.setZoomFactorAndSave(zoomFactor);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
const zoomService = new ZoomComponent();
 | 
						|
 | 
						|
export default zoomService;
 |