animation: Stop the animation before removing all the children
If the resource scale or the scale factor changes while the animation is playing, we need to stop the animation and start it again once the texture is loaded, as the idle might try to access an invalidated animation child otherwise. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/700
This commit is contained in:
parent
9e388ebcfd
commit
ea4d5f89eb
@ -54,12 +54,19 @@ var Animation = class {
|
|||||||
|
|
||||||
_loadFile(file, width, height) {
|
_loadFile(file, width, height) {
|
||||||
let [validResourceScale, resourceScale] = this.actor.get_resource_scale();
|
let [validResourceScale, resourceScale] = this.actor.get_resource_scale();
|
||||||
|
let wasPlaying = this._isPlaying;
|
||||||
|
|
||||||
|
if (this._isPlaying)
|
||||||
|
this.stop();
|
||||||
|
|
||||||
this._isLoaded = false;
|
this._isLoaded = false;
|
||||||
this.actor.destroy_all_children();
|
this.actor.destroy_all_children();
|
||||||
|
|
||||||
if (!validResourceScale)
|
if (!validResourceScale) {
|
||||||
|
if (wasPlaying)
|
||||||
|
this.play();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let textureCache = St.TextureCache.get_default();
|
let textureCache = St.TextureCache.get_default();
|
||||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
@ -67,6 +74,9 @@ var Animation = class {
|
|||||||
scaleFactor, resourceScale,
|
scaleFactor, resourceScale,
|
||||||
this._animationsLoaded.bind(this));
|
this._animationsLoaded.bind(this));
|
||||||
this.actor.set_child(this._animations);
|
this.actor.set_child(this._animations);
|
||||||
|
|
||||||
|
if (wasPlaying)
|
||||||
|
this.play();
|
||||||
}
|
}
|
||||||
|
|
||||||
_showFrame(frame) {
|
_showFrame(frame) {
|
||||||
|
Loading…
Reference in New Issue
Block a user