Introduce paintSolidColorImageMask command to handle 1x1 solid image masks
See https://github.com/mozilla/pdf.js/issues/4436 for details
This commit is contained in:
parent
1a6e103c35
commit
fc9edfcf76
@ -1699,6 +1699,25 @@ var QueueOptimizer = (function QueueOptimizerClosure() {
|
||||
state[pattern[pattern.length - 1]] = fn;
|
||||
}
|
||||
|
||||
function handlePaintSolidColorImageMask(index, count, fnArray, argsArray) {
|
||||
// Handles special case of mainly latex documents which
|
||||
// use image masks to draw lines with the current fill style.
|
||||
// 'count' groups of (save, transform, paintImageMaskXObject, restore)+
|
||||
// have been found at index.
|
||||
for (var i = 0; i < count; i++) {
|
||||
var arg = argsArray[index + 4 * i + 2];
|
||||
var imageMask = arg.length == 1 && arg[0];
|
||||
if (imageMask && imageMask.width == 1 && imageMask.height == 1 &&
|
||||
(!imageMask.data.length || (imageMask.data.length == 1 &&
|
||||
imageMask.data[0] === 0))) {
|
||||
fnArray[index + 4 * i + 2] = OPS.paintSolidColorImageMask;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return count - i;
|
||||
}
|
||||
|
||||
var InitialState = [];
|
||||
|
||||
addState(InitialState,
|
||||
@ -1802,6 +1821,7 @@ var QueueOptimizer = (function QueueOptimizerClosure() {
|
||||
for (; i < ii && fnArray[i - 4] === fnArray[i]; i++) {
|
||||
}
|
||||
var count = (i - j) >> 2;
|
||||
count = handlePaintSolidColorImageMask(j, count, fnArray, argsArray);
|
||||
if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
|
||||
context.currentOperation = i - 1;
|
||||
return;
|
||||
|
@ -2128,6 +2128,11 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
|
||||
}
|
||||
},
|
||||
|
||||
paintSolidColorImageMask:
|
||||
function CanvasGraphics_paintSolidColorImageMask() {
|
||||
this.ctx.fillRect(0, 0, 1, 1);
|
||||
},
|
||||
|
||||
// Marked content
|
||||
|
||||
markPoint: function CanvasGraphics_markPoint(tag) {
|
||||
|
@ -151,7 +151,8 @@ var OPS = PDFJS.OPS = {
|
||||
paintInlineImageXObject: 86,
|
||||
paintInlineImageXObjectGroup: 87,
|
||||
paintImageXObjectRepeat: 88,
|
||||
paintImageMaskXObjectRepeat: 89
|
||||
paintImageMaskXObjectRepeat: 89,
|
||||
paintSolidColorImageMask: 90,
|
||||
};
|
||||
|
||||
// A notice for devs. These are good for things that are helpful to devs, such
|
||||
|
Loading…
x
Reference in New Issue
Block a user