Merge pull request #1873 from mononaut/fix-retina-resolution

Fix canvas resolution on high-DPI screens
This commit is contained in:
wiz 2022-06-14 07:05:28 +09:00 committed by GitHub
commit bf99407816
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 13 deletions

View File

@ -28,14 +28,16 @@ export default class BlockScene {
} }
resize({ width = this.width, height = this.height }: { width?: number, height?: number}): void { resize({ width = this.width, height = this.height }: { width?: number, height?: number}): void {
this.width = width this.width = width;
this.height = height this.height = height;
this.gridSize = this.width / this.gridWidth this.gridSize = this.width / this.gridWidth;
this.unitPadding = Math.floor(Math.max(1, width / 1000)) this.unitPadding = width / 500;
this.unitWidth = this.gridSize - (this.unitPadding * 2) this.unitWidth = this.gridSize - (this.unitPadding * 2);
this.dirty = true this.dirty = true;
if (this.initialised && this.scene) this.updateAll(performance.now()) if (this.initialised && this.scene) {
this.updateAll(performance.now());
}
} }
// Animate new block entering scene // Animate new block entering scene

View File

@ -1,5 +1,5 @@
<div class="mempool-block-overview"> <div class="mempool-block-overview">
<canvas class="block-overview" #blockCanvas></canvas> <canvas class="block-overview" [style.width]="cssWidth + 'px'" [style.height]="cssHeight + 'px'" #blockCanvas></canvas>
<div class="loader-wrapper" [class.hidden]="!(isLoading$ | async)"> <div class="loader-wrapper" [class.hidden]="!(isLoading$ | async)">
<div class="spinner-border ml-3 loading" role="status"></div> <div class="spinner-border ml-3 loading" role="status"></div>
</div> </div>

View File

@ -27,6 +27,8 @@ export class MempoolBlockOverviewComponent implements OnInit, OnDestroy, OnChang
animationFrameRequest: number; animationFrameRequest: number;
displayWidth: number; displayWidth: number;
displayHeight: number; displayHeight: number;
cssWidth: number;
cssHeight: number;
shaderProgram: WebGLProgram; shaderProgram: WebGLProgram;
vertexArray: FastVertexArray; vertexArray: FastVertexArray;
running: boolean; running: boolean;
@ -182,12 +184,14 @@ export class MempoolBlockOverviewComponent implements OnInit, OnDestroy, OnChang
@HostListener('window:resize', ['$event']) @HostListener('window:resize', ['$event'])
resizeCanvas(): void { resizeCanvas(): void {
this.displayWidth = this.canvas.nativeElement.parentElement.clientWidth; this.cssWidth = this.canvas.nativeElement.parentElement.clientWidth;
this.displayHeight = this.canvas.nativeElement.parentElement.clientHeight; this.cssHeight = this.canvas.nativeElement.parentElement.clientHeight;
this.displayWidth = window.devicePixelRatio * this.cssWidth;
this.displayHeight = window.devicePixelRatio * this.cssHeight;
this.canvas.nativeElement.width = this.displayWidth; this.canvas.nativeElement.width = this.displayWidth;
this.canvas.nativeElement.height = this.displayHeight; this.canvas.nativeElement.height = this.displayHeight;
if (this.gl) { if (this.gl) {
this.gl.viewport(0, 0, this.canvas.nativeElement.width, this.canvas.nativeElement.height); this.gl.viewport(0, 0, this.displayWidth, this.displayHeight);
} }
if (this.scene) { if (this.scene) {
this.scene.resize({ width: this.displayWidth, height: this.displayHeight }); this.scene.resize({ width: this.displayWidth, height: this.displayHeight });
@ -285,7 +289,9 @@ export class MempoolBlockOverviewComponent implements OnInit, OnDestroy, OnChang
this.setPreviewTx(-1, -1, false); this.setPreviewTx(-1, -1, false);
} }
setPreviewTx(x: number, y: number, clicked: boolean = false) { setPreviewTx(cssX: number, cssY: number, clicked: boolean = false) {
const x = cssX * window.devicePixelRatio;
const y = cssY * window.devicePixelRatio;
if (this.scene && (!this.selectedTx || clicked)) { if (this.scene && (!this.selectedTx || clicked)) {
const selected = this.scene.getTxAt({ x, y }); const selected = this.scene.getTxAt({ x, y });
const currentPreview = this.selectedTx || this.hoverTx; const currentPreview = this.selectedTx || this.hoverTx;