1cb93a386Sopenharmony_ciA WASM version of Skia's Canvas API. 2cb93a386Sopenharmony_ci 3cb93a386Sopenharmony_ciSee https://skia.org/user/modules/canvaskit for more background information. 4cb93a386Sopenharmony_ci 5cb93a386Sopenharmony_ci# Getting Started 6cb93a386Sopenharmony_ci 7cb93a386Sopenharmony_ci## Browser 8cb93a386Sopenharmony_ciTo use the library, run `npm install canvaskit-wasm` and then simply include it: 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci <script src="/node_modules/canvaskit-wasm/bin/canvaskit.js"></script> 11cb93a386Sopenharmony_ci CanvasKitInit({ 12cb93a386Sopenharmony_ci locateFile: (file) => '/node_modules/canvaskit-wasm/bin/'+file, 13cb93a386Sopenharmony_ci }).then((CanvasKit) => { 14cb93a386Sopenharmony_ci // Code goes here using CanvasKit 15cb93a386Sopenharmony_ci }); 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ciAs with all npm packages, there's a freely available CDN via unpkg.com: 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_ci <script src="https://unpkg.com/canvaskit-wasm@0.18.1/bin/canvaskit.js"></script> 20cb93a386Sopenharmony_ci CanvasKitInit({ 21cb93a386Sopenharmony_ci locateFile: (file) => 'https://unpkg.com/canvaskit-wasm@0.18.1/bin/'+file, 22cb93a386Sopenharmony_ci }).then(...) 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci## Node 25cb93a386Sopenharmony_ciTo use CanvasKit in Node, it's similar to the browser: 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_ci const CanvasKitInit = require('/node_modules/canvaskit-wasm/bin/canvaskit.js'); 28cb93a386Sopenharmony_ci CanvasKitInit({ 29cb93a386Sopenharmony_ci locateFile: (file) => __dirname + '/bin/'+file, 30cb93a386Sopenharmony_ci }).then((CanvasKit) => { 31cb93a386Sopenharmony_ci // Code goes here using CanvasKit 32cb93a386Sopenharmony_ci }); 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ciWith node, you also need to supply the `--expose-wasm` flag. 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci## WebPack 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ciWebPack's support for WASM is still somewhat experimental, but CanvasKit can be 39cb93a386Sopenharmony_ciused with a few configuration changes. 40cb93a386Sopenharmony_ci 41cb93a386Sopenharmony_ciIn the JS code, use require(): 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci const CanvasKitInit = require('canvaskit-wasm/bin/canvaskit.js') 44cb93a386Sopenharmony_ci CanvasKitInit().then((CanvasKit) => { 45cb93a386Sopenharmony_ci // Code goes here using CanvasKit 46cb93a386Sopenharmony_ci }); 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ciSince WebPack does not expose the entire `/node_modules/` directory, but instead 49cb93a386Sopenharmony_cipackages only the needed pieces, we have to copy canvaskit.wasm into the build directory. 50cb93a386Sopenharmony_ciOne such solution is to use [CopyWebpackPlugin](https://github.com/webpack-contrib/copy-webpack-plugin). 51cb93a386Sopenharmony_ciFor example, add the following plugin: 52cb93a386Sopenharmony_ci 53cb93a386Sopenharmony_ci config.plugins.push( 54cb93a386Sopenharmony_ci new CopyWebpackPlugin([ 55cb93a386Sopenharmony_ci { from: 'node_modules/canvaskit-wasm/bin/canvaskit.wasm' } 56cb93a386Sopenharmony_ci ]) 57cb93a386Sopenharmony_ci ); 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ciIf webpack gives an error similar to: 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_ci ERROR in ./node_modules/canvaskit-wasm/bin/canvaskit.js 62cb93a386Sopenharmony_ci Module not found: Error: Can't resolve 'fs' in '...' 63cb93a386Sopenharmony_ci 64cb93a386Sopenharmony_ciThen, add the following configuration change to the node section of the config: 65cb93a386Sopenharmony_ci 66cb93a386Sopenharmony_ci config.node = { 67cb93a386Sopenharmony_ci fs: 'empty' 68cb93a386Sopenharmony_ci }; 69cb93a386Sopenharmony_ci 70cb93a386Sopenharmony_ci 71cb93a386Sopenharmony_ci# Using the CanvasKit API 72cb93a386Sopenharmony_ci 73cb93a386Sopenharmony_ciSee `example.html` and `node.example.js` for demos of how to use the core API. 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ciSee `extra.html` for some optional add-ins like an animation player (Skottie) 76cb93a386Sopenharmony_ciand a particles system. 77cb93a386Sopenharmony_ci 78cb93a386Sopenharmony_ciSee `types/index.d.ts` for a typescript definition file that contains all the 79cb93a386Sopenharmony_ciAPIs and some documentation about them. 80cb93a386Sopenharmony_ci 81cb93a386Sopenharmony_ci## Drop-in Canvas2D replacement 82cb93a386Sopenharmony_ciFor environments where an HTML canvas is not available (e.g. Node, headless servers), 83cb93a386Sopenharmony_ciCanvasKit has an optional API (included by default) that mirrors the HTML canvas. 84cb93a386Sopenharmony_ci 85cb93a386Sopenharmony_ci let skcanvas = CanvasKit.MakeCanvas(600, 600); 86cb93a386Sopenharmony_ci 87cb93a386Sopenharmony_ci let ctx = skcanvas.getContext('2d'); 88cb93a386Sopenharmony_ci let rgradient = ctx.createRadialGradient(200, 300, 10, 100, 100, 300); 89cb93a386Sopenharmony_ci 90cb93a386Sopenharmony_ci // Add three color stops 91cb93a386Sopenharmony_ci rgradient.addColorStop(0, 'red'); 92cb93a386Sopenharmony_ci rgradient.addColorStop(0.7, 'white'); 93cb93a386Sopenharmony_ci rgradient.addColorStop(1, 'blue'); 94cb93a386Sopenharmony_ci 95cb93a386Sopenharmony_ci ctx.fillStyle = rgradient; 96cb93a386Sopenharmony_ci ctx.globalAlpha = 0.7; 97cb93a386Sopenharmony_ci ctx.fillRect(0, 0, 600, 600); 98cb93a386Sopenharmony_ci 99cb93a386Sopenharmony_ci let imgData = skcanvas.toDataURL(); 100cb93a386Sopenharmony_ci // imgData is now a base64 encoded image. 101cb93a386Sopenharmony_ci 102cb93a386Sopenharmony_ciSee more examples in `example.html` and `node.example.js`. 103cb93a386Sopenharmony_ci 104cb93a386Sopenharmony_ci 105cb93a386Sopenharmony_ci# Filing bugs 106cb93a386Sopenharmony_ci 107cb93a386Sopenharmony_ciPlease file bugs at [skbug.com](skbug.com). 108cb93a386Sopenharmony_ciIt may be convenient to use [our online fiddle](jsfiddle.skia.org/canvaskit) to demonstrate any issues encountered. 109cb93a386Sopenharmony_ci 110cb93a386Sopenharmony_ciSee CONTRIBUTING.md for more information on sending pull requests. 111cb93a386Sopenharmony_ci 112cb93a386Sopenharmony_ci# Types and Documentation 113cb93a386Sopenharmony_ci 114cb93a386Sopenharmony_ciThere are Typescript types and associated API docs in types/. 115