From 94257a421435a06103c4280ac2f744319e8e6344 Mon Sep 17 00:00:00 2001 From: adroitwhiz Date: Tue, 13 Aug 2019 16:38:45 -0400 Subject: [PATCH] Set SVG skin size synchronously --- src/SVGSkin.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/SVGSkin.js b/src/SVGSkin.js index 9c10e61..90852ca 100644 --- a/src/SVGSkin.js +++ b/src/SVGSkin.js @@ -114,7 +114,19 @@ class SVGSkin extends Skin { * @fires Skin.event:WasAltered */ setSVG (svgData, rotationCenter) { - this._svgRenderer.fromString(svgData, 1, () => { + this._svgRenderer.loadString(svgData); + + // Size must be updated synchronously because the VM sets the costume's `size` immediately after calling this. + // TODO: add either a callback to this function so the costume size can be set after this is done, + // or something in the VM to handle setting the costume size when Skin.Events.WasAltered is emitted. + this.size = this._svgRenderer.size; + if (typeof rotationCenter === 'undefined') rotationCenter = this.calculateRotationCenter(); + this._viewOffset = this._svgRenderer.viewOffset; + // Reset rawRotationCenter when we update viewOffset. + this._rawRotationCenter = [NaN, NaN]; + this.setRotationCenter(rotationCenter[0], rotationCenter[1]); + + this._svgRenderer._draw(1, () => { const gl = this._renderer.gl; this._textureScale = this._maxTextureScale = 1; @@ -147,12 +159,6 @@ class SVGSkin extends Skin { this._maxTextureScale = testScale; } - if (typeof rotationCenter === 'undefined') rotationCenter = this.calculateRotationCenter(); - this.size = this._svgRenderer.size; - this._viewOffset = this._svgRenderer.viewOffset; - // Reset rawRotationCenter when we update viewOffset. - this._rawRotationCenter = [NaN, NaN]; - this.setRotationCenter(rotationCenter[0], rotationCenter[1]); this.emit(Skin.Events.WasAltered); }); }