From 8361593b4c27c2d01e975cd94311ca532fe52bbe Mon Sep 17 00:00:00 2001 From: NI Date: Sun, 26 Jul 2020 20:53:05 +0800 Subject: [PATCH] Better Console resizing --- ui/widgets/screen_console.vue | 86 ++++++++++++++++++++--------------- ui/widgets/screens.vue | 2 +- 2 files changed, 50 insertions(+), 38 deletions(-) diff --git a/ui/widgets/screen_console.vue b/ui/widgets/screen_console.vue index 367ffa7..98357a3 100644 --- a/ui/widgets/screen_console.vue +++ b/ui/widgets/screen_console.vue @@ -21,7 +21,7 @@

Console

@@ -219,6 +219,8 @@ class Term { } resizeDelay = setTimeout(() => { + resizeDelay = null; + if (!isNumber(dim.cols) || !isNumber(dim.rows)) { return; } @@ -232,7 +234,6 @@ class Term { cols: dim.cols, }); - resizeDelay = null; }, resizeDelayInterval); }); } @@ -457,6 +458,11 @@ export default { term: new Term(this.control), typeface: termTypeFace, runner: null, + eventHandlers: { + resize: null, + keydown: null, + keyup: null, + }, }; }, watch: { @@ -552,38 +558,46 @@ export default { async init() { let self = this; - await this.openTerm( - this.$el.getElementsByClassName("console-console")[0], - { - focus(e) { - document.addEventListener("keyup", self.localKeypress); - document.addEventListener("keydown", self.localKeypress); - }, - blur(e) { - document.removeEventListener("keyup", self.localKeypress); - document.removeEventListener("keydown", self.localKeypress); - }, - warn(msg, toDismiss) { - self.$emit("warning", { - text: msg, - toDismiss: toDismiss, - }); - }, - info(msg, toDismiss) { - self.$emit("info", { - text: msg, - toDismiss: toDismiss, - }); - }, - } + self.eventHandlers = { + resize: () => self.fit(), + keyup: e => self.localKeypress(e), + keydown: e => self.localKeypress(e), + }; + + await self.openTerm( + self.$el.getElementsByClassName("console-console")[0], + { + focus(e) { + document.addEventListener("keyup", self.eventHandlers.keyup); + document.addEventListener("keydown", self.eventHandlers.keydown); + }, + blur(e) { + document.removeEventListener("keyup", self.eventHandlers.keyup); + document.removeEventListener("keydown", self.eventHandlers.keydown); + }, + warn(msg, toDismiss) { + self.$emit("warning", { + text: msg, + toDismiss: toDismiss, + }); + }, + info(msg, toDismiss) { + self.$emit("info", { + text: msg, + toDismiss: toDismiss, + }); + }, + } ); - if (this.term.destroyed()) { - return; + if (self.term.destroyed()) { + return; } - this.triggerActive(); - this.runRunner(); + self.triggerActive(); + self.runRunner(); + + self.$nextTick(() => self.eventHandlers.resize()); }, async deinit() { await this.closeRunner(); @@ -601,14 +615,12 @@ export default { e.preventDefault(); }, activate() { - window.addEventListener("resize", this.fit); - this.fit(); + this.eventHandlers.resize(); this.term.focus(); + window.addEventListener("resize", this.eventHandlers.resize); }, async deactivate() { - window.removeEventListener("resize", this.fit); - document.removeEventListener("keyup", this.localKeypress); - document.removeEventListener("keydown", this.localKeypress); + window.removeEventListener("resize", this.eventHandlers.resize); this.term.blur(); }, runRunner() { @@ -621,11 +633,11 @@ export default { this.runner = (async () => { try { for (;;) { - if (this.term.destroyed()) { + if (self.term.destroyed()) { break; } - this.term.write(await this.control.receive()); + self.term.write(await this.control.receive()); self.$emit("updated"); } diff --git a/ui/widgets/screens.vue b/ui/widgets/screens.vue index f06a12b..24cda99 100644 --- a/ui/widgets/screens.vue +++ b/ui/widgets/screens.vue @@ -26,7 +26,7 @@ :key="screenInfo.id" :style="'visibility: ' + (screen === idx ? 'visible' : 'hidden')" class="screen" - style="top: 0; right: 0; left: 0; bottom: 0; padding: 0; margin: 0; overflow: auto; position: absolute;" + style="width: 100%; height: 100%; top: 0; right: 0; left: 0; bottom: 0; padding: 0; margin: 0; overflow: auto; position: absolute;" >

Main Interface