// Adds any extra JS functions/helpers we want to add to CanvasKit. // Wrapped in a function to avoid leaking global variables. (function(CanvasKit){ function clamp(c) { return Math.round(Math.max(0, Math.min(c || 0, 255))); } // Colors are just a 32 bit number with 8 bits each of a, r, g, b // The API is the same as CSS's representation of color rgba(), that is // r,g,b are 0-255, and a is 0.0 to 1.0. // if a is omitted, it will be assumed to be 1.0 CanvasKit.Color = function(r, g, b, a) { if (a === undefined) { a = 1; } return (clamp(a*255) << 24) | (clamp(r) << 16) | (clamp(g) << 8) | (clamp(b) << 0); } // returns [r, g, b, a] from a color // where a is scaled between 0 and 1.0 CanvasKit.getColorComponents = function(color) { return [ (color >> 16) & 0xFF, (color >> 8) & 0xFF, (color >> 0) & 0xFF, ((color >> 24) & 0xFF) / 255, ] } CanvasKit.multiplyByAlpha = function(color, alpha) { if (alpha === 1) { return color; } // extract as int from 0 to 255 var a = (color >> 24) & 0xFF; a *= alpha; // mask off the old alpha color &= 0xFFFFFF; return clamp(a) << 24 | color; } }(Module)); // When this file is loaded in, the high level object is "Module"; // See https://stackoverflow.com/a/31090240 // This contraption keeps closure from minifying away the check // if btoa is defined *and* prevents runtime "btoa" or "window" is not defined. // Defined outside any scopes to make it available in all files. var isNode = !(new Function("try {return this===window;}catch(e){ return false;}")()); function almostEqual(floata, floatb) { return Math.abs(floata - floatb) < 0.00001; }