Skip to content

Commit ff2d95a

Browse files
authored
Merge pull request #19752 from calixteman/simplify_updateRectMinMax
Simplify updateRectMinMax in order to use slightly less memory
2 parents a45f961 + 41bed56 commit ff2d95a

3 files changed

Lines changed: 34 additions & 16 deletions

File tree

src/core/evaluator.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,9 @@ class PartialEvaluator {
516516
// If it's a group, a new canvas will be created that is the size of the
517517
// bounding box and translated to the correct position so we don't need to
518518
// apply the bounding box to it.
519-
const args = group ? [matrix, null] : [matrix, bbox];
519+
const f32matrix = matrix && new Float32Array(matrix);
520+
const f32bbox = (!group && bbox && new Float32Array(bbox)) || null;
521+
const args = [f32matrix, f32bbox];
520522
operatorList.addOp(OPS.paintFormXObjectBegin, args);
521523

522524
await this.getOperatorList({

src/core/operator_list.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,6 +780,15 @@ class OperatorList {
780780
transfers.push(data.buffer, minMax.buffer);
781781
}
782782
break;
783+
case OPS.paintFormXObjectBegin:
784+
const [matrix, bbox] = argsArray[i];
785+
if (matrix) {
786+
transfers.push(matrix.buffer);
787+
}
788+
if (bbox) {
789+
transfers.push(bbox.buffer);
790+
}
791+
break;
783792
}
784793
}
785794
return transfers;

src/display/canvas.js

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -339,20 +339,27 @@ class CanvasExtraState {
339339
return clone;
340340
}
341341

342-
updateRectMinMax(transform, rect) {
343-
const p1 = [rect[0], rect[1]];
344-
Util.applyTransform(p1, transform);
345-
const p2 = [rect[2], rect[3]];
346-
Util.applyTransform(p2, transform);
347-
const p3 = [rect[0], rect[3]];
348-
Util.applyTransform(p3, transform);
349-
const p4 = [rect[2], rect[1]];
350-
Util.applyTransform(p4, transform);
351-
352-
this.minX = Math.min(this.minX, p1[0], p2[0], p3[0], p4[0]);
353-
this.minY = Math.min(this.minY, p1[1], p2[1], p3[1], p4[1]);
354-
this.maxX = Math.max(this.maxX, p1[0], p2[0], p3[0], p4[0]);
355-
this.maxY = Math.max(this.maxY, p1[1], p2[1], p3[1], p4[1]);
342+
updateRectMinMax([m0, m1, m2, m3, m4, m5], [r0, r1, r2, r3]) {
343+
const m0r0m4 = m0 * r0 + m4;
344+
const m0r2m4 = m0 * r2 + m4;
345+
const m1r0m5 = m1 * r0 + m5;
346+
const m1r2m5 = m1 * r2 + m5;
347+
const m2r1 = m2 * r1;
348+
const m2r3 = m2 * r3;
349+
const m3r1 = m3 * r1;
350+
const m3r3 = m3 * r3;
351+
const a0 = m0r0m4 + m2r1;
352+
const a1 = m0r2m4 + m2r3;
353+
const a2 = m0r0m4 + m2r3;
354+
const a3 = m0r2m4 + m2r1;
355+
const b0 = m1r0m5 + m3r1;
356+
const b1 = m1r2m5 + m3r3;
357+
const b2 = m1r0m5 + m3r3;
358+
const b3 = m1r2m5 + m3r1;
359+
this.minX = Math.min(this.minX, a0, a1, a2, a3);
360+
this.maxX = Math.max(this.maxX, a0, a1, a2, a3);
361+
this.minY = Math.min(this.minY, b0, b1, b2, b3);
362+
this.maxY = Math.max(this.maxY, b0, b1, b2, b3);
356363
}
357364

358365
getPathBoundingBox(pathType = PathType.FILL, transform = null) {
@@ -2275,7 +2282,7 @@ class CanvasGraphics {
22752282
this.baseTransform = getCurrentTransform(this.ctx);
22762283

22772284
if (bbox) {
2278-
this.current.updateRectMinMax(getCurrentTransform(this.ctx), bbox);
2285+
this.current.updateRectMinMax(this.baseTransform, bbox);
22792286
const [x0, y0, x1, y1] = bbox;
22802287
const clip = new Path2D();
22812288
clip.rect(x0, y0, x1 - x0, y1 - y0);

0 commit comments

Comments
 (0)