Remove the closure used with the InternalRenderTask
class
This patch utilizes the same approach as used in lots of other parts of the code-base, which thus *slightly* reduces the size of this code.
This commit is contained in:
parent
b18620ac0f
commit
4c679d80ac
@ -3063,181 +3063,179 @@ class RenderTask {
|
||||
* For internal use only.
|
||||
* @ignore
|
||||
*/
|
||||
const InternalRenderTask = (function InternalRenderTaskClosure() {
|
||||
const canvasInRendering = new WeakSet();
|
||||
class InternalRenderTask {
|
||||
static get canvasInUse() {
|
||||
return shadow(this, "canvasInUse", new WeakSet());
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-shadow
|
||||
class InternalRenderTask {
|
||||
constructor({
|
||||
callback,
|
||||
params,
|
||||
objs,
|
||||
commonObjs,
|
||||
operatorList,
|
||||
pageIndex,
|
||||
canvasFactory,
|
||||
useRequestAnimationFrame = false,
|
||||
pdfBug = false,
|
||||
}) {
|
||||
this.callback = callback;
|
||||
this.params = params;
|
||||
this.objs = objs;
|
||||
this.commonObjs = commonObjs;
|
||||
this.operatorListIdx = null;
|
||||
this.operatorList = operatorList;
|
||||
this._pageIndex = pageIndex;
|
||||
this.canvasFactory = canvasFactory;
|
||||
this._pdfBug = pdfBug;
|
||||
constructor({
|
||||
callback,
|
||||
params,
|
||||
objs,
|
||||
commonObjs,
|
||||
operatorList,
|
||||
pageIndex,
|
||||
canvasFactory,
|
||||
useRequestAnimationFrame = false,
|
||||
pdfBug = false,
|
||||
}) {
|
||||
this.callback = callback;
|
||||
this.params = params;
|
||||
this.objs = objs;
|
||||
this.commonObjs = commonObjs;
|
||||
this.operatorListIdx = null;
|
||||
this.operatorList = operatorList;
|
||||
this._pageIndex = pageIndex;
|
||||
this.canvasFactory = canvasFactory;
|
||||
this._pdfBug = pdfBug;
|
||||
|
||||
this.running = false;
|
||||
this.graphicsReadyCallback = null;
|
||||
this.graphicsReady = false;
|
||||
this._useRequestAnimationFrame =
|
||||
useRequestAnimationFrame === true && typeof window !== "undefined";
|
||||
this.cancelled = false;
|
||||
this.capability = createPromiseCapability();
|
||||
this.task = new RenderTask(this);
|
||||
// caching this-bound methods
|
||||
this._cancelBound = this.cancel.bind(this);
|
||||
this._continueBound = this._continue.bind(this);
|
||||
this._scheduleNextBound = this._scheduleNext.bind(this);
|
||||
this._nextBound = this._next.bind(this);
|
||||
this._canvas = params.canvasContext.canvas;
|
||||
this.running = false;
|
||||
this.graphicsReadyCallback = null;
|
||||
this.graphicsReady = false;
|
||||
this._useRequestAnimationFrame =
|
||||
useRequestAnimationFrame === true && typeof window !== "undefined";
|
||||
this.cancelled = false;
|
||||
this.capability = createPromiseCapability();
|
||||
this.task = new RenderTask(this);
|
||||
// caching this-bound methods
|
||||
this._cancelBound = this.cancel.bind(this);
|
||||
this._continueBound = this._continue.bind(this);
|
||||
this._scheduleNextBound = this._scheduleNext.bind(this);
|
||||
this._nextBound = this._next.bind(this);
|
||||
this._canvas = params.canvasContext.canvas;
|
||||
}
|
||||
|
||||
get completed() {
|
||||
return this.capability.promise.catch(function () {
|
||||
// Ignoring errors, since we only want to know when rendering is
|
||||
// no longer pending.
|
||||
});
|
||||
}
|
||||
|
||||
initializeGraphics({ transparency = false, optionalContentConfig }) {
|
||||
if (this.cancelled) {
|
||||
return;
|
||||
}
|
||||
if (this._canvas) {
|
||||
if (InternalRenderTask.canvasInUse.has(this._canvas)) {
|
||||
throw new Error(
|
||||
"Cannot use the same canvas during multiple render() operations. " +
|
||||
"Use different canvas or ensure previous operations were " +
|
||||
"cancelled or completed."
|
||||
);
|
||||
}
|
||||
InternalRenderTask.canvasInUse.add(this._canvas);
|
||||
}
|
||||
|
||||
get completed() {
|
||||
return this.capability.promise.catch(function () {
|
||||
// Ignoring errors, since we only want to know when rendering is
|
||||
// no longer pending.
|
||||
if (this._pdfBug && globalThis.StepperManager?.enabled) {
|
||||
this.stepper = globalThis.StepperManager.create(this._pageIndex);
|
||||
this.stepper.init(this.operatorList);
|
||||
this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
|
||||
}
|
||||
const { canvasContext, viewport, transform, imageLayer, background } =
|
||||
this.params;
|
||||
|
||||
this.gfx = new CanvasGraphics(
|
||||
canvasContext,
|
||||
this.commonObjs,
|
||||
this.objs,
|
||||
this.canvasFactory,
|
||||
imageLayer,
|
||||
optionalContentConfig
|
||||
);
|
||||
this.gfx.beginDrawing({
|
||||
transform,
|
||||
viewport,
|
||||
transparency,
|
||||
background,
|
||||
});
|
||||
this.operatorListIdx = 0;
|
||||
this.graphicsReady = true;
|
||||
if (this.graphicsReadyCallback) {
|
||||
this.graphicsReadyCallback();
|
||||
}
|
||||
}
|
||||
|
||||
cancel(error = null) {
|
||||
this.running = false;
|
||||
this.cancelled = true;
|
||||
if (this.gfx) {
|
||||
this.gfx.endDrawing();
|
||||
}
|
||||
if (this._canvas) {
|
||||
InternalRenderTask.canvasInUse.delete(this._canvas);
|
||||
}
|
||||
this.callback(
|
||||
error ||
|
||||
new RenderingCancelledException(
|
||||
`Rendering cancelled, page ${this._pageIndex + 1}`,
|
||||
"canvas"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
operatorListChanged() {
|
||||
if (!this.graphicsReady) {
|
||||
if (!this.graphicsReadyCallback) {
|
||||
this.graphicsReadyCallback = this._continueBound;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.stepper) {
|
||||
this.stepper.updateOperatorList(this.operatorList);
|
||||
}
|
||||
|
||||
if (this.running) {
|
||||
return;
|
||||
}
|
||||
this._continue();
|
||||
}
|
||||
|
||||
_continue() {
|
||||
this.running = true;
|
||||
if (this.cancelled) {
|
||||
return;
|
||||
}
|
||||
if (this.task.onContinue) {
|
||||
this.task.onContinue(this._scheduleNextBound);
|
||||
} else {
|
||||
this._scheduleNext();
|
||||
}
|
||||
}
|
||||
|
||||
_scheduleNext() {
|
||||
if (this._useRequestAnimationFrame) {
|
||||
window.requestAnimationFrame(() => {
|
||||
this._nextBound().catch(this._cancelBound);
|
||||
});
|
||||
} else {
|
||||
Promise.resolve().then(this._nextBound).catch(this._cancelBound);
|
||||
}
|
||||
}
|
||||
|
||||
initializeGraphics({ transparency = false, optionalContentConfig }) {
|
||||
if (this.cancelled) {
|
||||
return;
|
||||
}
|
||||
if (this._canvas) {
|
||||
if (canvasInRendering.has(this._canvas)) {
|
||||
throw new Error(
|
||||
"Cannot use the same canvas during multiple render() operations. " +
|
||||
"Use different canvas or ensure previous operations were " +
|
||||
"cancelled or completed."
|
||||
);
|
||||
}
|
||||
canvasInRendering.add(this._canvas);
|
||||
}
|
||||
|
||||
if (this._pdfBug && globalThis.StepperManager?.enabled) {
|
||||
this.stepper = globalThis.StepperManager.create(this._pageIndex);
|
||||
this.stepper.init(this.operatorList);
|
||||
this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
|
||||
}
|
||||
const { canvasContext, viewport, transform, imageLayer, background } =
|
||||
this.params;
|
||||
|
||||
this.gfx = new CanvasGraphics(
|
||||
canvasContext,
|
||||
this.commonObjs,
|
||||
this.objs,
|
||||
this.canvasFactory,
|
||||
imageLayer,
|
||||
optionalContentConfig
|
||||
);
|
||||
this.gfx.beginDrawing({
|
||||
transform,
|
||||
viewport,
|
||||
transparency,
|
||||
background,
|
||||
});
|
||||
this.operatorListIdx = 0;
|
||||
this.graphicsReady = true;
|
||||
if (this.graphicsReadyCallback) {
|
||||
this.graphicsReadyCallback();
|
||||
}
|
||||
async _next() {
|
||||
if (this.cancelled) {
|
||||
return;
|
||||
}
|
||||
|
||||
cancel(error = null) {
|
||||
this.operatorListIdx = this.gfx.executeOperatorList(
|
||||
this.operatorList,
|
||||
this.operatorListIdx,
|
||||
this._continueBound,
|
||||
this.stepper
|
||||
);
|
||||
if (this.operatorListIdx === this.operatorList.argsArray.length) {
|
||||
this.running = false;
|
||||
this.cancelled = true;
|
||||
if (this.gfx) {
|
||||
if (this.operatorList.lastChunk) {
|
||||
this.gfx.endDrawing();
|
||||
}
|
||||
if (this._canvas) {
|
||||
canvasInRendering.delete(this._canvas);
|
||||
}
|
||||
this.callback(
|
||||
error ||
|
||||
new RenderingCancelledException(
|
||||
`Rendering cancelled, page ${this._pageIndex + 1}`,
|
||||
"canvas"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
operatorListChanged() {
|
||||
if (!this.graphicsReady) {
|
||||
if (!this.graphicsReadyCallback) {
|
||||
this.graphicsReadyCallback = this._continueBound;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.stepper) {
|
||||
this.stepper.updateOperatorList(this.operatorList);
|
||||
}
|
||||
|
||||
if (this.running) {
|
||||
return;
|
||||
}
|
||||
this._continue();
|
||||
}
|
||||
|
||||
_continue() {
|
||||
this.running = true;
|
||||
if (this.cancelled) {
|
||||
return;
|
||||
}
|
||||
if (this.task.onContinue) {
|
||||
this.task.onContinue(this._scheduleNextBound);
|
||||
} else {
|
||||
this._scheduleNext();
|
||||
}
|
||||
}
|
||||
|
||||
_scheduleNext() {
|
||||
if (this._useRequestAnimationFrame) {
|
||||
window.requestAnimationFrame(() => {
|
||||
this._nextBound().catch(this._cancelBound);
|
||||
});
|
||||
} else {
|
||||
Promise.resolve().then(this._nextBound).catch(this._cancelBound);
|
||||
}
|
||||
}
|
||||
|
||||
async _next() {
|
||||
if (this.cancelled) {
|
||||
return;
|
||||
}
|
||||
this.operatorListIdx = this.gfx.executeOperatorList(
|
||||
this.operatorList,
|
||||
this.operatorListIdx,
|
||||
this._continueBound,
|
||||
this.stepper
|
||||
);
|
||||
if (this.operatorListIdx === this.operatorList.argsArray.length) {
|
||||
this.running = false;
|
||||
if (this.operatorList.lastChunk) {
|
||||
this.gfx.endDrawing();
|
||||
if (this._canvas) {
|
||||
canvasInRendering.delete(this._canvas);
|
||||
}
|
||||
this.callback();
|
||||
if (this._canvas) {
|
||||
InternalRenderTask.canvasInUse.delete(this._canvas);
|
||||
}
|
||||
this.callback();
|
||||
}
|
||||
}
|
||||
}
|
||||
return InternalRenderTask;
|
||||
})();
|
||||
}
|
||||
|
||||
/** @type {string} */
|
||||
const version =
|
||||
|
Loading…
x
Reference in New Issue
Block a user