mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
160 lines
5.1 KiB
JavaScript
160 lines
5.1 KiB
JavaScript
|
(function () {
|
||
|
var ns = $.namespace('pskl.devtools');
|
||
|
|
||
|
ns.DrawingTestRecorder = function (piskelController) {
|
||
|
this.piskelController = piskelController;
|
||
|
this.isRecording = false;
|
||
|
this.reset();
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.init = function () {
|
||
|
$.subscribe(Events.MOUSE_EVENT, this.onMouseEvent_.bind(this));
|
||
|
$.subscribe(Events.KEYBOARD_EVENT, this.onKeyboardEvent_.bind(this));
|
||
|
$.subscribe(Events.TOOL_SELECTED, this.onToolEvent_.bind(this));
|
||
|
$.subscribe(Events.PEN_SIZE_CHANGED, this.onPenSizeChanged_.bind(this));
|
||
|
$.subscribe(Events.TRANSFORMATION_EVENT, this.onTransformationEvent_.bind(this));
|
||
|
$.subscribe(Events.PRIMARY_COLOR_SELECTED, this.onColorEvent_.bind(this, true));
|
||
|
$.subscribe(Events.SECONDARY_COLOR_SELECTED, this.onColorEvent_.bind(this, false));
|
||
|
|
||
|
for (var key in this.piskelController) {
|
||
|
if (typeof this.piskelController[key] == 'function') {
|
||
|
var methodTriggersReset = this.piskelController[key].toString().indexOf('Events.PISKEL_RESET') != -1;
|
||
|
if (methodTriggersReset) {
|
||
|
this.piskelController[key] = this.instrumentMethod_(this.piskelController, key);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.instrumentMethod_ = function (object, methodName) {
|
||
|
var method = object[methodName];
|
||
|
var testRecorder = this;
|
||
|
return function () {
|
||
|
testRecorder.onInstrumentedMethod_(object, methodName, arguments);
|
||
|
return method.apply(this, arguments);
|
||
|
};
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.reset = function () {
|
||
|
this.initialState = {};
|
||
|
this.events = [];
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.startRecord = function () {
|
||
|
this.isRecording = true;
|
||
|
this.initialState = {
|
||
|
size : {
|
||
|
width : this.piskelController.getWidth(),
|
||
|
height : this.piskelController.getHeight()
|
||
|
},
|
||
|
primaryColor : pskl.app.selectedColorsService.getPrimaryColor(),
|
||
|
secondaryColor : pskl.app.selectedColorsService.getSecondaryColor(),
|
||
|
selectedTool : pskl.app.toolController.currentSelectedTool.toolId,
|
||
|
penSize : pskl.app.penSizeService.getPenSize()
|
||
|
};
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.stopRecord = function () {
|
||
|
this.isRecording = false;
|
||
|
|
||
|
var renderer = new pskl.rendering.PiskelRenderer(this.piskelController);
|
||
|
var png = renderer.renderAsCanvas().toDataURL();
|
||
|
|
||
|
var testRecord = JSON.stringify({
|
||
|
events : this.events,
|
||
|
initialState : this.initialState,
|
||
|
png : png
|
||
|
}, null, ' ');
|
||
|
|
||
|
this.reset();
|
||
|
|
||
|
return testRecord;
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.onMouseEvent_ = function (evt, mouseEvent, originator) {
|
||
|
if (this.isRecording) {
|
||
|
this.recordMouseEvent_(mouseEvent);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.onKeyboardEvent_ = function (evt, domEvent) {
|
||
|
if (this.isRecording) {
|
||
|
var recordEvent = {};
|
||
|
recordEvent.type = 'keyboard-event';
|
||
|
recordEvent.event = {
|
||
|
which : domEvent.which,
|
||
|
shiftKey : domEvent.shiftKey,
|
||
|
altKey : domEvent.altKey,
|
||
|
ctrlKey : domEvent.ctrlKey || domEvent.metaKey,
|
||
|
target : {
|
||
|
nodeName : domEvent.target.nodeName
|
||
|
}
|
||
|
};
|
||
|
this.events.push(recordEvent);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.onColorEvent_ = function (isPrimary, evt, color) {
|
||
|
if (this.isRecording) {
|
||
|
var recordEvent = {};
|
||
|
recordEvent.type = 'color-event';
|
||
|
recordEvent.color = color;
|
||
|
recordEvent.isPrimary = isPrimary;
|
||
|
this.events.push(recordEvent);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.onToolEvent_ = function (evt, tool) {
|
||
|
if (this.isRecording) {
|
||
|
var recordEvent = {};
|
||
|
recordEvent.type = 'tool-event';
|
||
|
recordEvent.toolId = tool.toolId;
|
||
|
this.events.push(recordEvent);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.onPenSizeChanged_ = function (evt) {
|
||
|
if (this.isRecording) {
|
||
|
var recordEvent = {};
|
||
|
recordEvent.type = 'pensize-event';
|
||
|
recordEvent.penSize = pskl.app.penSizeService.getPenSize();
|
||
|
this.events.push(recordEvent);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.onTransformationEvent_ = function (evt, toolId, domEvent) {
|
||
|
if (this.isRecording) {
|
||
|
var recordEvent = {};
|
||
|
recordEvent.type = 'transformtool-event';
|
||
|
recordEvent.toolId = toolId;
|
||
|
recordEvent.event = {
|
||
|
shiftKey : domEvent.shiftKey,
|
||
|
altKey : domEvent.altKey,
|
||
|
ctrlKey : domEvent.ctrlKey
|
||
|
};
|
||
|
this.events.push(recordEvent);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.onInstrumentedMethod_ = function (callee, methodName, args) {
|
||
|
if (this.isRecording) {
|
||
|
var recordEvent = {};
|
||
|
recordEvent.type = 'instrumented-event';
|
||
|
recordEvent.methodName = methodName;
|
||
|
recordEvent.args = Array.prototype.slice.call(args, 0);
|
||
|
this.events.push(recordEvent);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ns.DrawingTestRecorder.prototype.recordMouseEvent_ = function (mouseEvent) {
|
||
|
var coords = pskl.app.drawingController.getSpriteCoordinates(mouseEvent.clientX, mouseEvent.clientY);
|
||
|
var recordEvent = new ns.MouseEvent(mouseEvent, coords);
|
||
|
var lastEvent = this.events[this.events.length - 1];
|
||
|
|
||
|
if (!recordEvent.equals(lastEvent)) {
|
||
|
this.events.push(recordEvent);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
})();
|