perf step 1 : ok on chrome,horrible on FF

This commit is contained in:
jdescottes 2014-07-07 22:48:13 +02:00
parent 304a5c06da
commit b3bb2472f1
4 changed files with 58 additions and 5 deletions

View File

@ -18,7 +18,8 @@
toDescriptor('rectangleSelect', 'S', new pskl.drawingtools.RectangleSelect()), toDescriptor('rectangleSelect', 'S', new pskl.drawingtools.RectangleSelect()),
toDescriptor('shapeSelect', 'Z', new pskl.drawingtools.ShapeSelect()), toDescriptor('shapeSelect', 'Z', new pskl.drawingtools.ShapeSelect()),
toDescriptor('lighten', 'U', new pskl.drawingtools.Lighten()), toDescriptor('lighten', 'U', new pskl.drawingtools.Lighten()),
toDescriptor('colorPicker', 'O', new pskl.drawingtools.ColorPicker()) toDescriptor('colorPicker', 'O', new pskl.drawingtools.ColorPicker()),
toDescriptor('colorSwap', 'F', new pskl.drawingtools.ColorSwap())
]; ];
this.currentSelectedTool = this.tools[0]; this.currentSelectedTool = this.tools[0];

View File

@ -0,0 +1,45 @@
/**
* @provide pskl.drawingtools.ColorSwap
*
* @require pskl.utils
*/
(function() {
var ns = $.namespace("pskl.drawingtools");
ns.ColorSwap = function() {
this.toolId = "tool-colorswap";
this.helpText = "Color swap";
};
pskl.utils.inherit(ns.ColorSwap, ns.BaseTool);
/**
* @override
*/
ns.ColorSwap.prototype.applyToolAt = function(col, row, color, frame, overlay, event) {
if (frame.containsPixel(col, row)) {
var sampledColor = frame.getPixel(col, row);
console.time('swapColors');
this.swapColors(sampledColor, color);
console.timeEnd('swapColors');
$.publish(Events.PISKEL_SAVE_STATE, {
type : pskl.service.HistoryService.SNAPSHOT
});
}
};
ns.ColorSwap.prototype.swapColors = function(oldColor, newColor) {
var swapPixels = function (pixelColor,x,y,frame) {
if (pixelColor == oldColor) {
frame.pixels[x][y] = newColor;
}
};
pskl.app.piskelController.getPiskel().getLayers().forEach(function (l) {
l.getFrames().forEach(function (f) {
f.forEachPixel(swapPixels);
f.version++;
});
});
};
})();

View File

@ -96,16 +96,22 @@
ns.Frame.prototype.getPixel = function (x, y) { ns.Frame.prototype.getPixel = function (x, y) {
if (this.containsPixel(x, y)) { if (this.containsPixel(x, y)) {
return this.pixels[x][y]; return this._unsafeGetPixel(x,y);
} else { } else {
return null; return null;
} }
}; };
ns.Frame.prototype._unsafeGetPixel = function (x, y) {
return this.pixels[x][y];
};
ns.Frame.prototype.forEachPixel = function (callback) { ns.Frame.prototype.forEachPixel = function (callback) {
for (var col = 0 ; col < this.getWidth() ; col++) { var width = this.getWidth();
for (var row = 0 ; row < this.getHeight() ; row++) { var height = this.getHeight();
callback(this.getPixel(col, row), col, row); for (var col = 0 ; col < width ; col++) {
for (var row = 0 ; row < height ; row++) {
callback(this._unsafeGetPixel(col, row), col, row, this);
} }
} }
}; };

View File

@ -131,6 +131,7 @@
"js/drawingtools/selectiontools/RectangleSelect.js", "js/drawingtools/selectiontools/RectangleSelect.js",
"js/drawingtools/selectiontools/ShapeSelect.js", "js/drawingtools/selectiontools/ShapeSelect.js",
"js/drawingtools/ColorPicker.js", "js/drawingtools/ColorPicker.js",
"js/drawingtools/ColorSwap.js",
// Application controller and initialization // Application controller and initialization
"js/app.js" "js/app.js"
]; ];