| // Adds JS functions to augment the SkottieKit interface. |
| // For example, if there is a wrapper around the C++ call or logic to allow |
| // chaining, it should go here. |
| |
| // SkottieKit.onRuntimeInitialized is called after the WASM library has loaded. |
| // Anything that modifies an exposed class (e.g. SkPath) should be set |
| // after onRuntimeInitialized, otherwise, it can happen outside of that scope. |
| SkottieKit.onRuntimeInitialized = function() { |
| // All calls to 'this' need to go in externs.js so closure doesn't minify them away. |
| |
| SkottieKit.SkCanvas.prototype.clear = function (color4f) { |
| var cPtr = copy1dArray(color4f, SkottieKit.HEAPF32); |
| this._clear(cPtr); |
| SkottieKit._free(cPtr); |
| } |
| |
| SkottieKit.SkSurface.prototype.requestAnimationFrame = function(callback, dirtyRect) { |
| if (!this._cached_canvas) { |
| this._cached_canvas = this.getCanvas(); |
| } |
| window.requestAnimationFrame(function() { |
| if (this._context !== undefined) { |
| SkottieKit.setCurrentContext(this._context); |
| } |
| |
| callback(this._cached_canvas); |
| |
| // We do not dispose() of the SkSurface here, as the client will typically |
| // call requestAnimationFrame again from within the supplied callback. |
| // For drawing a single frame, prefer drawOnce(). |
| this.flush(); |
| }.bind(this)); |
| } |
| |
| // Run through the JS files that are added at compile time. |
| if (SkottieKit._extraInitializations) { |
| SkottieKit._extraInitializations.forEach(function(init) { |
| init(); |
| }); |
| } |
| }; // end SkottieKit.onRuntimeInitialized, that is, anything changing prototypes or dynamic. |
| |
| // Construct a 4-float color. |
| // Opaque if opacity is omitted. |
| SkottieKit.Color4f = function(r, g, b, a) { |
| if (a === undefined) { |
| a = 1; |
| } |
| return Float32Array.of(r, g, b, a); |
| } |
| |
| // Color constants use property getters to prevent other code from accidentally |
| // changing them. |
| Object.defineProperty(SkottieKit, "TRANSPARENT", { |
| get: function() { return SkottieKit.Color4f(0, 0, 0, 0); } |
| }); |
| Object.defineProperty(SkottieKit, "BLACK", { |
| get: function() { return SkottieKit.Color4f(0, 0, 0, 1); } |
| }); |
| Object.defineProperty(SkottieKit, "WHITE", { |
| get: function() { return SkottieKit.Color4f(1, 1, 1, 1); } |
| }); |
| // assets is a dictionary of named blobs: { key: ArrayBuffer, ... } |
| // The keys should be well-behaved strings - they're turned into null-terminated |
| // strings for the native side. |
| SkottieKit.MakeManagedAnimation = function(json, assets) { |
| if (!SkottieKit.managed_skottie) { |
| throw 'Not compiled with MakeManagedAnimation'; |
| } |
| if (!assets) { |
| return SkottieKit._MakeManagedAnimation(json, 0, nullptr, nullptr, nullptr); |
| } |
| var assetNamePtrs = []; |
| var assetDataPtrs = []; |
| var assetSizes = []; |
| |
| var assetKeys = Object.keys(assets || {}); |
| for (var i = 0; i < assetKeys.length; i++) { |
| var key = assetKeys[i]; |
| var buffer = assets[key]; |
| var data = new Uint8Array(buffer); |
| |
| var iptr = SkottieKit._malloc(data.byteLength); |
| SkottieKit.HEAPU8.set(data, iptr); |
| assetDataPtrs.push(iptr); |
| assetSizes.push(data.byteLength); |
| |
| // lengthBytesUTF8 and stringToUTF8Array are defined in the emscripten |
| // JS. See https://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html#stringToUTF8 |
| // Add 1 for null terminator |
| var strLen = lengthBytesUTF8(key) + 1; |
| var strPtr = SkottieKit._malloc(strLen); |
| |
| stringToUTF8(key, strPtr, strLen); |
| assetNamePtrs.push(strPtr); |
| } |
| |
| // Not entirely sure if it matters, but the uintptr_t are 32 bits |
| // we want to copy our array of uintptr_t into the right size memory. |
| var namesPtr = copy1dArray(assetNamePtrs, SkottieKit.HEAPU32); |
| var assetsPtr = copy1dArray(assetDataPtrs, SkottieKit.HEAPU32); |
| var assetSizesPtr = copy1dArray(assetSizes, SkottieKit.HEAPU32); |
| |
| var anim = SkottieKit._MakeManagedAnimation(json, assetKeys.length, namesPtr, |
| assetsPtr, assetSizesPtr); |
| |
| // The C++ code has made copies of the asset and string data, so free our copies. |
| SkottieKit._free(namesPtr); |
| SkottieKit._free(assetsPtr); |
| SkottieKit._free(assetSizesPtr); |
| |
| return anim; |
| }; |