diff --git a/CHANGELOG.md b/CHANGELOG.md index 97dd75731a089ee0902469b77b7dec520b36887f..51c32f32628150a617d4e26313e117d2dcd615ef 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 4288cc4ab640812f856e25eb46183a76ce730a37..aed2adfb8f2fd0e966e28e0f48193cda887e2c99 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())));