Move PageViewport
from src/shared/util.js
to src/display/dom_utils.js
Since the `PageViewport` is not used in the worker, duplicating this code on both the main and worker sides seems completely unnecessary.
This commit is contained in:
parent
f486051d77
commit
08c8f8733d
@ -17,12 +17,12 @@
|
|||||||
import {
|
import {
|
||||||
assert, createPromiseCapability, getVerbosityLevel, info, InvalidPDFException,
|
assert, createPromiseCapability, getVerbosityLevel, info, InvalidPDFException,
|
||||||
isArrayBuffer, isNum, isSameOrigin, MessageHandler, MissingPDFException,
|
isArrayBuffer, isNum, isSameOrigin, MessageHandler, MissingPDFException,
|
||||||
NativeImageDecoding, PageViewport, PasswordException, setVerbosityLevel,
|
NativeImageDecoding, PasswordException, setVerbosityLevel, shadow,
|
||||||
shadow, stringToBytes, UnexpectedResponseException, UnknownErrorException,
|
stringToBytes, UnexpectedResponseException, UnknownErrorException,
|
||||||
unreachable, Util, warn
|
unreachable, Util, warn
|
||||||
} from '../shared/util';
|
} from '../shared/util';
|
||||||
import {
|
import {
|
||||||
DOMCanvasFactory, DOMCMapReaderFactory, DummyStatTimer,
|
DOMCanvasFactory, DOMCMapReaderFactory, DummyStatTimer, PageViewport,
|
||||||
RenderingCancelledException, StatTimer
|
RenderingCancelledException, StatTimer
|
||||||
} from './dom_utils';
|
} from './dom_utils';
|
||||||
import { FontFaceObject, FontLoader } from './font_loader';
|
import { FontFaceObject, FontLoader } from './font_loader';
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
assert, CMapCompressionType, removeNullCharacters, stringToBytes,
|
assert, CMapCompressionType, removeNullCharacters, stringToBytes,
|
||||||
unreachable, warn
|
unreachable, Util, warn
|
||||||
} from '../shared/util';
|
} from '../shared/util';
|
||||||
|
|
||||||
const DEFAULT_LINK_REL = 'noopener noreferrer nofollow';
|
const DEFAULT_LINK_REL = 'noopener noreferrer nofollow';
|
||||||
@ -135,6 +135,142 @@ class DOMSVGFactory {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PDF page viewport created based on scale, rotation and offset.
|
||||||
|
* @class
|
||||||
|
* @alias PageViewport
|
||||||
|
*/
|
||||||
|
var PageViewport = (function PageViewportClosure() {
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
* @private
|
||||||
|
* @param viewBox {Array} xMin, yMin, xMax and yMax coordinates.
|
||||||
|
* @param scale {number} scale of the viewport.
|
||||||
|
* @param rotation {number} rotations of the viewport in degrees.
|
||||||
|
* @param offsetX {number} offset X
|
||||||
|
* @param offsetY {number} offset Y
|
||||||
|
* @param dontFlip {boolean} if true, axis Y will not be flipped.
|
||||||
|
*/
|
||||||
|
function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) {
|
||||||
|
this.viewBox = viewBox;
|
||||||
|
this.scale = scale;
|
||||||
|
this.rotation = rotation;
|
||||||
|
this.offsetX = offsetX;
|
||||||
|
this.offsetY = offsetY;
|
||||||
|
|
||||||
|
// creating transform to convert pdf coordinate system to the normal
|
||||||
|
// canvas like coordinates taking in account scale and rotation
|
||||||
|
var centerX = (viewBox[2] + viewBox[0]) / 2;
|
||||||
|
var centerY = (viewBox[3] + viewBox[1]) / 2;
|
||||||
|
var rotateA, rotateB, rotateC, rotateD;
|
||||||
|
rotation = rotation % 360;
|
||||||
|
rotation = rotation < 0 ? rotation + 360 : rotation;
|
||||||
|
switch (rotation) {
|
||||||
|
case 180:
|
||||||
|
rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;
|
||||||
|
break;
|
||||||
|
case 90:
|
||||||
|
rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;
|
||||||
|
break;
|
||||||
|
case 270:
|
||||||
|
rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;
|
||||||
|
break;
|
||||||
|
// case 0:
|
||||||
|
default:
|
||||||
|
rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dontFlip) {
|
||||||
|
rotateC = -rotateC; rotateD = -rotateD;
|
||||||
|
}
|
||||||
|
|
||||||
|
var offsetCanvasX, offsetCanvasY;
|
||||||
|
var width, height;
|
||||||
|
if (rotateA === 0) {
|
||||||
|
offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
|
||||||
|
offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
|
||||||
|
width = Math.abs(viewBox[3] - viewBox[1]) * scale;
|
||||||
|
height = Math.abs(viewBox[2] - viewBox[0]) * scale;
|
||||||
|
} else {
|
||||||
|
offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
|
||||||
|
offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
|
||||||
|
width = Math.abs(viewBox[2] - viewBox[0]) * scale;
|
||||||
|
height = Math.abs(viewBox[3] - viewBox[1]) * scale;
|
||||||
|
}
|
||||||
|
// creating transform for the following operations:
|
||||||
|
// translate(-centerX, -centerY), rotate and flip vertically,
|
||||||
|
// scale, and translate(offsetCanvasX, offsetCanvasY)
|
||||||
|
this.transform = [
|
||||||
|
rotateA * scale,
|
||||||
|
rotateB * scale,
|
||||||
|
rotateC * scale,
|
||||||
|
rotateD * scale,
|
||||||
|
offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,
|
||||||
|
offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY
|
||||||
|
];
|
||||||
|
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
this.fontScale = scale;
|
||||||
|
}
|
||||||
|
PageViewport.prototype = /** @lends PageViewport.prototype */ {
|
||||||
|
/**
|
||||||
|
* Clones viewport with additional properties.
|
||||||
|
* @param args {Object} (optional) If specified, may contain the 'scale' or
|
||||||
|
* 'rotation' properties to override the corresponding properties in
|
||||||
|
* the cloned viewport.
|
||||||
|
* @returns {PageViewport} Cloned viewport.
|
||||||
|
*/
|
||||||
|
clone: function PageViewPort_clone(args) {
|
||||||
|
args = args || {};
|
||||||
|
var scale = 'scale' in args ? args.scale : this.scale;
|
||||||
|
var rotation = 'rotation' in args ? args.rotation : this.rotation;
|
||||||
|
return new PageViewport(this.viewBox.slice(), scale, rotation,
|
||||||
|
this.offsetX, this.offsetY, args.dontFlip);
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Converts PDF point to the viewport coordinates. For examples, useful for
|
||||||
|
* converting PDF location into canvas pixel coordinates.
|
||||||
|
* @param x {number} X coordinate.
|
||||||
|
* @param y {number} Y coordinate.
|
||||||
|
* @returns {Object} Object that contains 'x' and 'y' properties of the
|
||||||
|
* point in the viewport coordinate space.
|
||||||
|
* @see {@link convertToPdfPoint}
|
||||||
|
* @see {@link convertToViewportRectangle}
|
||||||
|
*/
|
||||||
|
convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {
|
||||||
|
return Util.applyTransform([x, y], this.transform);
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Converts PDF rectangle to the viewport coordinates.
|
||||||
|
* @param rect {Array} xMin, yMin, xMax and yMax coordinates.
|
||||||
|
* @returns {Array} Contains corresponding coordinates of the rectangle
|
||||||
|
* in the viewport coordinate space.
|
||||||
|
* @see {@link convertToViewportPoint}
|
||||||
|
*/
|
||||||
|
convertToViewportRectangle:
|
||||||
|
function PageViewport_convertToViewportRectangle(rect) {
|
||||||
|
var tl = Util.applyTransform([rect[0], rect[1]], this.transform);
|
||||||
|
var br = Util.applyTransform([rect[2], rect[3]], this.transform);
|
||||||
|
return [tl[0], tl[1], br[0], br[1]];
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Converts viewport coordinates to the PDF location. For examples, useful
|
||||||
|
* for converting canvas pixel location into PDF one.
|
||||||
|
* @param x {number} X coordinate.
|
||||||
|
* @param y {number} Y coordinate.
|
||||||
|
* @returns {Object} Object that contains 'x' and 'y' properties of the
|
||||||
|
* point in the PDF coordinate space.
|
||||||
|
* @see {@link convertToViewportPoint}
|
||||||
|
*/
|
||||||
|
convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {
|
||||||
|
return Util.applyInverseTransform([x, y], this.transform);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
return PageViewport;
|
||||||
|
})();
|
||||||
|
|
||||||
var RenderingCancelledException = (function RenderingCancelledException() {
|
var RenderingCancelledException = (function RenderingCancelledException() {
|
||||||
function RenderingCancelledException(msg, type) {
|
function RenderingCancelledException(msg, type) {
|
||||||
this.message = msg;
|
this.message = msg;
|
||||||
@ -277,6 +413,7 @@ class DummyStatTimer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
PageViewport,
|
||||||
RenderingCancelledException,
|
RenderingCancelledException,
|
||||||
addLinkAttributes,
|
addLinkAttributes,
|
||||||
getFilenameFromUrl,
|
getFilenameFromUrl,
|
||||||
|
@ -926,142 +926,6 @@ var Util = (function UtilClosure() {
|
|||||||
return Util;
|
return Util;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
/**
|
|
||||||
* PDF page viewport created based on scale, rotation and offset.
|
|
||||||
* @class
|
|
||||||
* @alias PageViewport
|
|
||||||
*/
|
|
||||||
var PageViewport = (function PageViewportClosure() {
|
|
||||||
/**
|
|
||||||
* @constructor
|
|
||||||
* @private
|
|
||||||
* @param viewBox {Array} xMin, yMin, xMax and yMax coordinates.
|
|
||||||
* @param scale {number} scale of the viewport.
|
|
||||||
* @param rotation {number} rotations of the viewport in degrees.
|
|
||||||
* @param offsetX {number} offset X
|
|
||||||
* @param offsetY {number} offset Y
|
|
||||||
* @param dontFlip {boolean} if true, axis Y will not be flipped.
|
|
||||||
*/
|
|
||||||
function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) {
|
|
||||||
this.viewBox = viewBox;
|
|
||||||
this.scale = scale;
|
|
||||||
this.rotation = rotation;
|
|
||||||
this.offsetX = offsetX;
|
|
||||||
this.offsetY = offsetY;
|
|
||||||
|
|
||||||
// creating transform to convert pdf coordinate system to the normal
|
|
||||||
// canvas like coordinates taking in account scale and rotation
|
|
||||||
var centerX = (viewBox[2] + viewBox[0]) / 2;
|
|
||||||
var centerY = (viewBox[3] + viewBox[1]) / 2;
|
|
||||||
var rotateA, rotateB, rotateC, rotateD;
|
|
||||||
rotation = rotation % 360;
|
|
||||||
rotation = rotation < 0 ? rotation + 360 : rotation;
|
|
||||||
switch (rotation) {
|
|
||||||
case 180:
|
|
||||||
rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;
|
|
||||||
break;
|
|
||||||
case 90:
|
|
||||||
rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;
|
|
||||||
break;
|
|
||||||
case 270:
|
|
||||||
rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;
|
|
||||||
break;
|
|
||||||
// case 0:
|
|
||||||
default:
|
|
||||||
rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dontFlip) {
|
|
||||||
rotateC = -rotateC; rotateD = -rotateD;
|
|
||||||
}
|
|
||||||
|
|
||||||
var offsetCanvasX, offsetCanvasY;
|
|
||||||
var width, height;
|
|
||||||
if (rotateA === 0) {
|
|
||||||
offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
|
|
||||||
offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
|
|
||||||
width = Math.abs(viewBox[3] - viewBox[1]) * scale;
|
|
||||||
height = Math.abs(viewBox[2] - viewBox[0]) * scale;
|
|
||||||
} else {
|
|
||||||
offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
|
|
||||||
offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
|
|
||||||
width = Math.abs(viewBox[2] - viewBox[0]) * scale;
|
|
||||||
height = Math.abs(viewBox[3] - viewBox[1]) * scale;
|
|
||||||
}
|
|
||||||
// creating transform for the following operations:
|
|
||||||
// translate(-centerX, -centerY), rotate and flip vertically,
|
|
||||||
// scale, and translate(offsetCanvasX, offsetCanvasY)
|
|
||||||
this.transform = [
|
|
||||||
rotateA * scale,
|
|
||||||
rotateB * scale,
|
|
||||||
rotateC * scale,
|
|
||||||
rotateD * scale,
|
|
||||||
offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,
|
|
||||||
offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY
|
|
||||||
];
|
|
||||||
|
|
||||||
this.width = width;
|
|
||||||
this.height = height;
|
|
||||||
this.fontScale = scale;
|
|
||||||
}
|
|
||||||
PageViewport.prototype = /** @lends PageViewport.prototype */ {
|
|
||||||
/**
|
|
||||||
* Clones viewport with additional properties.
|
|
||||||
* @param args {Object} (optional) If specified, may contain the 'scale' or
|
|
||||||
* 'rotation' properties to override the corresponding properties in
|
|
||||||
* the cloned viewport.
|
|
||||||
* @returns {PageViewport} Cloned viewport.
|
|
||||||
*/
|
|
||||||
clone: function PageViewPort_clone(args) {
|
|
||||||
args = args || {};
|
|
||||||
var scale = 'scale' in args ? args.scale : this.scale;
|
|
||||||
var rotation = 'rotation' in args ? args.rotation : this.rotation;
|
|
||||||
return new PageViewport(this.viewBox.slice(), scale, rotation,
|
|
||||||
this.offsetX, this.offsetY, args.dontFlip);
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* Converts PDF point to the viewport coordinates. For examples, useful for
|
|
||||||
* converting PDF location into canvas pixel coordinates.
|
|
||||||
* @param x {number} X coordinate.
|
|
||||||
* @param y {number} Y coordinate.
|
|
||||||
* @returns {Object} Object that contains 'x' and 'y' properties of the
|
|
||||||
* point in the viewport coordinate space.
|
|
||||||
* @see {@link convertToPdfPoint}
|
|
||||||
* @see {@link convertToViewportRectangle}
|
|
||||||
*/
|
|
||||||
convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {
|
|
||||||
return Util.applyTransform([x, y], this.transform);
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* Converts PDF rectangle to the viewport coordinates.
|
|
||||||
* @param rect {Array} xMin, yMin, xMax and yMax coordinates.
|
|
||||||
* @returns {Array} Contains corresponding coordinates of the rectangle
|
|
||||||
* in the viewport coordinate space.
|
|
||||||
* @see {@link convertToViewportPoint}
|
|
||||||
*/
|
|
||||||
convertToViewportRectangle:
|
|
||||||
function PageViewport_convertToViewportRectangle(rect) {
|
|
||||||
var tl = Util.applyTransform([rect[0], rect[1]], this.transform);
|
|
||||||
var br = Util.applyTransform([rect[2], rect[3]], this.transform);
|
|
||||||
return [tl[0], tl[1], br[0], br[1]];
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* Converts viewport coordinates to the PDF location. For examples, useful
|
|
||||||
* for converting canvas pixel location into PDF one.
|
|
||||||
* @param x {number} X coordinate.
|
|
||||||
* @param y {number} Y coordinate.
|
|
||||||
* @returns {Object} Object that contains 'x' and 'y' properties of the
|
|
||||||
* point in the PDF coordinate space.
|
|
||||||
* @see {@link convertToViewportPoint}
|
|
||||||
*/
|
|
||||||
convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {
|
|
||||||
return Util.applyInverseTransform([x, y], this.transform);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
return PageViewport;
|
|
||||||
})();
|
|
||||||
|
|
||||||
var PDFStringTranslateTable = [
|
var PDFStringTranslateTable = [
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,
|
0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -1627,7 +1491,6 @@ export {
|
|||||||
MissingPDFException,
|
MissingPDFException,
|
||||||
NativeImageDecoding,
|
NativeImageDecoding,
|
||||||
NotImplementedException,
|
NotImplementedException,
|
||||||
PageViewport,
|
|
||||||
PasswordException,
|
PasswordException,
|
||||||
PasswordResponses,
|
PasswordResponses,
|
||||||
StreamType,
|
StreamType,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user