mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
94 lines
2.8 KiB
JavaScript
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;
|
|
};
|
|
})();
|