From: Brendan Dahl Date: Wed, 18 Jan 2012 04:50:49 +0000 (-0800) Subject: Fix zero width lines. X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=8aac2256eda12b23c1d5fa237fc496f77ac5af1c;p=pdf.js.git Fix zero width lines. --- diff --git a/src/canvas.js b/src/canvas.js index 4feac4e..5ef9008 100644 --- a/src/canvas.js +++ b/src/canvas.js @@ -48,6 +48,7 @@ var CanvasExtraState = (function CanvasExtraStateClosure() { // Note: fill alpha applies to all non-stroking operations this.fillAlpha = 1; this.strokeAlpha = 1; + this.lineWidth = 1; this.old = old; } @@ -329,6 +330,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { // Graphics state setLineWidth: function canvasGraphicsSetLineWidth(width) { + this.current.lineWidth = width; this.ctx.lineWidth = width; }, setLineCap: function canvasGraphicsSetLineCap(style) { @@ -442,6 +444,8 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { consumePath = typeof consumePath !== 'undefined' ? consumePath : true; var ctx = this.ctx; var strokeColor = this.current.strokeColor; + if (this.current.lineWidth === 0) + ctx.lineWidth = this.getSinglePixelWidth(); // For stroke we want to temporarily change the global alpha to the // stroking alpha. ctx.globalAlpha = this.current.strokeAlpha; @@ -640,7 +644,6 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { ctx.translate(current.x, current.y); ctx.scale(textHScale, 1); - ctx.lineWidth /= current.textMatrix[0]; if (textSelection) { this.save(); @@ -677,7 +680,15 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { } else { ctx.save(); this.applyTextTransforms(); - ctx.lineWidth /= current.textMatrix[0] * fontMatrix[0]; + + var lineWidth = current.lineWidth; + var scale = Math.abs(current.textMatrix[0] * fontMatrix[0]); + if (scale == 0 || lineWidth == 0) + lineWidth = this.getSinglePixelWidth(); + else + lineWidth /= scale; + + ctx.lineWidth = lineWidth; if (textSelection) text.geom = this.getTextGeometry(); @@ -1142,6 +1153,10 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { }, restoreFillRule: function canvasGraphicsRestoreFillRule(rule) { this.ctx.mozFillRule = rule; + }, + getSinglePixelWidth: function getSinglePixelWidth(scale) { + var inverse = this.ctx.mozCurrentTransformInverse; + return Math.abs(inverse[0] + inverse[2]); } }; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 9569807..1aae828 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -22,3 +22,4 @@ !issue918.pdf !smaskdim.pdf !type4psfunc.pdf +!zerowidthline.pdf diff --git a/test/pdfs/zerowidthline.pdf b/test/pdfs/zerowidthline.pdf new file mode 100644 index 0000000..379f180 Binary files /dev/null and b/test/pdfs/zerowidthline.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 6d04597..ebbcad7 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -417,5 +417,12 @@ "rounds": 1, "link": true, "type": "eq" + }, + { "id": "zerowidthline", + "file": "pdfs/zerowidthline.pdf", + "md5": "295d26e61a85635433f8e4b768953f60", + "rounds": 1, + "link": false, + "type": "eq" } ]