blob: a5ac1ff37a036926c51a9c76d543014b301183b5 [file] [log] [blame]
Kevin Lubickf5ea37f2019-02-28 10:06:18 -05001// Adds compile-time JS functions to augment the CanvasKit interface.
2// Specifically, anything that should only be on the Skottie builds of canvaskit.
3
4
5CanvasKit.MakeManagedAnimation = function(json, imgs, fonts) {
6 if (!CanvasKit._MakeManagedAnimation) {
7 throw 'Not compiled with MakeManagedAnimation';
8 }
9 if (!imgs && !fonts) {
10 return CanvasKit._MakeManagedAnimation(json, 0, nullptr, nullptr, nullptr,
11 0, nullptr, nullptr, nullptr);
12 }
13 var imgNamePtrs = [];
14 var imgDataPtrs = [];
15 var imgSizes = [];
16
17 var keys = Object.keys(imgs);
18 for (var i = 0; i < keys.length; i++) {
19 var key = keys[i];
20 var buffer = imgs[key];
21 var data = new Uint8Array(buffer);
22
23 var iptr = CanvasKit._malloc(data.byteLength);
24 CanvasKit.HEAPU8.set(data, iptr);
25 imgDataPtrs.push(iptr);
26 imgSizes.push(data.byteLength);
27
28 // lengthBytesUTF8 and stringToUTF8Array are defined in the emscripten
29 // JS. See https://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html#stringToUTF8
30 // Add 1 for null terminator
31 var strLen = lengthBytesUTF8(key) + 1;
32 var strPtr = CanvasKit._malloc(strLen);
33
34 stringToUTF8(key, strPtr, strLen);
35 imgNamePtrs.push(strPtr);
36 }
37
38 // Not entirely sure if it matters, but the uintptr_t are 32 bits
39 // we want to copy our array of uintptr_t into the right size memory.
40 var namesPtr = copy1dArray(imgNamePtrs, CanvasKit.HEAPU32);
41 var imgsPtr = copy1dArray(imgDataPtrs, CanvasKit.HEAPU32);
42 var imgSizesPtr = copy1dArray(imgSizes, CanvasKit.HEAPU32);
43
44 var anim = CanvasKit._MakeManagedAnimation(json, keys.length, namesPtr, imgsPtr, imgSizesPtr,
45 0, nullptr, nullptr, nullptr);
46
47 // We leave the image data arrays and string data live and assume
48 // it is now owned by the C++ code
49 CanvasKit._free(namesPtr);
50 CanvasKit._free(imgsPtr);
51 CanvasKit._free(imgSizesPtr);
52
53 return anim;
54};