1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-22 16:18:08 +02:00

Use a transparent color when setting fill/stroke colors in a pattern context but with no colorspace

This commit is contained in:
Calixte Denizet 2024-07-20 14:45:25 +02:00
parent 98e772727e
commit 482994cc04
5 changed files with 62 additions and 16 deletions

View file

@ -2007,9 +2007,8 @@ class PartialEvaluator {
localColorSpaceCache,
})
.then(function (colorSpace) {
if (colorSpace) {
stateManager.state.fillColorSpace = colorSpace;
}
stateManager.state.fillColorSpace =
colorSpace || ColorSpace.singletons.gray;
})
);
return;
@ -2033,9 +2032,8 @@ class PartialEvaluator {
localColorSpaceCache,
})
.then(function (colorSpace) {
if (colorSpace) {
stateManager.state.strokeColorSpace = colorSpace;
}
stateManager.state.strokeColorSpace =
colorSpace || ColorSpace.singletons.gray;
})
);
return;
@ -2079,7 +2077,12 @@ class PartialEvaluator {
args = ColorSpace.singletons.rgb.getRgb(args, 0);
break;
case OPS.setFillColorN:
cs = stateManager.state.fillColorSpace;
cs = stateManager.state.patternFillColorSpace;
if (!cs) {
args = [];
fn = OPS.setFillTransparent;
break;
}
if (cs.name === "Pattern") {
next(
self.handleColorN(
@ -2101,7 +2104,12 @@ class PartialEvaluator {
fn = OPS.setFillRGBColor;
break;
case OPS.setStrokeColorN:
cs = stateManager.state.strokeColorSpace;
cs = stateManager.state.patternStrokeColorSpace;
if (!cs) {
args = [];
fn = OPS.setStrokeTransparent;
break;
}
if (cs.name === "Pattern") {
next(
self.handleColorN(
@ -4873,8 +4881,26 @@ class EvalState {
this.ctm = new Float32Array(IDENTITY_MATRIX);
this.font = null;
this.textRenderingMode = TextRenderingMode.FILL;
this.fillColorSpace = ColorSpace.singletons.gray;
this.strokeColorSpace = ColorSpace.singletons.gray;
this._fillColorSpace = ColorSpace.singletons.gray;
this._strokeColorSpace = ColorSpace.singletons.gray;
this.patternFillColorSpace = null;
this.patternStrokeColorSpace = null;
}
get fillColorSpace() {
return this._fillColorSpace;
}
set fillColorSpace(colorSpace) {
this._fillColorSpace = this.patternFillColorSpace = colorSpace;
}
get strokeColorSpace() {
return this._strokeColorSpace;
}
set strokeColorSpace(colorSpace) {
this._strokeColorSpace = this.patternStrokeColorSpace = colorSpace;
}
clone() {

View file

@ -2386,15 +2386,24 @@ class CanvasGraphics {
}
setStrokeRGBColor(r, g, b) {
const color = Util.makeHexColor(r, g, b);
this.ctx.strokeStyle = color;
this.current.strokeColor = color;
this.ctx.strokeStyle = this.current.strokeColor = Util.makeHexColor(
r,
g,
b
);
}
setStrokeTransparent() {
this.ctx.strokeStyle = this.current.strokeColor = "transparent";
}
setFillRGBColor(r, g, b) {
const color = Util.makeHexColor(r, g, b);
this.ctx.fillStyle = color;
this.current.fillColor = color;
this.ctx.fillStyle = this.current.fillColor = Util.makeHexColor(r, g, b);
this.current.patternFill = false;
}
setFillTransparent() {
this.ctx.fillStyle = this.current.fillColor = "transparent";
this.current.patternFill = false;
}

View file

@ -342,6 +342,8 @@ const OPS = {
paintImageMaskXObjectRepeat: 89,
paintSolidColorImageMask: 90,
constructPath: 91,
setStrokeTransparent: 92,
setFillTransparent: 93,
};
const PasswordResponses = {