Update rive-cpp to 2.0 version
[platform/core/uifw/rive-tizen.git] / submodule / skia / modules / canvaskit / skottie.js
1 // 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 // assets is a dictionary of named blobs: { key: ArrayBuffer, ... }
5 // The keys should be well-behaved strings - they're turned into null-terminated
6 // strings for the native side.
7
8 // prop_filter_prefix is an optional string acting as a name filter for selecting
9 // "interesting" Lottie properties (surfaced in the embedded player controls)
10
11 // soundMap is an optional object that maps string names to AudioPlayers
12 // AudioPlayers manage a single audio layer with a seek function
13
14 // logger is an optional logging object, expected to provide two functions:
15 //   - onError(err_str, json_node_str)
16 //   - onWarning(wrn_str, json_node_str)
17 CanvasKit.MakeManagedAnimation = function(json, assets, prop_filter_prefix, soundMap, logger) {
18   if (!CanvasKit._MakeManagedAnimation) {
19     throw 'Not compiled with MakeManagedAnimation';
20   }
21   if (!prop_filter_prefix) {
22     prop_filter_prefix = '';
23   }
24   if (!assets) {
25     return CanvasKit._MakeManagedAnimation(json, 0, nullptr, nullptr, nullptr, prop_filter_prefix,
26                                            soundMap, logger);
27   }
28   var assetNamePtrs = [];
29   var assetDataPtrs = [];
30   var assetSizes    = [];
31
32   var assetKeys = Object.keys(assets || {});
33   for (var i = 0; i < assetKeys.length; i++) {
34     var key = assetKeys[i];
35     var buffer = assets[key];
36     var data = new Uint8Array(buffer);
37
38     var iptr = CanvasKit._malloc(data.byteLength);
39     CanvasKit.HEAPU8.set(data, iptr);
40     assetDataPtrs.push(iptr);
41     assetSizes.push(data.byteLength);
42
43     // lengthBytesUTF8 and stringToUTF8Array are defined in the emscripten
44     // JS.  See https://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html#stringToUTF8
45     // Add 1 for null terminator
46     var strLen = lengthBytesUTF8(key) + 1;
47     var strPtr = CanvasKit._malloc(strLen);
48
49     stringToUTF8(key, strPtr, strLen);
50     assetNamePtrs.push(strPtr);
51   }
52
53   // Not entirely sure if it matters, but the uintptr_t are 32 bits
54   // we want to copy our array of uintptr_t into the right size memory.
55   var namesPtr      = copy1dArray(assetNamePtrs, "HEAPU32");
56   var assetsPtr     = copy1dArray(assetDataPtrs, "HEAPU32");
57   var assetSizesPtr = copy1dArray(assetSizes,    "HEAPU32");
58
59   var anim = CanvasKit._MakeManagedAnimation(json, assetKeys.length, namesPtr,
60                                              assetsPtr, assetSizesPtr, prop_filter_prefix,
61                                              soundMap, logger);
62
63   // The C++ code has made copies of the asset and string data, so free our copies.
64   CanvasKit._free(namesPtr);
65   CanvasKit._free(assetsPtr);
66   CanvasKit._free(assetSizesPtr);
67
68   return anim;
69 };
70
71 (function(CanvasKit){
72   CanvasKit._extraInitializations = CanvasKit._extraInitializations || [];
73   CanvasKit._extraInitializations.push(function() {
74
75   CanvasKit.Animation.prototype.render = function(canvas, dstRect) {
76     copyRectToWasm(dstRect, _scratchFourFloatsAPtr);
77     this._render(canvas, _scratchFourFloatsAPtr);
78   };
79
80   CanvasKit.Animation.prototype.size = function(optSize) {
81     // This will copy 2 floats into a space for 4 floats
82     this._size(_scratchFourFloatsAPtr);
83     var ta = _scratchFourFloatsA['toTypedArray']();
84     if (optSize) {
85       // We cannot call optSize.set() because it is an error to call .set() with
86       // a source bigger than the destination.
87       optSize[0] = ta[0];
88       optSize[1] = ta[1];
89       return optSize;
90     }
91     // Be sure to return a copy of just the first 2 values.
92     return ta.slice(0, 2);
93   };
94
95   if (CanvasKit.ManagedAnimation) {
96     CanvasKit.ManagedAnimation.prototype.render = function(canvas, dstRect) {
97     copyRectToWasm(dstRect, _scratchFourFloatsAPtr);
98     this._render(canvas, _scratchFourFloatsAPtr);
99     };
100
101     CanvasKit.ManagedAnimation.prototype.seek = function(t, optDamageRect) {
102       this._seek(t, _scratchFourFloatsAPtr);
103       var ta = _scratchFourFloatsA['toTypedArray']();
104       if (optDamageRect) {
105         optDamageRect.set(ta);
106         return optDamageRect;
107       }
108       return ta.slice();
109     };
110
111     CanvasKit.ManagedAnimation.prototype.seekFrame = function(frame, optDamageRect) {
112       this._seekFrame(frame, _scratchFourFloatsAPtr);
113       var ta = _scratchFourFloatsA['toTypedArray']();
114       if (optDamageRect) {
115         optDamageRect.set(ta);
116         return optDamageRect;
117       }
118       return ta.slice();
119     };
120
121     CanvasKit.ManagedAnimation.prototype.setColor = function(key, color) {
122       var cPtr = copyColorToWasm(color);
123       return this._setColor(key, cPtr);
124     };
125
126     CanvasKit.ManagedAnimation.prototype.size = function(optSize) {
127       // This will copy 2 floats into a space for 4 floats
128       this._size(_scratchFourFloatsAPtr);
129       var ta = _scratchFourFloatsA['toTypedArray']();
130       if (optSize) {
131         // We cannot call optSize.set() because it is an error to call .set() with
132         // a source bigger than the destination.
133         optSize[0] = ta[0];
134         optSize[1] = ta[1];
135         return optSize;
136       }
137       // Be sure to return a copy of just the first 2 values.
138       return ta.slice(0, 2);
139     };
140   }
141
142
143 });
144 }(Module)); // When this file is loaded in, the high level object is "Module";