Browse Source

Merge pull request #7184 from yurydelendik/pad-mesh

[Bug 1260585] Stops bleeding of pattern edges for mesh.
Jonas Jenwald 9 years ago
parent
commit
127e6d7343
  1. 20
      src/display/pattern_helper.js
  2. 1
      test/pdfs/bug1260585.pdf.link
  3. 8
      test/test_manifest.json

20
src/display/pattern_helper.js

@ -169,6 +169,9 @@ var createMeshCanvas = (function createMeshCanvasClosure() {
var EXPECTED_SCALE = 1.1; var EXPECTED_SCALE = 1.1;
// MAX_PATTERN_SIZE is used to avoid OOM situation. // MAX_PATTERN_SIZE is used to avoid OOM situation.
var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough
// We need to keep transparent border around our pattern for fill():
// createPattern with 'no-repeat' will bleed edges accross entire area.
var BORDER_SIZE = 2;
var offsetX = Math.floor(bounds[0]); var offsetX = Math.floor(bounds[0]);
var offsetY = Math.floor(bounds[1]); var offsetY = Math.floor(bounds[1]);
@ -191,17 +194,22 @@ var createMeshCanvas = (function createMeshCanvasClosure() {
scaleY: 1 / scaleY scaleY: 1 / scaleY
}; };
var paddedWidth = width + BORDER_SIZE * 2;
var paddedHeight = height + BORDER_SIZE * 2;
var canvas, tmpCanvas, i, ii; var canvas, tmpCanvas, i, ii;
if (WebGLUtils.isEnabled) { if (WebGLUtils.isEnabled) {
canvas = WebGLUtils.drawFigures(width, height, backgroundColor, canvas = WebGLUtils.drawFigures(width, height, backgroundColor,
figures, context); figures, context);
// https://bugzilla.mozilla.org/show_bug.cgi?id=972126 // https://bugzilla.mozilla.org/show_bug.cgi?id=972126
tmpCanvas = cachedCanvases.getCanvas('mesh', width, height, false); tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight,
tmpCanvas.context.drawImage(canvas, 0, 0); false);
tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE);
canvas = tmpCanvas.canvas; canvas = tmpCanvas.canvas;
} else { } else {
tmpCanvas = cachedCanvases.getCanvas('mesh', width, height, false); tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight,
false);
var tmpCtx = tmpCanvas.context; var tmpCtx = tmpCanvas.context;
var data = tmpCtx.createImageData(width, height); var data = tmpCtx.createImageData(width, height);
@ -217,11 +225,13 @@ var createMeshCanvas = (function createMeshCanvasClosure() {
for (i = 0; i < figures.length; i++) { for (i = 0; i < figures.length; i++) {
drawFigure(data, figures[i], context); drawFigure(data, figures[i], context);
} }
tmpCtx.putImageData(data, 0, 0); tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
canvas = tmpCanvas.canvas; canvas = tmpCanvas.canvas;
} }
return {canvas: canvas, offsetX: offsetX, offsetY: offsetY, return {canvas: canvas,
offsetX: offsetX - BORDER_SIZE * scaleX,
offsetY: offsetY - BORDER_SIZE * scaleY,
scaleX: scaleX, scaleY: scaleY}; scaleX: scaleX, scaleY: scaleY};
} }
return createMeshCanvas; return createMeshCanvas;

1
test/pdfs/bug1260585.pdf.link

@ -0,0 +1 @@
https://bugzilla.mozilla.org/attachment.cgi?id=8736063

8
test/test_manifest.json

@ -2204,6 +2204,14 @@
"link": true, "link": true,
"type": "load" "type": "load"
}, },
{ "id": "bug1260585",
"file": "pdfs/bug1260585.pdf",
"md5": "9415b1eb00a43c97c15328cd4c8d136a",
"rounds": 1,
"lastPage": 1,
"link": true,
"type": "load"
},
{ "id": "issue3062", { "id": "issue3062",
"file": "pdfs/issue3062.pdf", "file": "pdfs/issue3062.pdf",
"md5": "206715f1258f0e117df4180d98dd4d68", "md5": "206715f1258f0e117df4180d98dd4d68",

Loading…
Cancel
Save