Merge pull request #8542 from Rob--W/svg-clipping
Move svg:clipPath generation from clip to endPath
This commit is contained in:
commit
c6ee05f7e5
@ -361,6 +361,7 @@ SVGGraphics = (function SVGGraphicsClosure() {
|
|||||||
this.extraStack = [];
|
this.extraStack = [];
|
||||||
this.commonObjs = commonObjs;
|
this.commonObjs = commonObjs;
|
||||||
this.objs = objs;
|
this.objs = objs;
|
||||||
|
this.pendingClip = null;
|
||||||
this.pendingEOFill = false;
|
this.pendingEOFill = false;
|
||||||
|
|
||||||
this.embedFonts = false;
|
this.embedFonts = false;
|
||||||
@ -389,6 +390,7 @@ SVGGraphics = (function SVGGraphicsClosure() {
|
|||||||
this.transformMatrix = this.transformStack.pop();
|
this.transformMatrix = this.transformStack.pop();
|
||||||
this.current = this.extraStack.pop();
|
this.current = this.extraStack.pop();
|
||||||
|
|
||||||
|
this.pendingClip = null;
|
||||||
this.tgrp = null;
|
this.tgrp = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -894,9 +896,10 @@ SVGGraphics = (function SVGGraphicsClosure() {
|
|||||||
current.setCurrentPoint(x, y);
|
current.setCurrentPoint(x, y);
|
||||||
},
|
},
|
||||||
|
|
||||||
endPath: function SVGGraphics_endPath() {},
|
endPath: function SVGGraphics_endPath() {
|
||||||
|
if (!this.pendingClip) {
|
||||||
clip: function SVGGraphics_clip(type) {
|
return;
|
||||||
|
}
|
||||||
var current = this.current;
|
var current = this.current;
|
||||||
// Add current path to clipping path
|
// Add current path to clipping path
|
||||||
var clipId = 'clippath' + clipCount;
|
var clipId = 'clippath' + clipCount;
|
||||||
@ -905,17 +908,18 @@ SVGGraphics = (function SVGGraphicsClosure() {
|
|||||||
clipPath.setAttributeNS(null, 'id', clipId);
|
clipPath.setAttributeNS(null, 'id', clipId);
|
||||||
clipPath.setAttributeNS(null, 'transform', pm(this.transformMatrix));
|
clipPath.setAttributeNS(null, 'transform', pm(this.transformMatrix));
|
||||||
var clipElement = current.element.cloneNode();
|
var clipElement = current.element.cloneNode();
|
||||||
if (type === 'evenodd') {
|
if (this.pendingClip === 'evenodd') {
|
||||||
clipElement.setAttributeNS(null, 'clip-rule', 'evenodd');
|
clipElement.setAttributeNS(null, 'clip-rule', 'evenodd');
|
||||||
} else {
|
} else {
|
||||||
clipElement.setAttributeNS(null, 'clip-rule', 'nonzero');
|
clipElement.setAttributeNS(null, 'clip-rule', 'nonzero');
|
||||||
}
|
}
|
||||||
|
this.pendingClip = null;
|
||||||
clipPath.appendChild(clipElement);
|
clipPath.appendChild(clipElement);
|
||||||
this.defs.appendChild(clipPath);
|
this.defs.appendChild(clipPath);
|
||||||
|
|
||||||
if (current.activeClipUrl) {
|
if (current.activeClipUrl) {
|
||||||
// The previous clipping group content can go out of order -- resetting
|
// The previous clipping group content can go out of order -- resetting
|
||||||
// cached clipGroup's.
|
// cached clipGroups.
|
||||||
current.clipGroup = null;
|
current.clipGroup = null;
|
||||||
this.extraStack.forEach(function (prev) {
|
this.extraStack.forEach(function (prev) {
|
||||||
prev.clipGroup = null;
|
prev.clipGroup = null;
|
||||||
@ -926,6 +930,10 @@ SVGGraphics = (function SVGGraphicsClosure() {
|
|||||||
this.tgrp = null;
|
this.tgrp = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
clip: function SVGGraphics_clip(type) {
|
||||||
|
this.pendingClip = type;
|
||||||
|
},
|
||||||
|
|
||||||
closePath: function SVGGraphics_closePath() {
|
closePath: function SVGGraphics_closePath() {
|
||||||
var current = this.current;
|
var current = this.current;
|
||||||
var d = current.path.getAttributeNS(null, 'd');
|
var d = current.path.getAttributeNS(null, 'd');
|
||||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -90,6 +90,7 @@
|
|||||||
!issue3879r.pdf
|
!issue3879r.pdf
|
||||||
!issue5686.pdf
|
!issue5686.pdf
|
||||||
!issue3928.pdf
|
!issue3928.pdf
|
||||||
|
!clippath.pdf
|
||||||
!close-path-bug.pdf
|
!close-path-bug.pdf
|
||||||
!issue6019.pdf
|
!issue6019.pdf
|
||||||
!issue6621.pdf
|
!issue6621.pdf
|
||||||
|
37
test/pdfs/clippath.pdf
Normal file
37
test/pdfs/clippath.pdf
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
%PDF-1.1
|
||||||
|
1 0 obj
|
||||||
|
<</Type/Catalog/Pages 2 0 R>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<</Type/Pages/Count 1/Kids[3 0 R]/MediaBox [0 0 200 100]>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<</Type/Page/Parent 2 0 R/Contents 4 0 R>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<</Length 65>>
|
||||||
|
stream
|
||||||
|
W
|
||||||
|
40 20 m
|
||||||
|
160 20 l
|
||||||
|
160 80 l
|
||||||
|
40 80 l
|
||||||
|
h
|
||||||
|
n
|
||||||
|
0 0 0 sc
|
||||||
|
0 0 200 100 re
|
||||||
|
f
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 5
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000009 00000 n
|
||||||
|
0000000054 00000 n
|
||||||
|
0000000128 00000 n
|
||||||
|
0000000186 00000 n
|
||||||
|
trailer
|
||||||
|
<</Root 1 0 R/Size 5>>
|
||||||
|
startxref
|
||||||
|
299
|
||||||
|
%%EOF
|
@ -2776,6 +2776,14 @@
|
|||||||
"type": "eq",
|
"type": "eq",
|
||||||
"about": "CFF font that is drawn with clipping."
|
"about": "CFF font that is drawn with clipping."
|
||||||
},
|
},
|
||||||
|
{ "id": "clippath",
|
||||||
|
"file": "pdfs/clippath.pdf",
|
||||||
|
"md5": "7ab95c0f106dccd90d6569f241fe8771",
|
||||||
|
"rounds": 1,
|
||||||
|
"link": false,
|
||||||
|
"type": "eq",
|
||||||
|
"about": "Clipping before a path exists, followed by adding a path and then drawing a rectangle."
|
||||||
|
},
|
||||||
{ "id": "annotation-tx",
|
{ "id": "annotation-tx",
|
||||||
"file": "pdfs/annotation-tx.pdf",
|
"file": "pdfs/annotation-tx.pdf",
|
||||||
"md5": "56321ea830be9c4f8437ca17ac535b2d",
|
"md5": "56321ea830be9c4f8437ca17ac535b2d",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user