1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-20 15:18:08 +02:00

Merge and fix upstream conflict.

This commit is contained in:
Brendan Dahl 2011-11-28 17:49:12 -08:00
commit eaac818946
2 changed files with 188 additions and 31 deletions

View file

@ -218,6 +218,13 @@ var PDFView = {
},
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');
@ -244,10 +251,14 @@ var PDFView = {
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;
}
@ -385,6 +396,8 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight,
while (div.hasChildNodes())
div.removeChild(div.lastChild);
div.removeAttribute('data-loaded');
delete this.canvas;
};
function setupLinks(content, scale) {
@ -499,6 +512,7 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight,
canvas.id = 'page' + this.id;
canvas.mozOpaque = true;
div.appendChild(canvas);
this.canvas = canvas;
var scale = this.scale;
canvas.width = pageWidth * scale;
@ -512,9 +526,16 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight,
ctx.translate(-this.x * scale, -this.y * scale);
stats.begin = Date.now();
this.content.startRendering(ctx, this.updateStats, function(e) {
PDFView.error('An error occured while rendering the page.', e);
});
this.content.startRendering(ctx,
(function pageViewDrawCallback() {
this.updateStats();
if (this.onAfterDraw)
this.onAfterDraw();
}).bind(this),
function pageViewErrorback(e) {
PDFView.error('An error occured while rendering the page.', e);
}
);
setupLinks(this.content, this.scale);
div.setAttribute('data-loaded', true);
@ -545,10 +566,9 @@ var ThumbnailView = function thumbnailView(container, page, id, pageRatio) {
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;
@ -576,7 +596,28 @@ var ThumbnailView = function thumbnailView(container, page, id, pageRatio) {
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;
};
};
@ -714,6 +755,10 @@ window.addEventListener('transitionend', function webViewerTransitionend(evt) {
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;