},
load: function pdfViewLoad(data, scale) {
+ function bindOnAfterDraw(pageView, thumbnailView) {
+ // when page is painted, using the image as thumbnail base
+ pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() {
+ thumbnailView.setImage(pageView.canvas);
+ };
+ }
+
var loadingIndicator = document.getElementById('loading');
loadingIndicator.setAttribute('hidden', 'true');
var thumbnails = this.thumbnails = [];
for (var i = 1; i <= pagesCount; i++) {
var page = pdf.getPage(i);
- pages.push(new PageView(container, page, i, page.width, page.height,
- page.stats, this.navigateTo.bind(this)));
- thumbnails.push(new ThumbnailView(sidebar, page, i,
- page.width / page.height));
+ var pageView = new PageView(container, page, i, page.width, page.height,
+ page.stats, this.navigateTo.bind(this));
+ var thumbnailView = new ThumbnailView(sidebar, page, i,
+ page.width / page.height);
+ bindOnAfterDraw(pageView, thumbnailView);
+
+ pages.push(pageView);
+ thumbnails.push(thumbnailView);
var pageRef = page.ref;
pagesRefMap[pageRef.num + ' ' + pageRef.gen + ' R'] = i;
}
while (div.hasChildNodes())
div.removeChild(div.lastChild);
div.removeAttribute('data-loaded');
+
+ delete this.canvas;
};
function setupLinks(content, scale) {
canvas.id = 'page' + this.id;
canvas.mozOpaque = true;
div.appendChild(canvas);
+ this.canvas = canvas;
var scale = this.scale;
canvas.width = pageWidth * scale;
ctx.translate(-this.x * scale, -this.y * scale);
stats.begin = Date.now();
- this.content.startRendering(ctx, this.updateStats);
+ this.content.startRendering(ctx, (function pageViewDrawCallback() {
+ this.updateStats();
+ if (this.onAfterDraw)
+ this.onAfterDraw();
+ }).bind(this));
setupLinks(this.content, this.scale);
div.setAttribute('data-loaded', true);
anchor.appendChild(div);
container.appendChild(anchor);
- this.draw = function thumbnailViewDraw() {
- if (div.hasChildNodes())
- return;
+ this.hasImage = false;
+ function getPageDrawContext() {
var canvas = document.createElement('canvas');
canvas.id = 'thumbnail' + id;
canvas.mozOpaque = true;
div.style.height = (view.height * scaleY) + 'px';
div.style.lineHeight = (view.height * scaleY) + 'px';
+ return ctx;
+ }
+
+ this.draw = function thumbnailViewDraw() {
+ if (this.hasImage)
+ return;
+
+ var ctx = getPageDrawContext();
page.startRendering(ctx, function thumbnailViewDrawStartRendering() {});
+
+ this.hasImage = true;
+ };
+
+ this.setImage = function thumbnailViewSetImage(img) {
+ if (this.hasImage)
+ return;
+
+ var ctx = getPageDrawContext();
+ ctx.drawImage(img, 0, 0, img.width, img.height,
+ 0, 0, ctx.canvas.width, ctx.canvas.height);
+
+ this.hasImage = true;
};
};
var container = document.getElementById('sidebarView');
container._interval = window.setInterval(function interval() {
+ // skipping the thumbnails with set images
+ while (pageIndex < pagesCount && PDFView.thumbnails[pageIndex].hasImage)
+ pageIndex++;
+
if (pageIndex >= pagesCount) {
window.clearInterval(container._interval);
return;