From 2033f1b00c9cd8b00035ae2c7ea02153d2b6a0e8 Mon Sep 17 00:00:00 2001 From: Charles Gagnon Date: Sat, 18 May 2019 09:17:34 -0400 Subject: [PATCH] Use aspect ratio only for preview sizing --- ...shell.extensions.dash-to-panel.gschema.xml | 2 +- windowPreview.js | 49 +++++++------------ 2 files changed, 20 insertions(+), 31 deletions(-) diff --git a/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml b/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml index b49e2d5..21b3dc1 100644 --- a/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml +++ b/schemas/org.gnome.shell.extensions.dash-to-panel.gschema.xml @@ -411,7 +411,7 @@ Display window title in preview - 200 + 240 Window previews size Preferred window previews size diff --git a/windowPreview.js b/windowPreview.js index 41ce85b..7766a2b 100644 --- a/windowPreview.js +++ b/windowPreview.js @@ -33,7 +33,9 @@ const Utils = Me.imports.utils; const T1 = 'openMenuTimeout'; const T2 = 'closeMenuTimeout'; +const MAX_TRANSLATION = 40; const HEADER_HEIGHT = 0; +const DEFAULT_RATIO = { w: 160, h: 90 }; var PreviewMenu = Utils.defineClass({ Name: 'DashToPanel.PreviewMenu', @@ -49,7 +51,7 @@ var PreviewMenu = Utils.defineClass({ this._position = Taskbar.getPosition(); let isLeftOrRight = this._checkIfLeftOrRight(); this._translationProp = 'translation_' + (isLeftOrRight ? 'x' : 'y'); - this._translationOffset = Math.min(this._dtpSettings.get_int('panel-size'), 40) * + this._translationOffset = Math.min(this._dtpSettings.get_int('panel-size'), MAX_TRANSLATION) * (this._position == St.Side.TOP || this._position == St.Side.LEFT ? -1 : 1); this.menu = new St.Widget({ name: 'preview-menu', layout_manager: new Clutter.BinLayout(), reactive: true, track_hover: true }); @@ -75,12 +77,14 @@ var PreviewMenu = Utils.defineClass({ //'sync-tooltip' //this.add_style_class_name('app-well-menu'); - // add fixed size limitations + // add middle click // move closing delay setting from "advanced" // this._titleWindowChangeId = this.window.connect('notify::title', // Lang.bind(this, this._updateWindowTitle)); + + // hook settings }, enable: function() { @@ -192,18 +196,6 @@ var PreviewMenu = Utils.defineClass({ return this._currentAppIcon; }, - vfunc_get_preferred_width: function(forHeight) { - let [, width] = St.Widget.prototype.vfunc_get_preferred_width.call(this, forHeight); - - return [0, Math.min(width, this._panelWrapper.monitor.width)]; - }, - - vfunc_get_preferred_height: function(forWidth) { - let [, height] = St.Widget.prototype.vfunc_get_preferred_height.call(this, forWidth); - - return [0, Math.min(height, this._panelWrapper.monitor.height)]; - }, - _addCloseTimeout: function() { this._timeoutsHandler.add([T2, this._dtpSettings.get_int('leave-timeout'), () => this.close()]); }, @@ -372,7 +364,8 @@ var Preview = Utils.defineClass({ this._panelWrapper = panelWrapper; this._previewMenu = previewMenu; - this._padding = previewMenu._dtpSettings.get_int('window-preview-padding'); + this._padding = previewMenu._dtpSettings.get_int('window-preview-padding') * St.ThemeContext.get_for_stage(global.stage).scale_factor; + this._previewDimensions = this._getPreviewDimensions(); this.animatingOut = false; this._titleBox = new St.BoxLayout({ height: HEADER_HEIGHT }); @@ -386,7 +379,8 @@ var Preview = Utils.defineClass({ this._previewBin = new St.Widget({ layout_manager: new Clutter.BinLayout() }); this._previewBin.set_style('padding: ' + this._padding + 'px'); - this._resizeBin(); + this._previewBin.set_size.apply(this._previewBin, this._getBinSize()); + this.add_actor(this._previewBin); }, @@ -464,14 +458,8 @@ var Preview = Utils.defineClass({ }); }, - _resizeBin: function() { - let [width, height] = this._getBinSize(); - - this._previewBin.set_size(width, height); - }, - _getBinSize: function() { - let [width, height] = this._getPreviewDimensions(); + let [width, height] = this._previewDimensions; width += this._padding * 2; height += this._padding * 2; @@ -487,7 +475,7 @@ var Preview = Utils.defineClass({ _resizeClone: function(clone) { let [width, height] = clone.get_source().get_size(); - let [maxWidth, maxHeight] = this._getPreviewDimensions(); + let [maxWidth, maxHeight] = this._previewDimensions; let ratio = Math.min(maxWidth / width, maxHeight / height); ratio = ratio < 1 ? ratio : 1; @@ -499,17 +487,18 @@ var Preview = Utils.defineClass({ }, _getPreviewDimensions: function() { - let size = this._previewMenu._dtpSettings.get_int('window-preview-size'); + let size = this._previewMenu._dtpSettings.get_int('window-preview-size') * St.ThemeContext.get_for_stage(global.stage).scale_factor; let w, h; if (this._previewMenu._checkIfLeftOrRight()) { - + w = Math.max(DEFAULT_RATIO.w, size); + h = w * DEFAULT_RATIO.h / DEFAULT_RATIO.w; + } else { + h = Math.max(DEFAULT_RATIO.h, size); + w = h * DEFAULT_RATIO.w / DEFAULT_RATIO.h; } - return [ - this._previewMenu._dtpSettings.get_int('window-preview-width'), - this._previewMenu._dtpSettings.get_int('window-preview-height') - ]; + return [w, h]; } });