wip : needs tests
This commit is contained in:
parent
d962217f90
commit
e0c9a46ed3
5 changed files with 48 additions and 47 deletions
|
@ -88,7 +88,7 @@
|
||||||
if (this.containsPixel(x, y)) {
|
if (this.containsPixel(x, y)) {
|
||||||
var p = this.pixels[x][y];
|
var p = this.pixels[x][y];
|
||||||
if (p !== color) {
|
if (p !== color) {
|
||||||
this.pixels[x][y] = color;
|
this.pixels[x][y] = color || Constants.TRANSPARENT_COLOR;
|
||||||
this.version++;
|
this.version++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,19 +18,9 @@
|
||||||
|
|
||||||
ns.CanvasRenderer.prototype.render = function () {
|
ns.CanvasRenderer.prototype.render = function () {
|
||||||
var canvas = this.createCanvas_();
|
var canvas = this.createCanvas_();
|
||||||
var context = canvas.getContext('2d');
|
|
||||||
|
|
||||||
for (var x = 0, width = this.frame.getWidth(); x < width; x++) {
|
// Draw in canvas
|
||||||
for (var y = 0, height = this.frame.getHeight(); y < height; y++) {
|
pskl.utils.FrameUtils.drawToCanvas(this.frame, canvas, this.transparentColor_);
|
||||||
var color = this.frame.getPixel(x, y);
|
|
||||||
var w = 1;
|
|
||||||
while (color === this.frame.getPixel(x, y + w)) {
|
|
||||||
w++;
|
|
||||||
}
|
|
||||||
this.renderLine_(color, x, y, w, context);
|
|
||||||
y = y + w - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var scaledCanvas = this.createCanvas_(this.zoom);
|
var scaledCanvas = this.createCanvas_(this.zoom);
|
||||||
var scaledContext = scaledCanvas.getContext('2d');
|
var scaledContext = scaledCanvas.getContext('2d');
|
||||||
|
@ -49,14 +39,6 @@
|
||||||
context.fillRect(x, y, 1, 1);
|
context.fillRect(x, y, 1, 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
ns.CanvasRenderer.prototype.renderLine_ = function (color, x, y, width, context) {
|
|
||||||
if (color == Constants.TRANSPARENT_COLOR) {
|
|
||||||
color = this.transparentColor_;
|
|
||||||
}
|
|
||||||
context.fillStyle = color;
|
|
||||||
context.fillRect(x, y, 1, width);
|
|
||||||
};
|
|
||||||
|
|
||||||
ns.CanvasRenderer.prototype.createCanvas_ = function (zoom) {
|
ns.CanvasRenderer.prototype.createCanvas_ = function (zoom) {
|
||||||
zoom = zoom || 1;
|
zoom = zoom || 1;
|
||||||
var width = this.frame.getWidth() * zoom;
|
var width = this.frame.getWidth() * zoom;
|
||||||
|
|
|
@ -219,18 +219,8 @@
|
||||||
this.canvas = pskl.utils.CanvasUtils.createCanvas(frame.getWidth(), frame.getHeight());
|
this.canvas = pskl.utils.CanvasUtils.createCanvas(frame.getWidth(), frame.getHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
var context = this.canvas.getContext('2d');
|
// Draw in canvas
|
||||||
for (var x = 0, width = frame.getWidth() ; x < width ; x++) {
|
pskl.utils.FrameUtils.drawToCanvas(frame, this.canvas);
|
||||||
for (var y = 0, height = frame.getHeight() ; y < height ; y++) {
|
|
||||||
var color = frame.getPixel(x, y);
|
|
||||||
var w = 1;
|
|
||||||
while (color === frame.getPixel(x, y + w)) {
|
|
||||||
w++;
|
|
||||||
}
|
|
||||||
this.renderLine_(color, x, y, w, context);
|
|
||||||
y = y + w - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.updateMargins_(frame);
|
this.updateMargins_(frame);
|
||||||
|
|
||||||
|
@ -264,18 +254,4 @@
|
||||||
}
|
}
|
||||||
displayContext.restore();
|
displayContext.restore();
|
||||||
};
|
};
|
||||||
|
|
||||||
ns.FrameRenderer.prototype.renderPixel_ = function (color, x, y, context) {
|
|
||||||
if (color != Constants.TRANSPARENT_COLOR) {
|
|
||||||
context.fillStyle = color;
|
|
||||||
context.fillRect(x, y, 1, 1);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ns.FrameRenderer.prototype.renderLine_ = function (color, x, y, width, context) {
|
|
||||||
if (color != Constants.TRANSPARENT_COLOR) {
|
|
||||||
context.fillStyle = color;
|
|
||||||
context.fillRect(x, y, 1, width);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -24,9 +24,15 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
ns.BaseSelection.prototype.fillSelectionFromFrame = function (targetFrame) {
|
ns.BaseSelection.prototype.fillSelectionFromFrame = function (targetFrame) {
|
||||||
|
// on copy trim the selection if out of bounds
|
||||||
|
// this.pixels = this.pixels.filter(function (pixel) {
|
||||||
|
// return targetFrame.containsPixel(pixel.col, pixel.row);
|
||||||
|
// });
|
||||||
|
|
||||||
this.pixels.forEach(function (pixel) {
|
this.pixels.forEach(function (pixel) {
|
||||||
pixel.color = targetFrame.getPixel(pixel.col, pixel.row);
|
pixel.color = targetFrame.getPixel(pixel.col, pixel.row);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.hasPastedContent = true;
|
this.hasPastedContent = true;
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -16,6 +16,43 @@
|
||||||
return canvasRenderer.render();
|
return canvasRenderer.render();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draw the provided frame in a 2d canvas
|
||||||
|
*
|
||||||
|
* @param {pskl.model.Frame} frame the frame to draw
|
||||||
|
* @param {Canvas} canvas the canvas target
|
||||||
|
* @param {String} transparentColor (optional) color to use to represent transparent pixels.
|
||||||
|
*/
|
||||||
|
drawToCanvas : function (frame, canvas, transparentColor) {
|
||||||
|
var context = canvas.getContext('2d');
|
||||||
|
|
||||||
|
transparentColor = transparentColor || Constants.TRANSPARENT_COLOR;
|
||||||
|
for (var x = 0, width = frame.getWidth() ; x < width ; x++) {
|
||||||
|
for (var y = 0, height = frame.getHeight() ; y < height ; y++) {
|
||||||
|
var color = frame.getPixel(x, y);
|
||||||
|
var w = 1;
|
||||||
|
while (color === frame.getPixel(x, y + w) && (y + w) < height) {
|
||||||
|
w++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (color == Constants.TRANSPARENT_COLOR) {
|
||||||
|
color = transparentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
pskl.utils.FrameUtils.renderLine_(color, x, y, w, context);
|
||||||
|
y = y + w - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
renderLine_ : function (color, x, y, width, context) {
|
||||||
|
if (color != Constants.TRANSPARENT_COLOR) {
|
||||||
|
context.fillStyle = color;
|
||||||
|
context.fillRect(x, y, 1, width);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
merge : function (frames) {
|
merge : function (frames) {
|
||||||
var merged = null;
|
var merged = null;
|
||||||
if (frames.length) {
|
if (frames.length) {
|
||||||
|
|
Loading…
Reference in a new issue