Browse Source

Refactors draw method in PDFPageView; makes optional some PDFPageViewOptions options

Yury Delendik 10 years ago
parent
commit
2565e627a3
  1. 19
      web/annotations_layer_builder.js
  2. 4
      web/interfaces.js
  3. 34
      web/pdf_page_view.js
  4. 5
      web/pdf_rendering_queue.js
  5. 21
      web/text_layer_builder.js
  6. 16
      web/thumbnail_view.js

19
web/annotations_layer_builder.js

@ -154,3 +154,22 @@ var AnnotationsLayerBuilder = (function AnnotationsLayerBuilderClosure() {
}; };
return AnnotationsLayerBuilder; return AnnotationsLayerBuilder;
})(); })();
/**
* @constructor
* @implements IPDFAnnotationsLayerFactory
*/
function DefaultAnnotationsLayerFactory() {}
DefaultAnnotationsLayerFactory.prototype = {
/**
* @param {HTMLDivElement} pageDiv
* @param {PDFPage} pdfPage
* @returns {AnnotationsLayerBuilder}
*/
createAnnotationsLayerBuilder: function (pageDiv, pdfPage) {
return new AnnotationsLayerBuilder({
pageDiv: pageDiv,
pdfPage: pdfPage
});
}
};

4
web/interfaces.js

@ -67,9 +67,9 @@ IRenderableView.prototype = {
*/ */
get renderingState() {}, get renderingState() {},
/** /**
* @param {function} callback - The draw completion callback. * @returns {Promise} Resolved on draw completion.
*/ */
draw: function (callback) {}, draw: function () {},
resume: function () {}, resume: function () {},
}; };

34
web/pdf_page_view.js

@ -14,7 +14,8 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/* globals RenderingStates, PDFJS, CustomStyle, CSS_UNITS, getOutputScale */ /* globals RenderingStates, PDFJS, CustomStyle, CSS_UNITS, getOutputScale,
TextLayerBuilder, AnnotationsLayerBuilder, Promise */
'use strict'; 'use strict';
@ -286,7 +287,7 @@ var PDFPageView = (function PDFPageViewClosure() {
return this.viewport.convertToPdfPoint(x, y); return this.viewport.convertToPdfPoint(x, y);
}, },
draw: function PDFPageView_draw(callback) { draw: function PDFPageView_draw() {
if (this.renderingState !== RenderingStates.INITIAL) { if (this.renderingState !== RenderingStates.INITIAL) {
console.error('Must be in new state before drawing'); console.error('Must be in new state before drawing');
} }
@ -373,6 +374,12 @@ var PDFPageView = (function PDFPageViewClosure() {
ctx.scale(outputScale.sx, outputScale.sy); ctx.scale(outputScale.sx, outputScale.sy);
} }
var resolveRenderPromise, rejectRenderPromise;
var promise = new Promise(function (resolve, reject) {
resolveRenderPromise = resolve;
rejectRenderPromise = reject;
});
// Rendering area // Rendering area
var self = this; var self = this;
@ -385,6 +392,7 @@ var PDFPageView = (function PDFPageViewClosure() {
} }
if (error === 'cancelled') { if (error === 'cancelled') {
rejectRenderPromise(error);
return; return;
} }
@ -412,14 +420,16 @@ var PDFPageView = (function PDFPageViewClosure() {
}); });
div.dispatchEvent(event); div.dispatchEvent(event);
callback(); if (!error) {
resolveRenderPromise(undefined);
} else {
rejectRenderPromise(error);
}
} }
var renderContext = { var renderContinueCallback = null;
canvasContext: ctx, if (this.renderingQueue) {
viewport: this.viewport, renderContinueCallback = function renderContinueCallback(cont) {
// intent: 'default', // === 'display'
continueCallback: function pdfViewcContinueCallback(cont) {
if (!self.renderingQueue.isHighestPriority(self)) { if (!self.renderingQueue.isHighestPriority(self)) {
self.renderingState = RenderingStates.PAUSED; self.renderingState = RenderingStates.PAUSED;
self.resume = function resumeCallback() { self.resume = function resumeCallback() {
@ -429,7 +439,14 @@ var PDFPageView = (function PDFPageViewClosure() {
return; return;
} }
cont(); cont();
};
} }
var renderContext = {
canvasContext: ctx,
viewport: this.viewport,
// intent: 'default', // === 'display'
continueCallback: renderContinueCallback
}; };
var renderTask = this.renderTask = this.pdfPage.render(renderContext); var renderTask = this.renderTask = this.pdfPage.render(renderContext);
@ -462,6 +479,7 @@ var PDFPageView = (function PDFPageViewClosure() {
if (self.onBeforeDraw) { if (self.onBeforeDraw) {
self.onBeforeDraw(); self.onBeforeDraw();
} }
return promise;
}, },
beforePrint: function PDFPageView_beforePrint() { beforePrint: function PDFPageView_beforePrint() {

5
web/pdf_rendering_queue.js

@ -165,7 +165,10 @@ var PDFRenderingQueue = (function PDFRenderingQueueClosure() {
break; break;
case RenderingStates.INITIAL: case RenderingStates.INITIAL:
this.highestPriorityPage = view.renderingId; this.highestPriorityPage = view.renderingId;
view.draw(this.renderHighestPriority.bind(this)); var continueRendering = function () {
this.renderHighestPriority();
}.bind(this);
view.draw().then(continueRendering, continueRendering);
break; break;
} }
return true; return true;

21
web/text_layer_builder.js

@ -385,3 +385,24 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() {
}; };
return TextLayerBuilder; return TextLayerBuilder;
})(); })();
/**
* @constructor
* @implements IPDFTextLayerFactory
*/
function DefaultTextLayerFactory() {}
DefaultTextLayerFactory.prototype = {
/**
* @param {HTMLDivElement} textLayerDiv
* @param {number} pageIndex
* @param {PageViewport} viewport
* @returns {TextLayerBuilder}
*/
createTextLayerBuilder: function (textLayerDiv, pageIndex, viewport) {
return new TextLayerBuilder({
textLayerDiv: textLayerDiv,
pageIndex: pageIndex,
viewport: viewport
});
}
};

16
web/thumbnail_view.js

@ -139,17 +139,22 @@ var ThumbnailView = function thumbnailView(container, id, defaultViewport,
return !this.hasImage; return !this.hasImage;
}; };
this.draw = function thumbnailViewDraw(callback) { this.draw = function thumbnailViewDraw() {
if (this.renderingState !== RenderingStates.INITIAL) { if (this.renderingState !== RenderingStates.INITIAL) {
console.error('Must be in new state before drawing'); console.error('Must be in new state before drawing');
} }
this.renderingState = RenderingStates.RUNNING; this.renderingState = RenderingStates.RUNNING;
if (this.hasImage) { if (this.hasImage) {
callback(); return Promise.resolve(undefined);
return;
} }
var resolveRenderPromise, rejectRenderPromise;
var promise = new Promise(function (resolve, reject) {
resolveRenderPromise = resolve;
rejectRenderPromise = reject;
});
var self = this; var self = this;
var ctx = this.getPageDrawContext(); var ctx = this.getPageDrawContext();
var drawViewport = this.viewport.clone({ scale: this.scale }); var drawViewport = this.viewport.clone({ scale: this.scale });
@ -171,14 +176,15 @@ var ThumbnailView = function thumbnailView(container, id, defaultViewport,
this.pdfPage.render(renderContext).promise.then( this.pdfPage.render(renderContext).promise.then(
function pdfPageRenderCallback() { function pdfPageRenderCallback() {
self.renderingState = RenderingStates.FINISHED; self.renderingState = RenderingStates.FINISHED;
callback(); resolveRenderPromise(undefined);
}, },
function pdfPageRenderError(error) { function pdfPageRenderError(error) {
self.renderingState = RenderingStates.FINISHED; self.renderingState = RenderingStates.FINISHED;
callback(); rejectRenderPromise(error);
} }
); );
this.hasImage = true; this.hasImage = true;
return promise;
}; };
function getTempCanvas(width, height) { function getTempCanvas(width, height) {

Loading…
Cancel
Save