Merge pull request #2689 from mononaut/fix-block-viz-resize
resize block visualization instantly on window zoom and resize
This commit is contained in:
		
						commit
						547b60fce7
					
				| @ -188,7 +188,7 @@ export class BlockOverviewGraphComponent implements AfterViewInit, OnDestroy, On | ||||
|       this.gl.viewport(0, 0, this.displayWidth, this.displayHeight); | ||||
|     } | ||||
|     if (this.scene) { | ||||
|       this.scene.resize({ width: this.displayWidth, height: this.displayHeight }); | ||||
|       this.scene.resize({ width: this.displayWidth, height: this.displayHeight, animate: false }); | ||||
|       this.start(); | ||||
|     } else { | ||||
|       this.scene = new BlockScene({ width: this.displayWidth, height: this.displayHeight, resolution: this.resolution, | ||||
|  | ||||
| @ -29,7 +29,7 @@ export default class BlockScene { | ||||
|     this.init({ width, height, resolution, blockLimit, orientation, flip, vertexArray }); | ||||
|   } | ||||
| 
 | ||||
|   resize({ width = this.width, height = this.height }: { width?: number, height?: number}): void { | ||||
|   resize({ width = this.width, height = this.height, animate = true }: { width?: number, height?: number, animate: boolean }): void { | ||||
|     this.width = width; | ||||
|     this.height = height; | ||||
|     this.gridSize = this.width / this.gridWidth; | ||||
| @ -38,7 +38,7 @@ export default class BlockScene { | ||||
| 
 | ||||
|     this.dirty = true; | ||||
|     if (this.initialised && this.scene) { | ||||
|       this.updateAll(performance.now(), 50); | ||||
|       this.updateAll(performance.now(), 50, 'left', animate); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| @ -212,7 +212,7 @@ export default class BlockScene { | ||||
|     this.vbytesPerUnit = blockLimit / Math.pow(resolution / 1.02, 2); | ||||
|     this.gridWidth = resolution; | ||||
|     this.gridHeight = resolution; | ||||
|     this.resize({ width, height }); | ||||
|     this.resize({ width, height, animate: true }); | ||||
|     this.layout = new BlockLayout({ width: this.gridWidth, height: this.gridHeight }); | ||||
| 
 | ||||
|     this.txs = {}; | ||||
| @ -225,14 +225,14 @@ export default class BlockScene { | ||||
|     this.animateUntil = Math.max(this.animateUntil, tx.update(update)); | ||||
|   } | ||||
| 
 | ||||
|   private updateTx(tx: TxView, startTime: number, delay: number, direction: string = 'left'): void { | ||||
|   private updateTx(tx: TxView, startTime: number, delay: number, direction: string = 'left', animate: boolean = true): void { | ||||
|     if (tx.dirty || this.dirty) { | ||||
|       this.saveGridToScreenPosition(tx); | ||||
|       this.setTxOnScreen(tx, startTime, delay, direction); | ||||
|       this.setTxOnScreen(tx, startTime, delay, direction, animate); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   private setTxOnScreen(tx: TxView, startTime: number, delay: number = 50, direction: string = 'left'): void { | ||||
|   private setTxOnScreen(tx: TxView, startTime: number, delay: number = 50, direction: string = 'left', animate: boolean = true): void { | ||||
|     if (!tx.initialised) { | ||||
|       const txColor = tx.getColor(); | ||||
|       this.applyTxUpdate(tx, { | ||||
| @ -252,30 +252,42 @@ export default class BlockScene { | ||||
|           position: tx.screenPosition, | ||||
|           color: txColor | ||||
|         }, | ||||
|         duration: 1000, | ||||
|         duration: animate ? 1000 : 1, | ||||
|         start: startTime, | ||||
|         delay, | ||||
|         delay: animate ? delay : 0, | ||||
|       }); | ||||
|     } else { | ||||
|       this.applyTxUpdate(tx, { | ||||
|         display: { | ||||
|           position: tx.screenPosition | ||||
|         }, | ||||
|         duration: 1000, | ||||
|         minDuration: 500, | ||||
|         duration: animate ? 1000 : 0, | ||||
|         minDuration: animate ? 500 : 0, | ||||
|         start: startTime, | ||||
|         delay, | ||||
|         adjust: true | ||||
|         delay: animate ? delay : 0, | ||||
|         adjust: animate | ||||
|       }); | ||||
|       if (!animate) { | ||||
|         this.applyTxUpdate(tx, { | ||||
|           display: { | ||||
|             position: tx.screenPosition | ||||
|           }, | ||||
|           duration: 0, | ||||
|           minDuration: 0, | ||||
|           start: startTime, | ||||
|           delay: 0, | ||||
|           adjust: false | ||||
|         }); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   private updateAll(startTime: number, delay: number = 50, direction: string = 'left'): void { | ||||
|   private updateAll(startTime: number, delay: number = 50, direction: string = 'left', animate: boolean = true): void { | ||||
|     this.scene.count = 0; | ||||
|     const ids = this.getTxList(); | ||||
|     startTime = startTime || performance.now(); | ||||
|     for (const id of ids) { | ||||
|       this.updateTx(this.txs[id], startTime, delay, direction); | ||||
|       this.updateTx(this.txs[id], startTime, delay, direction, animate); | ||||
|     } | ||||
|     this.dirty = false; | ||||
|   } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user