From ae6faf56c5f497f26cd42c191b27ec33e79bc9ea Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 17 Sep 2024 18:44:55 +0900 Subject: [PATCH] lottie/expressions: ++coverage Allow direct key[0]/key[1] access for key.value in expression issue: https://github.com/thorvg/thorvg/issues/2722 --- .../resources/lottie/expressions/antennaAnimation.json | 1 + src/loaders/lottie/tvgLottieExpressions.cpp | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 examples/resources/lottie/expressions/antennaAnimation.json diff --git a/examples/resources/lottie/expressions/antennaAnimation.json b/examples/resources/lottie/expressions/antennaAnimation.json new file mode 100644 index 00000000..f2a30356 --- /dev/null +++ b/examples/resources/lottie/expressions/antennaAnimation.json @@ -0,0 +1 @@ +{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.5.4","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":120,"w":56,"h":56,"nm":"antenna_light_56","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"line1","parent":8,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.302],"y":[0]},"t":40,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[0]},{"t":100,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":0,"s":[31.629,14.289,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":60,"s":[30.938,14.993,0],"to":[0,0,0],"ti":[0,0,0]},{"t":120,"s":[31.629,14.289,0]}],"ix":2},"a":{"a":0,"k":[31.629,14.289,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.164,0.146],[0.026,0.218],[0.681,1.032],[1.076,0.611],[1.424,-0.045],[0.172,0.163],[0.012,0.237],[-0.042,0.111],[-0.082,0.086],[-0.108,0.048],[-0.118,0.003],[-1.533,-0.845],[-0.836,-1.266],[-0.17,-1.508],[0.031,-0.115],[0.073,-0.094],[0.103,-0.059],[0.118,-0.015]],"o":[[-0.219,-0.001],[-0.164,-0.146],[-0.138,-1.229],[-0.681,-1.032],[-1.233,-0.713],[-0.237,0],[-0.172,-0.163],[-0.003,-0.118],[0.042,-0.111],[0.082,-0.086],[0.108,-0.048],[1.749,-0.058],[1.32,0.749],[0.836,1.266],[0.015,0.118],[-0.031,0.115],[-0.073,0.094],[-0.103,0.059],[0,0]],"v":[[4.443,4.809],[3.848,4.58],[3.553,4.015],[2.306,0.575],[-0.367,-1.925],[-4.431,-2.947],[-5.069,-3.201],[-5.357,-3.825],[-5.298,-4.172],[-5.11,-4.47],[-4.823,-4.673],[-4.479,-4.751],[0.535,-3.548],[3.814,-0.482],[5.345,3.739],[5.321,4.09],[5.164,4.406],[4.898,4.637],[4.563,4.749]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[0.160784319043,0.160784319043,0.698039233685,1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[0,0.466666698456,1,1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60,"s":[0,0.917647123337,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":80,"s":[0,0.917647123337,1,1]},{"t":100,"s":[0.160784319043,0.160784319043,0.698039233685,1]}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.631,14.263],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"line2","parent":8,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.182],"y":[0]},"t":50,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":70,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[0]},{"t":110,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":0,"s":[34.569,11.481,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":60,"s":[32.521,13.495,0],"to":[0,0,0],"ti":[0,0,0]},{"t":120,"s":[34.569,11.481,0]}],"ix":2},"a":{"a":0,"k":[34.569,11.481,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.166,0.146],[0.029,0.219],[1.045,1.591],[1.655,0.941],[2.198,-0.071],[0.169,0.169],[0,0.239],[-0.169,0.169],[-0.239,0],[-2.192,-1.258],[-1.204,-1.827],[-0.244,-2.174],[0.031,-0.114],[0.073,-0.093],[0.103,-0.058],[0.117,-0.013]],"o":[[-0.221,-0.001],[-0.166,-0.146],[-0.206,-1.892],[-1.045,-1.591],[-1.904,-1.101],[-0.239,0],[-0.169,-0.169],[0,-0.239],[0.169,-0.169],[2.526,-0.078],[1.902,1.081],[1.204,1.827],[0.015,0.117],[-0.031,0.114],[-0.073,0.093],[-0.103,0.058],[0,0]],"v":[[6.564,6.701],[5.964,6.473],[5.662,5.907],[3.758,0.608],[-0.35,-3.244],[-6.627,-4.819],[-7.265,-5.083],[-7.529,-5.721],[-7.265,-6.359],[-6.627,-6.623],[0.588,-4.819],[5.312,-0.395],[7.514,5.691],[7.49,6.04],[7.332,6.353],[7.066,6.581],[6.732,6.689]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":30,"s":[0,0.466666668653,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[0,0.917647123337,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":70,"s":[0.160784319043,0.160784319043,0.698039233685,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":90,"s":[0.160784319043,0.160784319043,0.698039233685,1]},{"t":110,"s":[0,0.466666698456,1,1]}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.573,11.445],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"line3","parent":8,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.182],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[0]},{"t":120,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":0,"s":[37.193,8.704,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":60,"s":[34.042,12.041,0],"to":[0,0,0],"ti":[0,0,0]},{"t":120,"s":[37.193,8.704,0]}],"ix":2},"a":{"a":0,"k":[37.193,8.704,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.167,0.156],[0.018,0.228],[3.057,2.762],[4.116,-0.174],[0.172,0.159],[0.015,0.234],[-0.157,0.179],[-0.237,0.021],[-2.856,-1.622],[-1.542,-2.476],[-0.185,-2.912],[0.157,-0.18],[0.238,-0.018]],"o":[[-0.228,-0.002],[-0.167,-0.156],[-0.242,-4.113],[-3.057,-2.762],[-0.234,0.004],[-0.172,-0.159],[-0.01,-0.238],[0.157,-0.179],[3.281,-0.145],[2.532,1.45],[1.542,2.476],[0.013,0.239],[-0.157,0.18],[0,0]],"v":[[8.632,8.784],[8.018,8.539],[7.73,7.943],[2.582,-2.786],[-8.611,-6.824],[-9.245,-7.066],[-9.537,-7.678],[-9.309,-8.327],[-8.696,-8.64],[0.696,-6.379],[6.903,-0.398],[9.534,7.81],[9.31,8.463],[8.692,8.772]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":40,"s":[0,0.917647123337,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60,"s":[0.160784319043,0.160784319043,0.698039233685,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[0,0.466666698456,1,1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[0,0.466666698456,1,1]},{"t":120,"s":[0,0.917647123337,1,1]}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[37.194,8.64],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"pipka","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[23.376,22.697,0],"ix":2},"a":{"a":0,"k":[23.376,22.697,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.215,0],[0,1.215],[1.215,0],[0,-1.215]],"o":[[1.215,0],[0,-1.215],[-1.215,0],[0,1.215]],"v":[[0,2.201],[2.201,0],[0,-2.201],[-2.201,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.917647118662,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.37,19.348],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.709,0.685]],"o":[[0,0],[0,0],[-0.758,-0.625],[0,0]],"v":[[3.896,-4.305],[4.1,-4.113],[-1.912,4.305],[-4.1,2.345]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.917647118662,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[22.282,23.942],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"plate_inside_deep","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[21.314,24.836,0],"ix":2},"a":{"a":0,"k":[21.314,24.836,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.019,0.045],[5.615,5.022],[4.263,1.321],[0,0],[-9.168,-8.2]],"o":[[0,0],[-1.708,-4.136],[-5.466,-4.889],[-0.037,-0.012],[0,0],[9.168,8.2]],"v":[[15.981,9.043],[15.925,8.908],[4.486,-5.638],[-10.895,-15.287],[-11.007,-15.321],[0.526,-0.696]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.160784313725,0.160784313725,0.698039215686,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.827,27.976],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"plate_inside_edge","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[24.297,21.685,0],"ix":2},"a":{"a":0,"k":[24.297,21.685,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.785,3.114],[9.168,8.2],[2.785,-3.114],[-9.168,-8.2]],"o":[[2.785,-3.114],[-9.168,-8.2],[-2.785,3.114],[9.168,8.2]],"v":[[16.599,14.847],[5.042,-5.638],[-16.599,-14.847],[-5.042,5.638]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.466666696586,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.297,21.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"plate_outside_edge","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[23.477,22.54,0],"ix":2},"a":{"a":0,"k":[23.477,22.54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.528,-0.516],[9.235,8.201],[-3.235,3.619],[-0.168,0.144],[-8.754,-7.804],[1.551,-4.221]],"o":[[-3.235,3.607],[-9.235,-8.201],[0.144,-0.156],[3.607,-2.838],[8.273,7.443],[-0.391,0.626]],"v":[[16.757,15.139],[-5.706,6.83],[-16.456,-14.562],[-15.254,-15.909],[5.994,-6.289],[18.14,13.42]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[23.01,22.655],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"plate_outside","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[20.995,25.781,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[18.681,28.176,0],"to":[0,0,0],"ti":[0,0,0]},{"t":120,"s":[20.995,25.781,0]}],"ix":2,"x":"var $bm_rt;\nvar p = 0.81;\nvar a = 50;\nvar s = 1.70158;\nfunction easeandwizz_inOutBack(t, b, c, d) {\n if ((t /= d / 2) < 1)\n return $bm_sum($bm_mul($bm_div(c, 2), $bm_mul($bm_mul(t, t), $bm_sub($bm_mul($bm_sum(s *= 1.525, 1), t), s))), b);\n return $bm_sum($bm_mul($bm_div(c, 2), $bm_sum($bm_mul($bm_mul(t -= 2, t), $bm_sum($bm_mul($bm_sum(s *= 1.525, 1), t), s)), 2)), b);\n}\nfunction easeAndWizz() {\n var t, d, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key($bm_sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1].length;\n dim = 2;\n key(1)[2].length;\n dim = 3;\n } catch (e) {\n }\n t = $bm_sub(time, key1.time);\n d = $bm_sub(key2.time, key1.time);\n sX = key1[0];\n eX = $bm_sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = $bm_sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = $bm_sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = easeandwizz_inOutBack(t, sX, eX, d, a, p, s);\n switch (dim) {\n case 1:\n return val1;\n break;\n case 2:\n val2 = easeandwizz_inOutBack(t, sY, eY, d, a, p, s);\n return [\n val1,\n val2\n ];\n break;\n case 3:\n val2 = easeandwizz_inOutBack(t, sY, eY, d, a, p, s);\n val3 = easeandwizz_inOutBack(t, sZ, eZ, d, a, p, s);\n return [\n val1,\n val2,\n val3\n ];\n break;\n default:\n return null;\n }\n }\n}\n$bm_rt = easeAndWizz() || value;"},"a":{"a":0,"k":[20.995,25.781,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[95,95,100]},{"t":120,"s":[100,100,100]}],"ix":6,"x":"var $bm_rt;\nvar p = 0.81;\nvar a = 50;\nvar s = 1.70158;\nfunction easeandwizz_inOutBack(t, b, c, d) {\n if ((t /= d / 2) < 1)\n return $bm_sum($bm_mul($bm_div(c, 2), $bm_mul($bm_mul(t, t), $bm_sub($bm_mul($bm_sum(s *= 1.525, 1), t), s))), b);\n return $bm_sum($bm_mul($bm_div(c, 2), $bm_sum($bm_mul($bm_mul(t -= 2, t), $bm_sum($bm_mul($bm_sum(s *= 1.525, 1), t), s)), 2)), b);\n}\nfunction easeAndWizz() {\n var t, d, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key($bm_sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1].length;\n dim = 2;\n key(1)[2].length;\n dim = 3;\n } catch (e) {\n }\n t = $bm_sub(time, key1.time);\n d = $bm_sub(key2.time, key1.time);\n sX = key1[0];\n eX = $bm_sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = $bm_sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = $bm_sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = easeandwizz_inOutBack(t, sX, eX, d, a, p, s);\n switch (dim) {\n case 1:\n return val1;\n break;\n case 2:\n val2 = easeandwizz_inOutBack(t, sY, eY, d, a, p, s);\n return [\n val1,\n val2\n ];\n break;\n case 3:\n val2 = easeandwizz_inOutBack(t, sY, eY, d, a, p, s);\n val3 = easeandwizz_inOutBack(t, sZ, eZ, d, a, p, s);\n return [\n val1,\n val2,\n val3\n ];\n break;\n default:\n return null;\n }\n }\n}\n$bm_rt = easeAndWizz() || value;"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.595,-6.678],[9.175,8.201],[-7.576,8.466],[-5.676,-5.046]],"o":[[-7.576,8.417],[-9.175,-8.201],[7.013,2.915],[5.628,5.083]],"v":[[20.34,10.69],[-9.097,10.185],[-12.764,-19.108],[6.403,-7.083]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.917647118662,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[19.523,26.996],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"leg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[15.509,56,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[17.509,56,0],"to":[0,0,0],"ti":[0,0,0]},{"t":120,"s":[15.509,56,0]}],"ix":2,"x":"var $bm_rt;\nvar p = 0.81;\nvar a = 50;\nvar s = 1.70158;\nfunction easeandwizz_inOutBack(t, b, c, d) {\n if ((t /= d / 2) < 1)\n return $bm_sum($bm_mul($bm_div(c, 2), $bm_mul($bm_mul(t, t), $bm_sub($bm_mul($bm_sum(s *= 1.525, 1), t), s))), b);\n return $bm_sum($bm_mul($bm_div(c, 2), $bm_sum($bm_mul($bm_mul(t -= 2, t), $bm_sum($bm_mul($bm_sum(s *= 1.525, 1), t), s)), 2)), b);\n}\nfunction easeAndWizz() {\n var t, d, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key($bm_sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1].length;\n dim = 2;\n key(1)[2].length;\n dim = 3;\n } catch (e) {\n }\n t = $bm_sub(time, key1.time);\n d = $bm_sub(key2.time, key1.time);\n sX = key1[0];\n eX = $bm_sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = $bm_sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = $bm_sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = easeandwizz_inOutBack(t, sX, eX, d, a, p, s);\n switch (dim) {\n case 1:\n return val1;\n break;\n case 2:\n val2 = easeandwizz_inOutBack(t, sY, eY, d, a, p, s);\n return [\n val1,\n val2\n ];\n break;\n case 3:\n val2 = easeandwizz_inOutBack(t, sY, eY, d, a, p, s);\n val3 = easeandwizz_inOutBack(t, sZ, eZ, d, a, p, s);\n return [\n val1,\n val2,\n val3\n ];\n break;\n default:\n return null;\n }\n }\n}\n$bm_rt = easeAndWizz() || value;"},"a":{"a":0,"k":[10.474,56,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.339,0],[0,0],[0,-0.339],[0,0],[-0.339,0],[0,0],[0,0.339],[0,0]],"o":[[0,0],[-0.339,0],[0,0],[0,0.339],[0,0],[0.339,0],[0,0],[0,-0.339]],"v":[[9.86,-1.593],[-9.86,-1.593],[-10.474,-0.98],[-10.474,0.98],[-9.86,1.593],[9.86,1.593],[10.474,0.98],[10.474,-0.98]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.466666696586,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[10.474,54.407],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.843,0],[0,0.843],[0.843,0],[0,-0.843]],"o":[[0.843,0],[0,-0.843],[-0.843,0],[0,0.843]],"v":[[0,1.527],[1.527,0],[0,-1.527],[-1.527,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.433,44.312],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.128,-0.005],[0,0],[0.113,0.046],[0.086,0.086],[0.046,0.113],[-0.002,0.122],[0,0],[-0.046,0.113],[-0.086,0.086],[-0.113,0.046],[-0.122,-0.002],[0,0],[-0.589,-0.339],[0,0],[-0.046,-0.119],[0.033,-0.123],[0.1,-0.08]],"o":[[0,0],[-0.122,0.002],[-0.113,-0.046],[-0.086,-0.086],[-0.046,-0.113],[0,0],[-0.002,-0.122],[0.046,-0.113],[0.086,-0.086],[0.113,-0.046],[0,0],[0.679,0],[0,0],[0.107,0.069],[0.046,0.119],[-0.033,0.123],[-0.1,0.08]],"v":[[9.302,2.73],[-8.964,2.73],[-9.32,2.662],[-9.622,2.462],[-9.822,2.16],[-9.89,1.804],[-9.89,-1.804],[-9.822,-2.16],[-9.622,-2.462],[-9.32,-2.662],[-8.964,-2.73],[1.101,-2.73],[3.037,-2.213],[9.603,1.623],[9.839,1.913],[9.858,2.287],[9.652,2.599]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.917647118662,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[10.671,51.671],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.943,0],[0,-1.946],[0,0],[-1.943,0],[0,1.946]],"o":[[0,-1.946],[-1.943,0],[0,0],[0,1.946],[1.943,0],[0,0]],"v":[[3.517,-2.718],[0,-6.241],[-3.517,-2.718],[-3.517,2.718],[0,6.241],[3.517,2.718]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.160784313725,0.160784313725,0.698039215686,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.427,47.162],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"arm","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[-14]},{"t":120,"s":[0]}],"ix":10,"x":"var $bm_rt;\nvar p = 0.81;\nvar a = 50;\nvar s = 1.70158;\nfunction easeandwizz_inOutBack(t, b, c, d) {\n if ((t /= d / 2) < 1)\n return $bm_sum($bm_mul($bm_div(c, 2), $bm_mul($bm_mul(t, t), $bm_sub($bm_mul($bm_sum(s *= 1.525, 1), t), s))), b);\n return $bm_sum($bm_mul($bm_div(c, 2), $bm_sum($bm_mul($bm_mul(t -= 2, t), $bm_sum($bm_mul($bm_sum(s *= 1.525, 1), t), s)), 2)), b);\n}\nfunction easeAndWizz() {\n var t, d, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key($bm_sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1].length;\n dim = 2;\n key(1)[2].length;\n dim = 3;\n } catch (e) {\n }\n t = $bm_sub(time, key1.time);\n d = $bm_sub(key2.time, key1.time);\n sX = key1[0];\n eX = $bm_sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = $bm_sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = $bm_sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = easeandwizz_inOutBack(t, sX, eX, d, a, p, s);\n switch (dim) {\n case 1:\n return val1;\n break;\n case 2:\n val2 = easeandwizz_inOutBack(t, sY, eY, d, a, p, s);\n return [\n val1,\n val2\n ];\n break;\n case 3:\n val2 = easeandwizz_inOutBack(t, sY, eY, d, a, p, s);\n val3 = easeandwizz_inOutBack(t, sZ, eZ, d, a, p, s);\n return [\n val1,\n val2,\n val3\n ];\n break;\n default:\n return null;\n }\n }\n}\n$bm_rt = easeAndWizz() || value;"},"p":{"a":0,"k":[6.101,44.323,0],"ix":2},"a":{"a":0,"k":[6.101,44.323,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.327,1.042],[0,0],[1.042,-1.327],[0,0],[-1.327,-1.042],[0,0],[-1.042,1.327],[0,0]],"o":[[0,0],[-1.327,-1.042],[0,0],[-1.042,1.327],[0,0],[1.327,1.042],[0,0],[1.042,-1.327]],"v":[[4.978,-6.213],[4.855,-6.309],[0.566,-5.793],[-5.494,1.924],[-4.978,6.213],[-4.855,6.309],[-0.566,5.793],[5.494,-1.924]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.466666696586,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[9.226,40.195],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/src/loaders/lottie/tvgLottieExpressions.cpp b/src/loaders/lottie/tvgLottieExpressions.cpp index 6adf0dc0..cb752c45 100644 --- a/src/loaders/lottie/tvgLottieExpressions.cpp +++ b/src/loaders/lottie/tvgLottieExpressions.cpp @@ -935,6 +935,14 @@ static jerry_value_t _key(const jerry_call_info_t* info, const jerry_value_t arg jerry_object_set_sz(obj, EXP_INDEX, args[0]); jerry_object_set_sz(obj, EXP_VALUE, value); + //direct access, key[0], key[1] + if (exp->property->type == LottieProperty::Type::Float) { + jerry_object_set_index(obj, 0, value); + } else if (exp->property->type == LottieProperty::Type::Point || exp->property->type == LottieProperty::Type::Position) { + jerry_object_set_index(obj, 0, jerry_object_get_index(value, 0)); + jerry_object_set_index(obj, 1, jerry_object_get_index(value, 1)); + } + jerry_value_free(time); jerry_value_free(value); @@ -942,7 +950,6 @@ static jerry_value_t _key(const jerry_call_info_t* info, const jerry_value_t arg } - static jerry_value_t _createPath(const jerry_call_info_t* info, const jerry_value_t args[], const jerry_length_t argsCnt) { //TODO: arg1: points, arg2: inTangents, arg3: outTangents, arg4: isClosed