fixed last page loading bug

This commit is contained in:
Bala Clark 2011-09-06 16:53:17 +02:00
parent b6ce29bfd0
commit aaafbbc12c

View file

@ -12,6 +12,7 @@
- in double page mode the last page is not showing if it is a single page
Nice 2 have:
- fix manga mode
- jump to page?
- enable menu items via config, allow for custom items
- decouple controls from reader api
@ -89,7 +90,6 @@ function ComicBook(id, srcs, opts) {
var pages = []; // array of preloaded Image objects
var canvas; // the HTML5 canvas object
var context; // the 2d drawing context
var buffer = 1; // image preload buffer level
var loaded = []; // the images that have been loaded so far
var scale = 1; // page zoom scale, 1 = 100%
var is_double_page_spread = false;
@ -445,12 +445,7 @@ function ComicBook(id, srcs, opts) {
this.showControl("loadingOverlay");
//var srcs = this.srcs;
if (no_pages < buffer) { buffer = no_pages; } // don't get stuck if the buffer level is higher than the number of pages
var i = pointer; // the current page counter for this method
//if (i - buffer >= 0) { i = i - buffer; } // start loading from the first requested page - buffer
// I am using recursion instead of a forEach loop so that the next image is
// only loaded when the previous one has completely finished
@ -479,14 +474,13 @@ function ComicBook(id, srcs, opts) {
preload(i);
}
//console.log(loaded[loaded.length-1]);
// double page mode needs an extra page added to the buffer
padding = (options.displayMode === "double") ? 1 : 0;
// start rendering the comic when the buffer level has been reached (FIXME: buggy, fails if trying to load the last couple of pages)
if (loaded[loaded.length-1] === pointer + buffer + padding || loaded[loaded.length-1] === page_requested) {
// double page mode needs an extra page added
var buffer = (options.displayMode === "double" && pointer < srcs.length-1) ? 1 : 0;
// start rendering the comic when the requested page is ready
if ($.inArray(pointer + buffer, loaded) !== -1
|| (typeof page_requested === "number" && $.inArray(page_requested + buffer, loaded))
) {
// if the user is waiting for a page to be loaded, render that one instead of the default pointer
if (typeof page_requested === "number") {
pointer = page_requested-1;
@ -526,8 +520,11 @@ function ComicBook(id, srcs, opts) {
var offsetW = 0, offsetH = 0;
var page = ComicBook.prototype.getPage(pointer);
var page2 = ComicBook.prototype.getPage(pointer + 1);
var page2 = false;
if (options.displayMode === "double" && pointer < srcs.length-1) {
page2 = ComicBook.prototype.getPage(pointer + 1);
}
if (typeof page !== "object") {
throw new ComicBookException(ComicBookException.INVALID_PAGE_TYPE, typeof page);
}
@ -539,7 +536,11 @@ function ComicBook(id, srcs, opts) {
canvas.height = 0;
// show double page spreads on a single page
is_double_page_spread = ((page.width > page.height || page2.width > page2.height) && options.displayMode === "double");
is_double_page_spread = (
typeof page2 === "object"
&& (page.width > page.height || page2.width > page2.height)
&& options.displayMode === "double"
);
if (is_double_page_spread) { options.displayMode = "single"; }
if (options.displayMode === "double") {
@ -598,9 +599,9 @@ function ComicBook(id, srcs, opts) {
}
// in manga double page mode reverse the page(s)
if (options.manga && options.displayMode === "double") {
if (options.manga && options.displayMode === "double" && typeof page2 === "object") {
var tmpPage = page;
var tmpPage2 = page2; // FIXME: check this exists before using
var tmpPage2 = page2;
page = tmpPage2;
page2 = tmpPage;
}