/* * This externs file prevents the Closure JS compiler from minifying away * names of objects created by Emscripten. * Basically, by defining empty objects and functions here, Closure will * know not to rename them. This is needed because of our pre-js files, * that is, the JS we hand-write to bundle into PathKit. * * Emscripten does not support automatically generating an externs file, so we * do it by hand. The general process is to write some JS code, and then put any * calls to PathKit or related things in here. Running ./compile.sh and then * looking at the minified results or running the Release-PathKit trybot should * verify nothing was missed. Optionally, looking directly at the minified * pathkit.js can be useful when developing locally. * * Docs: * https://github.com/cljsjs/packages/wiki/Creating-Externs * https://github.com/google/closure-compiler/wiki/Types-in-the-Closure-Type-System * * Example externs: * https://github.com/google/closure-compiler/tree/master/externs */ var PathKit = { SkBits2FloatUnsigned: function(num) {}, _malloc: function(size) {}, _free: function(ptr) {}, onRuntimeInitialized: function() {}, _FromCmds: function(ptr, size) {}, loadCmdsTypedArray: function(arr) {}, FromCmds: function(arr) {}, _SkCubicMap: function(cp1, cp2) {}, cubicYFromX: function(cpx1, cpy1, cpx2, cpy2, X) {}, cubicPtFromT: function(cpx1, cpy1, cpx2, cpy2, T) {}, /** * @type {Float32Array} */ HEAPF32: {}, SkPath: { _addPath: function(path, scaleX, skewX, transX, skewY, scaleY, transY, pers0, pers1, pers2) {}, _arc: function(x, y, radius, startAngle, endAngle, ccw) {}, _arcTo: function(x1, y1, x2, y2, radius) {}, _dash: function(on, off, phase) {}, _close: function() {}, _conicTo: function(x1, y1, x2, y2, w) {}, copy: function() {}, _cubicTo: function(cp1x, cp1y, cp2x, cp2y, x, y) {}, _ellipse: function(x, y, radiusX, radiusY, rotation, startAngle, endAngle, ccw) {}, _lineTo: function(x1, y1) {}, _moveTo: function(x1, y1) {}, _op: function(otherPath, op) {}, _quadTo: function(cpx, cpy, x, y) {}, _rect: function(x, y, w, h) {}, _simplify: function() {}, _stroke: function(opts) {}, _trim: function(startT, stopT, isComplement) {}, _transform: function() {}, // takes 1 or 9 params }, StrokeCap: { BUTT: {}, ROUND: {}, SQUARE: {}, }, StrokeJoin: { MITER: {}, ROUND: {}, BEVEL: {}, } }; // Define StrokeOpts object var StrokeOpts = {}; StrokeOpts.prototype.width; StrokeOpts.prototype.miter_limit; StrokeOpts.prototype.cap; StrokeOpts.prototype.join; // Define CubicMap object var CubicMap = {}; CubicMap.prototype.computeYFromX = function(x) {}; CubicMap.prototype.computePtFromT = function(t) {}; // For whatever reason, the closure compiler thinks it can rename some of our // prototype methods. Not entirely sure why. // Listing them here prevents that. PathKit.SkPath.prototype.addPath = function() {}; PathKit.SkPath.prototype.arc = function(x, y, radius, startAngle, endAngle, ccw) {}; PathKit.SkPath.prototype.arcTo = function(x1, y1, x2, y2, radius) {}; PathKit.SkPath.prototype.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {}; PathKit.SkPath.prototype.close = function() {}; PathKit.SkPath.prototype.closePath = function() {}; PathKit.SkPath.prototype.conicTo = function(x1, y1, x2, y2, w) {}; PathKit.SkPath.prototype.cubicTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {}; PathKit.SkPath.prototype.dash = function(on, off, phase) {}; PathKit.SkPath.prototype.ellipse = function(x, y, radiusX, radiusY, rotation, startAngle, endAngle, ccw) {}; PathKit.SkPath.prototype.lineTo = function(x, y) {}; PathKit.SkPath.prototype.moveTo = function(x, y) {}; PathKit.SkPath.prototype.op = function(otherPath, op) {}; PathKit.SkPath.prototype.quadTo = function(x1, y1, x2, y2) {}; PathKit.SkPath.prototype.quadraticCurveTo = function(x1, y1, x2, y2) {}; PathKit.SkPath.prototype.rect = function(x, y, w, h) {}; PathKit.SkPath.prototype.simplify = function() {}; PathKit.SkPath.prototype.stroke = function(opts) {}; PathKit.SkPath.prototype.transform = function() {}; PathKit.SkPath.prototype.trim = function(startT, stopT, isComplement) {}; // The following was taken from https://github.com/google/closure-compiler/blob/master/contrib/externs/svg.js /** * @constructor */ function SVGMatrix(){} /** * @type {number} */ SVGMatrix.prototype.a; /** * @type {number} */ SVGMatrix.prototype.b; /** * @type {number} */ SVGMatrix.prototype.c; /** * @type {number} */ SVGMatrix.prototype.d; /** * @type {number} */ SVGMatrix.prototype.e; /** * @type {number} */ SVGMatrix.prototype.f;