1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-19 22:58:07 +02:00

Merge pull request #19708 from calixteman/fix_save_smask_mode

Fix save/restore while in smask mode
This commit is contained in:
calixteman 2025-03-23 14:45:09 +01:00 committed by GitHub
commit 7c5695f5c6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1545,39 +1545,35 @@ class CanvasGraphics {
// Copy the temporary canvas state to the main(suspended) canvas to keep
// it in sync.
copyCtxState(this.ctx, this.suspendedCtx);
// Don't bother calling save on the temporary canvas since state is not
// saved there.
this.suspendedCtx.save();
} else {
this.ctx.save();
}
this.ctx.save();
const old = this.current;
this.stateStack.push(old);
this.current = old.clone();
}
restore() {
if (this.stateStack.length === 0 && this.inSMaskMode) {
this.endSMaskMode();
}
if (this.stateStack.length !== 0) {
this.current = this.stateStack.pop();
if (this.stateStack.length === 0) {
if (this.inSMaskMode) {
// Graphics state is stored on the main(suspended) canvas. Restore its
// state then copy it over to the temporary canvas.
this.suspendedCtx.restore();
copyCtxState(this.suspendedCtx, this.ctx);
} else {
this.ctx.restore();
this.endSMaskMode();
}
this.checkSMaskState();
// Ensure that the clipping path is reset (fixes issue6413.pdf).
this.pendingClip = null;
this._cachedScaleForStroking[0] = -1;
this._cachedGetSinglePixelWidth = null;
return;
}
this.current = this.stateStack.pop();
this.ctx.restore();
if (this.inSMaskMode) {
// Graphics state is stored on the main(suspended) canvas. Restore its
// state then copy it over to the temporary canvas.
copyCtxState(this.suspendedCtx, this.ctx);
}
this.checkSMaskState();
// Ensure that the clipping path is reset (fixes issue6413.pdf).
this.pendingClip = null;
this._cachedScaleForStroking[0] = -1;
this._cachedGetSinglePixelWidth = null;
}
transform(a, b, c, d, e, f) {