animation: Scale animation actor for HiDPI

The Animation class inherits from St.Bin and manages the scale factor
in the image loading, but the widget size doesn't change and doesn't
depend on the scale factor so when the scale factor is different
from 1 the widget size doesn't match the image size.

This patch resizes the Animation widget using the scale factor so the
widget will match the animation images sizes.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1746
This commit is contained in:
Daniel García Moreno 2020-01-17 10:12:52 +01:00 committed by Florian Müllner
parent db9ef11f28
commit 5b2c604fe4

View File

@ -12,14 +12,22 @@ var SPINNER_ANIMATION_DELAY = 1000;
var Animation = GObject.registerClass( var Animation = GObject.registerClass(
class Animation extends St.Bin { class Animation extends St.Bin {
_init(file, width, height, speed) { _init(file, width, height, speed) {
super._init({ width, height }); const themeContext = St.ThemeContext.get_for_stage(global.stage);
super._init({
width: width * themeContext.scale_factor,
height: height * themeContext.scale_factor,
});
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
this.connect('resource-scale-changed', this.connect('resource-scale-changed',
this._loadFile.bind(this, file, width, height)); this._loadFile.bind(this, file, width, height));
let themeContext = St.ThemeContext.get_for_stage(global.stage);
this._scaleChangedId = themeContext.connect('notify::scale-factor', this._scaleChangedId = themeContext.connect('notify::scale-factor',
this._loadFile.bind(this, file, width, height)); () => {
this._loadFile(file, width, height);
this.set_size(width * themeContext.scale_factor, height * themeContext.scale_factor);
});
this._speed = speed; this._speed = speed;