Fixes mesh fill pattern with optional matrix (#5020)
In the referenced issue, there is a PDF which uses a fill pattern which does not have a matrix defined. This causes singularValueDecompose2dScale to fail with undefined property error when accessing elements of that matrix. This fix will only use the matrix when it is defined. The output for the PDF in question now looks identical to chrome and preview with respect to the gradient fill pattern.
This commit is contained in:
parent
0ac83802ba
commit
dd2adf6200
@ -226,24 +226,24 @@ ShadingIRs.Mesh = {
|
|||||||
return {
|
return {
|
||||||
type: 'Pattern',
|
type: 'Pattern',
|
||||||
getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {
|
getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {
|
||||||
var combinedScale;
|
var scale;
|
||||||
// Obtain scale from matrix and current transformation matrix.
|
|
||||||
if (shadingFill) {
|
if (shadingFill) {
|
||||||
combinedScale = Util.singularValueDecompose2dScale(
|
scale = Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
|
||||||
ctx.mozCurrentTransform);
|
|
||||||
} else {
|
} else {
|
||||||
var matrixScale = Util.singularValueDecompose2dScale(matrix);
|
// Obtain scale from matrix and current transformation matrix.
|
||||||
var curMatrixScale = Util.singularValueDecompose2dScale(
|
scale = Util.singularValueDecompose2dScale(owner.baseTransform);
|
||||||
owner.baseTransform);
|
if (matrix) {
|
||||||
combinedScale = [matrixScale[0] * curMatrixScale[0],
|
var matrixScale = Util.singularValueDecompose2dScale(matrix);
|
||||||
matrixScale[1] * curMatrixScale[1]];
|
scale = [scale[0] * matrixScale[0],
|
||||||
|
scale[1] * matrixScale[1]];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Rasterizing on the main thread since sending/queue large canvases
|
// Rasterizing on the main thread since sending/queue large canvases
|
||||||
// might cause OOM.
|
// might cause OOM.
|
||||||
var temporaryPatternCanvas = createMeshCanvas(bounds, combinedScale,
|
var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords,
|
||||||
coords, colors, figures, shadingFill ? null : background);
|
colors, figures, shadingFill ? null : background);
|
||||||
|
|
||||||
if (!shadingFill) {
|
if (!shadingFill) {
|
||||||
ctx.setTransform.apply(ctx, owner.baseTransform);
|
ctx.setTransform.apply(ctx, owner.baseTransform);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user