aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/xterm/src/browser/ScreenDprMonitor.ts
diff options
context:
space:
mode:
authorAnthony Schneider <tonyschneider3@gmail.com>2022-02-11 19:40:35 -0600
committerAnthony Schneider <tonyschneider3@gmail.com>2022-02-11 19:40:35 -0600
commitb52feccdcc58c1f4583c8542632d6c026335dea7 (patch)
tree5e242dd13ed4bbfff85a07109ef826f80874e2a6 /node_modules/xterm/src/browser/ScreenDprMonitor.ts
parent94862321e2e4a58e3209c037e8061f0435b3aa82 (diff)
Changed javascript to be in its own file. Began (messy) setup for terminal.
Diffstat (limited to 'node_modules/xterm/src/browser/ScreenDprMonitor.ts')
-rw-r--r--node_modules/xterm/src/browser/ScreenDprMonitor.ts69
1 files changed, 69 insertions, 0 deletions
diff --git a/node_modules/xterm/src/browser/ScreenDprMonitor.ts b/node_modules/xterm/src/browser/ScreenDprMonitor.ts
new file mode 100644
index 0000000..27ae231
--- /dev/null
+++ b/node_modules/xterm/src/browser/ScreenDprMonitor.ts
@@ -0,0 +1,69 @@
+/**
+ * Copyright (c) 2017 The xterm.js authors. All rights reserved.
+ * @license MIT
+ */
+
+import { Disposable } from 'common/Lifecycle';
+
+export type ScreenDprListener = (newDevicePixelRatio?: number, oldDevicePixelRatio?: number) => void;
+
+/**
+ * The screen device pixel ratio monitor allows listening for when the
+ * window.devicePixelRatio value changes. This is done not with polling but with
+ * the use of window.matchMedia to watch media queries. When the event fires,
+ * the listener will be reattached using a different media query to ensure that
+ * any further changes will register.
+ *
+ * The listener should fire on both window zoom changes and switching to a
+ * monitor with a different DPI.
+ */
+export class ScreenDprMonitor extends Disposable {
+ private _currentDevicePixelRatio: number = window.devicePixelRatio;
+ private _outerListener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | undefined;
+ private _listener: ScreenDprListener | undefined;
+ private _resolutionMediaMatchList: MediaQueryList | undefined;
+
+ public setListener(listener: ScreenDprListener): void {
+ if (this._listener) {
+ this.clearListener();
+ }
+ this._listener = listener;
+ this._outerListener = () => {
+ if (!this._listener) {
+ return;
+ }
+ this._listener(window.devicePixelRatio, this._currentDevicePixelRatio);
+ this._updateDpr();
+ };
+ this._updateDpr();
+ }
+
+ public dispose(): void {
+ super.dispose();
+ this.clearListener();
+ }
+
+ private _updateDpr(): void {
+ if (!this._outerListener) {
+ return;
+ }
+
+ // Clear listeners for old DPR
+ this._resolutionMediaMatchList?.removeListener(this._outerListener);
+
+ // Add listeners for new DPR
+ this._currentDevicePixelRatio = window.devicePixelRatio;
+ this._resolutionMediaMatchList = window.matchMedia(`screen and (resolution: ${window.devicePixelRatio}dppx)`);
+ this._resolutionMediaMatchList.addListener(this._outerListener);
+ }
+
+ public clearListener(): void {
+ if (!this._resolutionMediaMatchList || !this._listener || !this._outerListener) {
+ return;
+ }
+ this._resolutionMediaMatchList.removeListener(this._outerListener);
+ this._resolutionMediaMatchList = undefined;
+ this._listener = undefined;
+ this._outerListener = undefined;
+ }
+}