Introduce basic dithering tool

This commit is contained in:
grosbouddha 2015-09-14 21:41:10 +02:00
parent cbb97c60d0
commit ed32ddc747
8 changed files with 73 additions and 1 deletions

View File

@ -114,6 +114,12 @@
background-size: 30px; background-size: 30px;
} }
.tool-icon.tool-dithering {
background-image: url(../img/tools/dithering.png);
background-position: 8px 9px;
background-size: 30px;
}
/* /*
* Tool cursors: * Tool cursors:
*/ */
@ -128,7 +134,8 @@
} }
.tool-pen .drawing-canvas-container:hover, .tool-pen .drawing-canvas-container:hover,
.tool-lighten .drawing-canvas-container:hover { .tool-lighten .drawing-canvas-container:hover,
.tool-dithering .drawing-canvas-container:hover {
cursor: url(../img/icons/pen.png) 0 15, pointer; cursor: url(../img/icons/pen.png) 0 15, pointer;
} }

BIN
src/img/tools/dithering.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 B

View File

@ -38,6 +38,9 @@
this.paletteService = new pskl.service.palette.PaletteService(); this.paletteService = new pskl.service.palette.PaletteService();
this.paletteService.addDynamicPalette(new pskl.service.palette.CurrentColorsPalette()); this.paletteService.addDynamicPalette(new pskl.service.palette.CurrentColorsPalette());
this.selectedColorsService = new pskl.service.SelectedColorsService();
this.selectedColorsService.init();
this.paletteController = new pskl.controller.PaletteController(); this.paletteController = new pskl.controller.PaletteController();
this.paletteController.init(); this.paletteController.init();

View File

@ -2,6 +2,7 @@
var ns = $.namespace('pskl.controller'); var ns = $.namespace('pskl.controller');
ns.PaletteController = function () { ns.PaletteController = function () {
// TODO(grosbouddha): Reuse default colors from SelectedColorsService.
this.primaryColor = Constants.DEFAULT_PEN_COLOR; this.primaryColor = Constants.DEFAULT_PEN_COLOR;
this.secondaryColor = Constants.TRANSPARENT_COLOR; this.secondaryColor = Constants.TRANSPARENT_COLOR;
}; };

View File

@ -19,6 +19,7 @@
toDescriptor('rectangleSelect', 'S', new pskl.tools.drawing.RectangleSelect()), toDescriptor('rectangleSelect', 'S', new pskl.tools.drawing.RectangleSelect()),
toDescriptor('shapeSelect', 'Z', new pskl.tools.drawing.ShapeSelect()), toDescriptor('shapeSelect', 'Z', new pskl.tools.drawing.ShapeSelect()),
toDescriptor('lighten', 'U', new pskl.tools.drawing.Lighten()), toDescriptor('lighten', 'U', new pskl.tools.drawing.Lighten()),
toDescriptor('dithering', 'T', new pskl.tools.drawing.DitheringTool()),
toDescriptor('colorPicker', 'O', new pskl.tools.drawing.ColorPicker()) toDescriptor('colorPicker', 'O', new pskl.tools.drawing.ColorPicker())
]; ];

View File

@ -0,0 +1,28 @@
(function () {
var ns = $.namespace('pskl.service');
ns.SelectedColorsService = function () {
this.primaryColor_ = Constants.DEFAULT_PEN_COLOR;
this.secondaryColor_ = Constants.TRANSPARENT_COLOR;
};
ns.SelectedColorsService.prototype.init = function () {
$.subscribe(Events.PRIMARY_COLOR_SELECTED, this.onPrimaryColorUpdate_.bind(this));
$.subscribe(Events.SECONDARY_COLOR_SELECTED, this.onSecondaryColorUpdate_.bind(this));
};
ns.SelectedColorsService.prototype.getColors = function () {
if (this.primaryColor_ == null || this.secondaryColor_ == null) {
throw "SelectedColorsService not properly intialized.";
}
return [this.primaryColor_, this.secondaryColor_];
};
ns.SelectedColorsService.prototype.onPrimaryColorUpdate_ = function (evt, color) {
this.primaryColor_ = color;
};
ns.SelectedColorsService.prototype.onSecondaryColorUpdate_ = function (evt, color) {
this.secondaryColor_ = color;
};
})();

View File

@ -0,0 +1,30 @@
/**
* @provide pskl.tools.drawing.DitheringTool
*
* @require pskl.utils
*/
(function() {
var ns = $.namespace('pskl.tools.drawing');
ns.DitheringTool = function() {
ns.SimplePen.call(this);
this.toolId = 'tool-dithering';
this.helpText = 'Dithering tool';
};
pskl.utils.inherit(ns.DitheringTool, ns.SimplePen);
/**
* @override
*/
ns.DitheringTool.prototype.applyToolAt = function(col, row, color, frame, overlay, event) {
var ditheringColor;
var currentColors = pskl.app.selectedColorsService.getColors();
// XOR on either row or col parity.
if (((col % 2 == 0) && !(row % 2 == 0)) || (!(col % 2 == 0) && (row % 2 == 0))) {
ditheringColor = currentColors[0];
} else {
ditheringColor = currentColors[1];
}
this.superclass.applyToolAt.call(this, col, row, ditheringColor, frame, overlay, event);
};
})();

View File

@ -160,6 +160,7 @@
"js/service/ImageUploadService.js", "js/service/ImageUploadService.js",
"js/service/CurrentColorsService.js", "js/service/CurrentColorsService.js",
"js/service/FileDropperService.js", "js/service/FileDropperService.js",
"js/service/SelectedColorsService.js",
// Tools // Tools
"js/tools/ToolsHelper.js", "js/tools/ToolsHelper.js",
@ -181,6 +182,7 @@
"js/tools/drawing/selection/ShapeSelect.js", "js/tools/drawing/selection/ShapeSelect.js",
"js/tools/drawing/ColorPicker.js", "js/tools/drawing/ColorPicker.js",
"js/tools/drawing/ColorSwap.js", "js/tools/drawing/ColorSwap.js",
"js/tools/drawing/DitheringTool.js",
"js/tools/transform/Transform.js", "js/tools/transform/Transform.js",
"js/tools/transform/Clone.js", "js/tools/transform/Clone.js",
"js/tools/transform/Flip.js", "js/tools/transform/Flip.js",