Move the zoomIn/zoomOut functionality into BaseViewer (PR 14038 follow-up)
				
					
				
			Given the simplicity of this functionality, we can move it from the default viewer and into the `BaseViewer` class instead. This way, it's possible to support more scripting functionality in the standalone viewer components; please see PR 14038. Please note that I purposely went with `increaseScale`/`decreaseScale`-method names, rather than using "zoom", to better match the existing `currentScale`/`currentScaleValue` getters/setters that's being used in the `BaseViewer` class.
This commit is contained in:
		
							parent
							
								
									83d3bb43f4
								
							
						
					
					
						commit
						d9f9fa4f1c
					
				
							
								
								
									
										23
									
								
								web/app.js
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								web/app.js
									
									
									
									
									
								
							| @ -26,8 +26,6 @@ import { | ||||
|   isValidRotation, | ||||
|   isValidScrollMode, | ||||
|   isValidSpreadMode, | ||||
|   MAX_SCALE, | ||||
|   MIN_SCALE, | ||||
|   noContextMenuHandler, | ||||
|   normalizeWheelEventDirection, | ||||
|   parseQueryString, | ||||
| @ -81,7 +79,6 @@ import { SecondaryToolbar } from "./secondary_toolbar.js"; | ||||
| import { Toolbar } from "./toolbar.js"; | ||||
| import { ViewHistory } from "./view_history.js"; | ||||
| 
 | ||||
| const DEFAULT_SCALE_DELTA = 1.1; | ||||
| const DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000; // ms
 | ||||
| const FORCE_PAGES_LOADED_TIMEOUT = 10000; // ms
 | ||||
| const WHEEL_ZOOM_DISABLED_TIMEOUT = 1000; // ms
 | ||||
| @ -637,30 +634,18 @@ const PDFViewerApplication = { | ||||
|     return this._initializedCapability.promise; | ||||
|   }, | ||||
| 
 | ||||
|   zoomIn(ticks) { | ||||
|   zoomIn(steps) { | ||||
|     if (this.pdfViewer.isInPresentationMode) { | ||||
|       return; | ||||
|     } | ||||
|     let newScale = this.pdfViewer.currentScale; | ||||
|     do { | ||||
|       newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2); | ||||
|       newScale = Math.ceil(newScale * 10) / 10; | ||||
|       newScale = Math.min(MAX_SCALE, newScale); | ||||
|     } while (--ticks > 0 && newScale < MAX_SCALE); | ||||
|     this.pdfViewer.currentScaleValue = newScale; | ||||
|     this.pdfViewer.increaseScale(steps); | ||||
|   }, | ||||
| 
 | ||||
|   zoomOut(ticks) { | ||||
|   zoomOut(steps) { | ||||
|     if (this.pdfViewer.isInPresentationMode) { | ||||
|       return; | ||||
|     } | ||||
|     let newScale = this.pdfViewer.currentScale; | ||||
|     do { | ||||
|       newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2); | ||||
|       newScale = Math.floor(newScale * 10) / 10; | ||||
|       newScale = Math.max(MIN_SCALE, newScale); | ||||
|     } while (--ticks > 0 && newScale > MIN_SCALE); | ||||
|     this.pdfViewer.currentScaleValue = newScale; | ||||
|     this.pdfViewer.decreaseScale(steps); | ||||
|   }, | ||||
| 
 | ||||
|   zoomReset() { | ||||
|  | ||||
| @ -17,6 +17,7 @@ import { AnnotationMode, createPromiseCapability, version } from "pdfjs-lib"; | ||||
| import { | ||||
|   CSS_UNITS, | ||||
|   DEFAULT_SCALE, | ||||
|   DEFAULT_SCALE_DELTA, | ||||
|   DEFAULT_SCALE_VALUE, | ||||
|   getVisibleElements, | ||||
|   isPortraitOrientation, | ||||
| @ -24,6 +25,8 @@ import { | ||||
|   isValidScrollMode, | ||||
|   isValidSpreadMode, | ||||
|   MAX_AUTO_SCALE, | ||||
|   MAX_SCALE, | ||||
|   MIN_SCALE, | ||||
|   moveToEndOfArray, | ||||
|   PresentationModeState, | ||||
|   RendererType, | ||||
| @ -1693,6 +1696,34 @@ class BaseViewer { | ||||
|     this.currentPageNumber = Math.max(currentPageNumber - advance, 1); | ||||
|     return true; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Increase the current zoom level one, or more, times. | ||||
|    * @param {number} [steps] - Defaults to zooming once. | ||||
|    */ | ||||
|   increaseScale(steps = 1) { | ||||
|     let newScale = this._currentScale; | ||||
|     do { | ||||
|       newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2); | ||||
|       newScale = Math.ceil(newScale * 10) / 10; | ||||
|       newScale = Math.min(MAX_SCALE, newScale); | ||||
|     } while (--steps > 0 && newScale < MAX_SCALE); | ||||
|     this.currentScaleValue = newScale; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Decrease the current zoom level one, or more, times. | ||||
|    * @param {number} [steps] - Defaults to zooming once. | ||||
|    */ | ||||
|   decreaseScale(steps = 1) { | ||||
|     let newScale = this._currentScale; | ||||
|     do { | ||||
|       newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2); | ||||
|       newScale = Math.floor(newScale * 10) / 10; | ||||
|       newScale = Math.max(MIN_SCALE, newScale); | ||||
|     } while (--steps > 0 && newScale > MIN_SCALE); | ||||
|     this.currentScaleValue = newScale; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| export { BaseViewer }; | ||||
|  | ||||
| @ -324,13 +324,13 @@ class PDFScriptingManager { | ||||
|           if (isInPresentationMode) { | ||||
|             return; | ||||
|           } | ||||
|           this._eventBus.dispatch("zoomin", { source: this }); | ||||
|           this._pdfViewer.increaseScale(); | ||||
|           break; | ||||
|         case "ZoomViewOut": | ||||
|           if (isInPresentationMode) { | ||||
|             return; | ||||
|           } | ||||
|           this._eventBus.dispatch("zoomout", { source: this }); | ||||
|           this._pdfViewer.decreaseScale(); | ||||
|           break; | ||||
|       } | ||||
|       return; | ||||
|  | ||||
| @ -18,6 +18,7 @@ import { PixelsPerInch } from "pdfjs-lib"; | ||||
| const CSS_UNITS = PixelsPerInch.CSS / PixelsPerInch.PDF; | ||||
| const DEFAULT_SCALE_VALUE = "auto"; | ||||
| const DEFAULT_SCALE = 1.0; | ||||
| const DEFAULT_SCALE_DELTA = 1.1; | ||||
| const MIN_SCALE = 0.1; | ||||
| const MAX_SCALE = 10.0; | ||||
| const UNKNOWN_SCALE = 0; | ||||
| @ -1005,6 +1006,7 @@ export { | ||||
|   binarySearchFirstItem, | ||||
|   CSS_UNITS, | ||||
|   DEFAULT_SCALE, | ||||
|   DEFAULT_SCALE_DELTA, | ||||
|   DEFAULT_SCALE_VALUE, | ||||
|   EventBus, | ||||
|   getActiveOrFocusedElement, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user