mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.0 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;
 |