mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-19 22:58:07 +02:00
Respect maxCanvasPixels
when computing canvas dimensions
Ensure that we never round the canvas dimensions above `maxCanvasPixels` by rounding them to the preceeding multiple of the display ratio rather than the succeeding one.
This commit is contained in:
parent
12692d2e39
commit
de23bb9b82
3 changed files with 20 additions and 15 deletions
|
@ -34,9 +34,9 @@ import {
|
|||
import {
|
||||
approximateFraction,
|
||||
DEFAULT_SCALE,
|
||||
floorToDivide,
|
||||
OutputScale,
|
||||
RenderingStates,
|
||||
roundToDivide,
|
||||
TextLayerMode,
|
||||
} from "./ui_utils.js";
|
||||
import { AnnotationEditorLayerBuilder } from "./annotation_editor_layer_builder.js";
|
||||
|
@ -1025,11 +1025,11 @@ class PDFPageView {
|
|||
const sfx = approximateFraction(outputScale.sx);
|
||||
const sfy = approximateFraction(outputScale.sy);
|
||||
|
||||
canvas.width = roundToDivide(width * outputScale.sx, sfx[0]);
|
||||
canvas.height = roundToDivide(height * outputScale.sy, sfy[0]);
|
||||
canvas.width = floorToDivide(width * outputScale.sx, sfx[0]);
|
||||
canvas.height = floorToDivide(height * outputScale.sy, sfy[0]);
|
||||
const { style } = canvas;
|
||||
style.width = roundToDivide(width, sfx[1]) + "px";
|
||||
style.height = roundToDivide(height, sfy[1]) + "px";
|
||||
style.width = floorToDivide(width, sfx[1]) + "px";
|
||||
style.height = floorToDivide(height, sfy[1]) + "px";
|
||||
|
||||
// Add the viewport so it's known what it was originally drawn with.
|
||||
this.#viewportMap.set(canvas, viewport);
|
||||
|
|
|
@ -260,6 +260,7 @@ function binarySearchFirstItem(items, condition, start = 0) {
|
|||
* @param {number} x - Positive float number.
|
||||
* @returns {Array} Estimated fraction: the first array item is a numerator,
|
||||
* the second one is a denominator.
|
||||
* They are both natural numbers.
|
||||
*/
|
||||
function approximateFraction(x) {
|
||||
// Fast paths for int numbers or their inversions.
|
||||
|
@ -306,9 +307,12 @@ function approximateFraction(x) {
|
|||
return result;
|
||||
}
|
||||
|
||||
function roundToDivide(x, div) {
|
||||
const r = x % div;
|
||||
return r === 0 ? x : Math.round(x - r + div);
|
||||
/**
|
||||
* @param {number} x - A positive number to round to a multiple of `div`.
|
||||
* @param {number} div - A natural number.
|
||||
*/
|
||||
function floorToDivide(x, div) {
|
||||
return x - (x % div);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -863,6 +867,7 @@ export {
|
|||
DEFAULT_SCALE_DELTA,
|
||||
DEFAULT_SCALE_VALUE,
|
||||
docStyle,
|
||||
floorToDivide,
|
||||
getActiveOrFocusedElement,
|
||||
getPageSizeInches,
|
||||
getVisibleElements,
|
||||
|
@ -881,7 +886,6 @@ export {
|
|||
ProgressBar,
|
||||
removeNullCharacters,
|
||||
RenderingStates,
|
||||
roundToDivide,
|
||||
SCROLLBAR_PADDING,
|
||||
scrollIntoView,
|
||||
ScrollMode,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue