Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(949)

Unified Diff: third_party/WebKit/Source/devtools/scripts/spritesheet_assembler/index.js

Issue 2671413004: DevTools: introduce spritesheet assembler. (Closed)
Patch Set: rebaseline tests Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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));
+}
« no previous file with comments | « third_party/WebKit/Source/devtools/scripts/spritesheet_assembler/SVGSpriteSheet.js ('k') | tools/checkperms/checkperms.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698