Merge pull request #497 from adroitwhiz/set-costume-size-synchronously-2

Set SVG skin size synchronously
This commit is contained in:
Chris Willis-Ford 2019-09-04 18:03:29 -07:00 committed by GitHub
commit 30ef2b1e51
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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,13 +159,6 @@ class SVGSkin extends Skin {
this._maxTextureScale = testScale;
}
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.emit(Skin.Events.WasAltered);
});
}