From 7a1e83733c37c100ecf0e45529908be95f456713 Mon Sep 17 00:00:00 2001 From: dsehnal <david.sehnal@gmail.com> Date: Thu, 30 Mar 2023 15:00:24 +0200 Subject: [PATCH] throttle canvas resize events --- CHANGELOG.md | 1 + src/mol-plugin/context.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97dd75731..51c32f326 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Note that since we don't clearly distinguish between a public and private interf ## [Unreleased] - Handle resizes of viewer element even when window remains the same size +- Throttle canvas resize events - Selection toggle buttons hidden if selection mode is off - Camera focus loci bindings allow reset on click-away to be overridden - Input/controls improvements diff --git a/src/mol-plugin/context.ts b/src/mol-plugin/context.ts index 4288cc4ab..aed2adfb8 100644 --- a/src/mol-plugin/context.ts +++ b/src/mol-plugin/context.ts @@ -8,7 +8,7 @@ import produce, { setAutoFreeze } from 'immer'; import { List } from 'immutable'; import { merge, Subscription } from 'rxjs'; -import { filter, take } from 'rxjs/operators'; +import { debounceTime, filter, take, throttleTime } from 'rxjs/operators'; import { Canvas3D, Canvas3DContext, DefaultCanvas3DParams } from '../mol-canvas3d/canvas3d'; import { resizeCanvas } from '../mol-canvas3d/util'; import { Vec2 } from '../mol-math/linear-algebra'; @@ -293,7 +293,7 @@ export class PluginContext { this.subs.push(this.canvas3d!.interaction.click.subscribe(e => this.behaviors.interaction.click.next(e))); this.subs.push(this.canvas3d!.interaction.drag.subscribe(e => this.behaviors.interaction.drag.next(e))); this.subs.push(this.canvas3d!.interaction.hover.subscribe(e => this.behaviors.interaction.hover.next(e))); - this.subs.push(this.canvas3d!.input.resize.subscribe(() => this.handleResize())); + this.subs.push(this.canvas3d!.input.resize.pipe(debounceTime(50), throttleTime(100, undefined, { leading: false, trailing: true })).subscribe(() => this.handleResize())); this.subs.push(this.canvas3d!.input.keyDown.subscribe(e => this.behaviors.interaction.key.next(e))); this.subs.push(this.layout.events.updated.subscribe(() => requestAnimationFrame(() => this.handleResize()))); -- GitLab