diff --git a/src/extension.js b/src/extension.js index 224df97..e595351 100644 --- a/src/extension.js +++ b/src/extension.js @@ -270,14 +270,14 @@ class Manager { } // Create UI Indicator - _createUi(ui_class, x, y, w, h, icon, parent) { + _createUi(ui_class, x, y, w, h, icon) { let ui = new St.Widget({ style_class: ui_class }); if (this._isDarkTheme()) { ui.add_style_class_name("wgs-dark"); } // ui.set_clip_to_allocation(true); ui._icon = null; - ui._parent = parent ? parent : Main.layoutManager.uiGroup; + ui._parent = Main.layoutManager.uiGroup; if (icon) { ui._icon = new St.Icon({ icon_name: icon, @@ -1927,8 +1927,10 @@ class Manager { let posCfg = this._settings.get_int( 'winswitch-position' ); - let lW = (pad * 2) + (wins.length * 48); - let lH = (pad * 2) + 32; + let monitor = global.display.get_primary_monitor(); + let scale = global.display.get_monitor_scale(monitor); + let lW = ((pad * 2) + (wins.length * 48)) * scale; + let lH = ((pad * 2) + 32) * scale; let lX = (gsize[0] - lW) / 2; let lY = 64; // Top let pivY = 0; @@ -1939,7 +1941,7 @@ class Manager { } else if (posCfg == 2) { // Bottom - lY = gsize[1] - (lH + 64); + lY = gsize[1] - (lH + 64 * scale); pivY = 1; } listActor = this._createUi( @@ -1947,18 +1949,18 @@ class Manager { ); listActor.set_pivot_point(0.5, pivY); listActor.opacity = 0; - listActor.scale_x = 0.5; - listActor.scale_y = 0.5; + listActor.scale_x = listActor.scale_y = 0.5; listActor._data = []; + let iconSize = 32 * scale; for (var i = 0; i < wins.length; i++) { let win = wins[i]; let app = this._winmanWinApp(win); - let ico = app.create_icon_texture(32); + let ico = app.create_icon_texture(iconSize); ico.add_style_class_name("wgs-winswitch-ico"); // remove_style_class_name listActor.add_child(ico); - ico.set_size(32, 32); - ico.set_position((pad * 2) + (48 * i), pad); + ico.set_size(iconSize, iconSize); + ico.set_position(((pad * 2) + (48 * i)) * scale, pad * scale); ico.set_pivot_point(0.5, 0.5); listActor._data.push( { @@ -1970,8 +1972,8 @@ class Manager { } listActor.viewShow({ opacity: 255, - scale_x: 1, - scale_y: 1 + scale_x: 1.0, + scale_y: 1.0 }, 200); // Reorder for next (below 1s) calls @@ -2274,43 +2276,47 @@ class Manager { // Init indicator if (!ui) { - activeWin = global.display.get_focus_window(); + let display = global.get_display() + activeWin = display.get_focus_window(); if (this._isWindowBlacklist(activeWin)) { activeWin = null; } if (activeWin) { - let uipar = activeWin.get_compositor_private(); - if (uipar) { - let wrect = activeWin.get_frame_rect(); - let uix = ((uipar.get_width() - wrect.width) / 2); - let uiy = (uipar.get_height() / 2) - 32; - if (kid) { - uix += wrect.width - 128; - } - else { - uix += 64; - } - ui = this._createUi( - 'wgs-indicator-backforward', - uix, - uiy, - 64, 64, - kid ? 'pan-end-symbolic.symbolic' : - 'pan-start-symbolic.symbolic', - uipar - ); - if (ui) { - ui.translation_x = kid ? -32 : 32; - ui.opacity = 0; - } - else { - ui = -1; - } - this._actionWidgets[kidw] = ui; + let wrect = activeWin.get_frame_rect(); + let primary_scale = 1.0; + let primary_monitor = display.get_primary_monitor(); + primary_scale = display.get_monitor_scale(primary_monitor); + let win_monitor = activeWin.get_monitor(); + let win_scale = 1.0; + if (win_monitor >= 0) { + win_scale = display.get_monitor_scale(win_monitor); + } + let uisize = 64 * primary_scale; + let uix = wrect.x; + let uiy = wrect.y + (wrect.height / 2) - uisize / 2; + if (kid) { + uix += wrect.width - uisize - 64 * win_scale; } else { - this._actionWidgets[kidw] = -1; + uix += 64 * win_scale; + } + ui = this._createUi( + 'wgs-indicator-backforward', + uix, + uiy, + uisize, uisize, + kid ? 'pan-end-symbolic.symbolic' : + 'pan-start-symbolic.symbolic', + ); + ui.scale_x = ui.scale_y = win_scale / primary_scale; + if (ui) { + ui.translation_x = kid ? -32 : 32; + ui.opacity = 0; } + else { + ui = -1; + } + this._actionWidgets[kidw] = ui; } else { this._actionWidgets[kidw] = -1; @@ -2389,6 +2395,9 @@ class Manager { } } else { + let display = global.get_display(); + let monitor = display.get_primary_monitor(); + let scale = display.get_monitor_scale(display); if (!ui) { const iconlist = [ 'audio-volume-muted-symbolic', @@ -2396,17 +2405,14 @@ class Manager { 'media-skip-forward-symbolic', 'media-skip-backward-symbolic' ]; - let display = global.get_display(); - let mrect = display.get_monitor_geometry( - display.get_primary_monitor() - ); + let mrect = display.get_monitor_geometry(monitor); + let uisize = 128 * scale; ui = this._createUi( 'wgs-indicator-keys', - mrect.x + (mrect.width / 2) - 64, - mrect.y + (mrect.height / 2) - 64, - 128, 128, + mrect.x + (mrect.width / 2) - (uisize / 2), + mrect.y + (mrect.height / 2) - (uisize / 2), + uisize, uisize, iconlist[id - 14], - null ); ui.opacity = 0; ui.scale_x = ui.scale_y = 0; @@ -2416,7 +2422,7 @@ class Manager { // Execute Progress if (ui && ui != -1) { if (!state) { - ui.scale_x = ui.scale_y = progress; + ui.scale_x = ui.scale_y = progress / scale; ui.opacity = Math.round(255 * progress); } else {