Issue #315 : custom replay for Swap Color

This commit is contained in:
jdescottes
2015-10-06 01:22:43 +02:00
parent 2448e65ffa
commit a3a75b6096
9 changed files with 46 additions and 40 deletions

View File

@ -14,4 +14,12 @@
ns.Tool.prototype.getId = function() {
return this.toolId;
};
ns.Tool.prototype.raiseSaveStateEvent = function (replayData) {
$.publish(Events.PISKEL_SAVE_STATE, {
type : pskl.service.HistoryService.REPLAY,
scope : this,
replay : replayData
});
};
})();

View File

@ -76,14 +76,6 @@
}
};
ns.BaseTool.prototype.raiseSaveStateEvent = function (replayData) {
$.publish(Events.PISKEL_SAVE_STATE, {
type : pskl.service.HistoryService.REPLAY,
scope : this,
replay : replayData
});
};
ns.BaseTool.prototype.releaseToolAt = function (col, row, frame, overlay, event) {};
/**

View File

@ -23,36 +23,44 @@
*/
ns.ColorSwap.prototype.applyToolAt = function(col, row, frame, overlay, event) {
if (frame.containsPixel(col, row)) {
var sampledColor = frame.getPixel(col, row);
var oldColor = frame.getPixel(col, row);
var newColor = this.getToolColor();
var allLayers = pskl.utils.UserAgent.isMac ? event.metaKey : event.ctrlKey;
var allFrames = event.shiftKey;
this.swapColors(sampledColor, this.getToolColor(), allLayers, allFrames);
this.swapColors_(oldColor, newColor, allLayers, allFrames);
$.publish(Events.PISKEL_SAVE_STATE, {
type : pskl.service.HistoryService.SNAPSHOT
this.raiseSaveStateEvent({
allLayers : allLayers,
allFrames : allFrames,
oldColor : oldColor,
newColor : newColor
});
}
};
ns.ColorSwap.prototype.swapColors = function(oldColor, newColor, allLayers, allFrames) {
var swapPixelColor = function (pixelColor, x, y, frame) {
if (pixelColor == oldColor) {
frame.pixels[x][y] = newColor;
}
};
var currentLayer = pskl.app.piskelController.getCurrentLayer();
ns.ColorSwap.prototype.replay = function (frame, replayData) {
this.swapColors_(replayData.oldColor, replayData.newColor, replayData.allLayers, replayData.allFrames);
};
ns.ColorSwap.prototype.swapColors_ = function(oldColor, newColor, allLayers, allFrames) {
var currentFrameIndex = pskl.app.piskelController.getCurrentFrameIndex();
pskl.app.piskelController.getPiskel().getLayers().forEach(function (l) {
if (allLayers || l === currentLayer) {
l.getFrames().forEach(function (f, frameIndex) {
if (allFrames || frameIndex === currentFrameIndex) {
f.forEachPixel(swapPixelColor);
f.version++;
}
});
var layers = allLayers ? pskl.app.piskelController.getLayers() : [pskl.app.piskelController.getCurrentLayer()];
layers.forEach(function (layer) {
var frames = allFrames ? layer.getFrames() : [layer.getFrameAt(currentFrameIndex)];
frames.forEach(function (frame) {
this.applyToolOnFrame_(frame, oldColor, newColor);
}.bind(this));
}.bind(this));
};
ns.ColorSwap.prototype.applyToolOnFrame_ = function (frame, oldColor, newColor) {
frame.forEachPixel(function (color, col, row) {
if (color == oldColor) {
frame.pixels[col][row] = newColor;
}
});
frame.version++;
};
})();

View File

@ -41,7 +41,7 @@
/**
* @Override
*/
ns.Lighten.prototype.applyToolAt = function(col, row, frame, overlay, event, mouseButton) {
ns.Lighten.prototype.applyToolAt = function(col, row, frame, overlay, event) {
var modifiedColor = this.getModifiedColor_(col, row, frame, overlay, event);
this.draw(modifiedColor, col, row, frame, overlay);
};

View File

@ -12,7 +12,8 @@
this.applyTool_(evt.altKey, allFrames, allLayers);
$.publish(Events.PISKEL_RESET);
this.raiseSaveStateEvent_({
this.raiseSaveStateEvent({
altKey : evt.altKey,
allFrames : allFrames,
allLayers : allLayers
@ -30,14 +31,6 @@
}.bind(this));
};
ns.AbstractTransformTool.prototype.raiseSaveStateEvent_ = function (replayData) {
$.publish(Events.PISKEL_SAVE_STATE, {
type : pskl.service.HistoryService.REPLAY,
scope : this,
replay : replayData
});
};
ns.AbstractTransformTool.prototype.replay = function (frame, replayData) {
this.applyTool_(replayData.altKey, replayData.allFrames, replayData.allLayers);
};