piskel/dev/js/tools/drawing/BaseTool.js
2017-05-22 09:56:42 +02:00

94 lines
2.8 KiB
JavaScript

/**
* @provide pskl.tools.drawing.BaseTool
*
* @require pskl.utils
*/
(function() {
var ns = $.namespace('pskl.tools.drawing');
ns.BaseTool = function() {
pskl.tool.Tool.call(this);
this.toolId = 'tool-base';
};
pskl.utils.inherit(ns.BaseTool, pskl.tools.Tool);
ns.BaseTool.prototype.applyToolAt = function (col, row, frame, overlay, event) {};
ns.BaseTool.prototype.moveToolAt = function (col, row, frame, overlay, event) {};
ns.BaseTool.prototype.replay = Constants.ABSTRACT_FUNCTION;
ns.BaseTool.prototype.supportsDynamicPenSize = function() {
return false;
};
ns.BaseTool.prototype.getToolColor = function() {
if (pskl.app.mouseStateService.isRightButtonPressed()) {
return pskl.app.selectedColorsService.getSecondaryColor();
}
return pskl.app.selectedColorsService.getPrimaryColor();
};
ns.BaseTool.prototype.moveUnactiveToolAt = function (col, row, frame, overlay, event) {
if (overlay.containsPixel(col, row)) {
this.updateHighlightedPixel(frame, overlay, col, row);
} else {
this.hideHighlightedPixel(overlay);
}
};
ns.BaseTool.prototype.updateHighlightedPixel = function (frame, overlay, col, row) {
if (!isNaN(this.highlightedPixelCol) &&
!isNaN(this.highlightedPixelRow) &&
(this.highlightedPixelRow != row ||
this.highlightedPixelCol != col)) {
// Clean the previously highlighted pixel:
overlay.clear();
}
var frameColor = pskl.utils.intToColor(frame.getPixel(col, row));
var highlightColor = this.getHighlightColor_(frameColor);
var size = this.supportsDynamicPenSize() ? pskl.app.penSizeService.getPenSize() : 1;
pskl.PixelUtils.resizePixel(col, row, size).forEach(function (point) {
overlay.setPixel(point[0], point[1], highlightColor);
});
this.highlightedPixelCol = col;
this.highlightedPixelRow = row;
};
ns.BaseTool.prototype.getHighlightColor_ = function (frameColor) {
if (!frameColor) {
return Constants.TOOL_HIGHLIGHT_COLOR_DARK;
}
var luminance = window.tinycolor(frameColor).toHsl().l;
if (luminance > 0.5) {
return Constants.TOOL_HIGHLIGHT_COLOR_DARK;
} else {
return Constants.TOOL_HIGHLIGHT_COLOR_LIGHT;
}
};
ns.BaseTool.prototype.hideHighlightedPixel = function (overlay) {
if (this.highlightedPixelRow !== null && this.highlightedPixelCol !== null) {
overlay.clear();
this.highlightedPixelRow = null;
this.highlightedPixelCol = null;
}
};
ns.BaseTool.prototype.releaseToolAt = function (col, row, frame, overlay, event) {};
/**
* Does the tool support the ALT modifier. To be overridden by subclasses.
*
* @return {Boolean} true if the tool supports ALT.
*/
ns.BaseTool.prototype.supportsAlt = function () {
return false;
};
})();