| Index: third_party/WebKit/Source/devtools/scripts/spritesheet_assembler/index.js
|
| diff --git a/third_party/WebKit/Source/devtools/scripts/spritesheet_assembler/index.js b/third_party/WebKit/Source/devtools/scripts/spritesheet_assembler/index.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cf042958a3388a98b7ba846b343bf209b30c0d7c
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/devtools/scripts/spritesheet_assembler/index.js
|
| @@ -0,0 +1,57 @@
|
| +var fs = require('fs');
|
| +var path = require('path');
|
| +var SVGSprite = require('./SVGSprite');
|
| +var Packer = require('./Packer');
|
| +var DevToolsDescriptors = require('./DevToolsDescriptors');
|
| +
|
| +var timestamp = 0;
|
| +function markStart() {
|
| + timestamp = Date.now();
|
| +}
|
| +function markEnd(label) {
|
| + console.log('==> ' + label + ': ' + (Date.now() - timestamp) + 'ms');
|
| +}
|
| +
|
| +/**
|
| + * @param {string} directoryPath
|
| + * @param {number} padding
|
| + * @param {string} outputSVGPath
|
| + * @param {string} outputJSPath
|
| + */
|
| +module.exports = function(directoryPath, padding, outputSVGPath, outputJSPath) {
|
| + // 1. Read all the svg files from given directory.
|
| + markStart();
|
| + var svgFilePaths = fs.readdirSync(directoryPath)
|
| + .filter(file => path.extname(file) === '.svg')
|
| + .map(fileName => path.join(directoryPath, fileName));
|
| +
|
| + var sprites = [];
|
| + var spritesArea = 0;
|
| + for (var filePath of svgFilePaths) {
|
| + var sprite = SVGSprite.loadFromFile(filePath);
|
| + spritesArea += sprite.width * sprite.height;
|
| + sprites.push(sprite);
|
| + }
|
| + markEnd('Loaded ' + svgFilePaths.length + ' files');
|
| +
|
| + // 2. Iterate over different sprite compositions to find best.
|
| + markStart();
|
| + var bestStyleSheet = null;
|
| + var bestCoverage = 0;
|
| + for (var sortOrderName in Packer.SpriteSortOrder) {
|
| + var sortOrder = Packer.SpriteSortOrder[sortOrderName];
|
| + var spriteSheet = Packer.packSprites(sprites, sortOrder, padding, padding);
|
| + var coverage = spritesArea / (spriteSheet.width() * spriteSheet.height());
|
| + if (!bestStyleSheet || coverage > bestCoverage) {
|
| + bestStyleSheet = spriteSheet;
|
| + bestCoverage = coverage;
|
| + }
|
| + }
|
| + markEnd(
|
| + 'Created spritesheet ' + bestStyleSheet.width() + 'x' + bestStyleSheet.height() + ' with ' +
|
| + ((bestCoverage * 10000 | 0) / 100) + '% coverage');
|
| +
|
| + // 3. Write results to disk
|
| + fs.writeFileSync(outputSVGPath, bestStyleSheet.svgText());
|
| + fs.writeFileSync(outputJSPath, DevToolsDescriptors.generateJS(bestStyleSheet));
|
| +}
|
|
|