Caching inlined mask images
This commit is contained in:
parent
f48f57e30a
commit
257898b359
4 changed files with 173 additions and 36 deletions
|
@ -1924,6 +1924,39 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
|
|||
this.paintInlineImageXObject(maskCanvas.canvas);
|
||||
},
|
||||
|
||||
paintImageMaskXObjectRepeat:
|
||||
function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX,
|
||||
scaleY, positions) {
|
||||
var width = imgData.width;
|
||||
var height = imgData.height;
|
||||
var ctx = this.ctx;
|
||||
|
||||
var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height);
|
||||
var maskCtx = maskCanvas.context;
|
||||
maskCtx.save();
|
||||
|
||||
putBinaryImageMask(maskCtx, imgData);
|
||||
|
||||
maskCtx.globalCompositeOperation = 'source-in';
|
||||
|
||||
var fillColor = this.current.fillColor;
|
||||
maskCtx.fillStyle = (fillColor && fillColor.hasOwnProperty('type') &&
|
||||
fillColor.type === 'Pattern') ?
|
||||
fillColor.getPattern(maskCtx, this) : fillColor;
|
||||
maskCtx.fillRect(0, 0, width, height);
|
||||
|
||||
maskCtx.restore();
|
||||
|
||||
for (var i = 0, ii = positions.length; i < ii; i += 2) {
|
||||
ctx.save();
|
||||
ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]);
|
||||
ctx.scale(1, -1);
|
||||
ctx.drawImage(maskCanvas.canvas, 0, 0, width, height,
|
||||
0, -1, 1, 1);
|
||||
ctx.restore();
|
||||
}
|
||||
},
|
||||
|
||||
paintImageMaskXObjectGroup:
|
||||
function CanvasGraphics_paintImageMaskXObjectGroup(images) {
|
||||
var ctx = this.ctx;
|
||||
|
@ -1966,22 +1999,22 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
|
|||
this.paintInlineImageXObject(imgData);
|
||||
},
|
||||
|
||||
paintImageMaskXObjectRepeat:
|
||||
function CanvasGraphics_paintImageMaskXObjectRepeat(objId, scaleX, scaleY,
|
||||
paintImageXObjectRepeat:
|
||||
function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY,
|
||||
positions) {
|
||||
var imgData = this.objs.get(objId);
|
||||
if (!imgData) {
|
||||
error('Dependent image isn\'t ready yet');
|
||||
}
|
||||
var imgData = this.objs.get(objId);
|
||||
if (!imgData) {
|
||||
error('Dependent image isn\'t ready yet');
|
||||
}
|
||||
|
||||
var width = imgData.width;
|
||||
var height = imgData.height;
|
||||
var map = [];
|
||||
for (var i = 0, ii = positions.length; i < ii; i += 2) {
|
||||
map.push({transform: [scaleX, 0, 0, scaleY, positions[i],
|
||||
positions[i + 1]], x: 0, y: 0, w: width, h: height});
|
||||
}
|
||||
this.paintInlineImageXObjectGroup(imgData, map);
|
||||
var width = imgData.width;
|
||||
var height = imgData.height;
|
||||
var map = [];
|
||||
for (var i = 0, ii = positions.length; i < ii; i += 2) {
|
||||
map.push({transform: [scaleX, 0, 0, scaleY, positions[i],
|
||||
positions[i + 1]], x: 0, y: 0, w: width, h: height});
|
||||
}
|
||||
this.paintInlineImageXObjectGroup(imgData, map);
|
||||
},
|
||||
|
||||
paintInlineImageXObject:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue