@@ -193,6 +193,13 @@ var PDFView = {
193
193
},
194
194
195
195
load : function pdfViewLoad (data , scale ) {
196
+ function bindOnAfterDraw (pageView , thumbnailView ) {
197
+ // when page is painted, using the image as thumbnail base
198
+ pageView .onAfterDraw = function pdfViewLoadOnAfterDraw () {
199
+ thumbnailView .setImage (pageView .canvas );
200
+ };
201
+ }
202
+
196
203
var loadingIndicator = document .getElementById ('loading' );
197
204
loadingIndicator .setAttribute ('hidden' , 'true' );
198
205
@@ -219,10 +226,14 @@ var PDFView = {
219
226
var thumbnails = this .thumbnails = [];
220
227
for (var i = 1 ; i <= pagesCount ; i ++) {
221
228
var page = pdf .getPage (i );
222
- pages .push (new PageView (container , page , i , page .width , page .height ,
223
- page .stats , this .navigateTo .bind (this )));
224
- thumbnails .push (new ThumbnailView (sidebar , page , i ,
225
- page .width / page .height ));
229
+ var pageView = new PageView (container , page , i , page .width , page .height ,
230
+ page .stats , this .navigateTo .bind (this ));
231
+ var thumbnailView = new ThumbnailView (sidebar , page , i ,
232
+ page .width / page .height );
233
+ bindOnAfterDraw (pageView , thumbnailView );
234
+
235
+ pages .push (pageView );
236
+ thumbnails .push (thumbnailView );
226
237
var pageRef = page .ref ;
227
238
pagesRefMap [pageRef .num + ' ' + pageRef .gen + ' R' ] = i ;
228
239
}
@@ -360,6 +371,8 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight,
360
371
while (div .hasChildNodes ())
361
372
div .removeChild (div .lastChild );
362
373
div .removeAttribute ('data-loaded' );
374
+
375
+ delete this .canvas ;
363
376
};
364
377
365
378
function setupLinks (content , scale ) {
@@ -474,6 +487,7 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight,
474
487
canvas .id = 'page' + this .id ;
475
488
canvas .mozOpaque = true ;
476
489
div .appendChild (canvas );
490
+ this .canvas = canvas ;
477
491
478
492
var scale = this .scale ;
479
493
canvas .width = pageWidth * scale ;
@@ -487,7 +501,11 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight,
487
501
ctx .translate (-this .x * scale , -this .y * scale );
488
502
489
503
stats .begin = Date .now ();
490
- this .content .startRendering (ctx , this .updateStats );
504
+ this .content .startRendering (ctx , (function pageViewDrawCallback () {
505
+ this .updateStats ();
506
+ if (this .onAfterDraw )
507
+ this .onAfterDraw ();
508
+ }).bind (this ));
491
509
492
510
setupLinks (this .content , this .scale );
493
511
div .setAttribute ('data-loaded' , true );
@@ -518,10 +536,9 @@ var ThumbnailView = function thumbnailView(container, page, id, pageRatio) {
518
536
anchor .appendChild (div );
519
537
container .appendChild (anchor );
520
538
521
- this .draw = function thumbnailViewDraw () {
522
- if (div .hasChildNodes ())
523
- return ;
539
+ this .hasImage = false ;
524
540
541
+ function getPageDrawContext () {
525
542
var canvas = document .createElement ('canvas' );
526
543
canvas .id = 'thumbnail' + id ;
527
544
canvas .mozOpaque = true ;
@@ -549,7 +566,28 @@ var ThumbnailView = function thumbnailView(container, page, id, pageRatio) {
549
566
div .style .height = (view .height * scaleY ) + 'px' ;
550
567
div .style .lineHeight = (view .height * scaleY ) + 'px' ;
551
568
569
+ return ctx ;
570
+ }
571
+
572
+ this .draw = function thumbnailViewDraw () {
573
+ if (this .hasImage )
574
+ return ;
575
+
576
+ var ctx = getPageDrawContext ();
552
577
page .startRendering (ctx , function thumbnailViewDrawStartRendering () {});
578
+
579
+ this .hasImage = true ;
580
+ };
581
+
582
+ this .setImage = function thumbnailViewSetImage (img ) {
583
+ if (this .hasImage )
584
+ return ;
585
+
586
+ var ctx = getPageDrawContext ();
587
+ ctx .drawImage (img , 0 , 0 , img .width , img .height ,
588
+ 0 , 0 , ctx .canvas .width , ctx .canvas .height );
589
+
590
+ this .hasImage = true ;
553
591
};
554
592
};
555
593
@@ -687,6 +725,10 @@ window.addEventListener('transitionend', function webViewerTransitionend(evt) {
687
725
688
726
var container = document .getElementById ('sidebarView' );
689
727
container ._interval = window .setInterval (function interval () {
728
+ // skipping the thumbnails with set images
729
+ while (pageIndex < pagesCount && PDFView .thumbnails [pageIndex ].hasImage )
730
+ pageIndex ++;
731
+
690
732
if (pageIndex >= pagesCount ) {
691
733
window .clearInterval (container ._interval );
692
734
return ;
0 commit comments