Make raster's getSubRaster function allow rectangles that exceed the bounds of the canvas. This fixes Safari, which returns a blank canvas in that case.

This commit is contained in:
DD Liu 2018-07-26 15:08:48 -04:00
parent 51a1b93df6
commit e0b6759add

View file

@ -443,8 +443,16 @@ var Raster = Item.extend(/** @lends Raster# */{
getSubCanvas: function(/* rect */) {
var rect = Rectangle.read(arguments),
ctx = CanvasProvider.getContext(rect.getSize());
ctx.drawImage(this.getCanvas(), rect.x, rect.y,
rect.width, rect.height, 0, 0, rect.width, rect.height);
const clippedStartX = Math.max(0, rect.x);
const clippedStartY = Math.max(0, rect.y);
const clippedEndX = Math.min(this.getCanvas().width, rect.x + rect.width);
const clippedEndY = Math.min(this.getCanvas().height, rect.y + rect.height);
ctx.drawImage(this.getCanvas(),
clippedStartX, clippedStartY,
clippedEndX - clippedStartX, clippedEndY - clippedStartY,
clippedStartX - rect.x, clippedStartY - rect.y,
clippedEndX - clippedStartX, clippedEndY - clippedStartY
);
return ctx.canvas;
},