From dd7330c51569b32addb83ea88bb616997b1e634d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 12 Nov 2012 10:02:44 +0530 Subject: [PATCH] E-book viewer: Fix blank pages after every page when viewing some comic files in paged mode --- resources/compiled_coffeescript.zip | Bin 57014 -> 57189 bytes src/calibre/ebooks/oeb/display/paged.coffee | 4 +++- src/calibre/ebooks/oeb/iterator/book.py | 3 +++ src/calibre/ebooks/oeb/iterator/spine.py | 1 + src/calibre/gui2/viewer/documentview.py | 15 +++++++++------ 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/resources/compiled_coffeescript.zip b/resources/compiled_coffeescript.zip index 7c0ae79261f0acbf5122bc6200e7a7c52c33199c..055e7b15edc4a35f38372bcf1b17f8108ae6cce9 100644 GIT binary patch delta 282 zcmdnCm-*>FW|;tQW)=|!5XkkGg&HBXtF&&>tuHsfz4`W*DN;jc?)d*lgE>|IaJ^(=Vp!zPk96}TsryR9TlKM zjhN241Kq4U`QsfarrJ=j^Of#OPnNqU#dIPS%=Nz~G}-d59Mg?sU~b-BsmY1=q5CF=iL*S{Op(j4+9){3jht# zSHLtIt^&wVkOJ8>`Qlw8Ci_G%^S?U>&@e5gcX?p$`g=l?1@6l+{W}ll-n+mx+5f%( J+rv8`Qvh`;O + layout: (is_single_page=false) -> # start_time = new Date().getTime() body_style = window.getComputedStyle(document.body) bs = document.body.style @@ -151,6 +151,8 @@ class PagedDisplay has_svg = document.getElementsByTagName('svg').length > 0 only_img = document.getElementsByTagName('img').length == 1 and document.getElementsByTagName('div').length < 3 and document.getElementsByTagName('p').length < 2 this.is_full_screen_layout = (only_img or has_svg) and single_screen and document.body.scrollWidth > document.body.clientWidth + if is_single_page + this.is_full_screen_layout = true this.in_paged_mode = true this.current_margin_side = sm diff --git a/src/calibre/ebooks/oeb/iterator/book.py b/src/calibre/ebooks/oeb/iterator/book.py index 992d5304c6..70d6cea67f 100644 --- a/src/calibre/ebooks/oeb/iterator/book.py +++ b/src/calibre/ebooks/oeb/iterator/book.py @@ -126,6 +126,7 @@ class EbookIterator(BookmarksMixin): self.spine = [] Spiny = partial(SpineItem, read_anchor_map=read_anchor_map, run_char_count=run_char_count) + is_comic = plumber.input_fmt.lower() in {'cbc', 'cbz', 'cbr', 'cb7'} for i in ordered: spath = i.path mt = None @@ -135,6 +136,8 @@ class EbookIterator(BookmarksMixin): mt = guess_type(spath)[0] try: self.spine.append(Spiny(spath, mime_type=mt)) + if is_comic: + self.spine[-1].is_single_page = True except: self.log.warn('Missing spine item:', repr(spath)) diff --git a/src/calibre/ebooks/oeb/iterator/spine.py b/src/calibre/ebooks/oeb/iterator/spine.py index 9445da8def..7b404d4f74 100644 --- a/src/calibre/ebooks/oeb/iterator/spine.py +++ b/src/calibre/ebooks/oeb/iterator/spine.py @@ -53,6 +53,7 @@ class SpineItem(unicode): if mime_type is None: mime_type = guess_type(obj)[0] obj.mime_type = mime_type + obj.is_single_page = None return obj class IndexEntry(object): diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index 81ee82f2b6..185308202e 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -204,7 +204,7 @@ class Document(QWebPage): # {{{ _pass_json_value = pyqtProperty(QString, fget=_pass_json_value_getter, fset=_pass_json_value_setter) - def after_load(self): + def after_load(self, last_loaded_path=None): self.javascript('window.paged_display.read_document_margins()') self.set_bottom_padding(0) self.fit_images() @@ -213,7 +213,7 @@ class Document(QWebPage): # {{{ if self.in_fullscreen_mode: self.switch_to_fullscreen_mode() if self.in_paged_mode: - self.switch_to_paged_mode() + self.switch_to_paged_mode(last_loaded_path=last_loaded_path) self.read_anchor_positions(use_cache=False) evaljs = self.mainFrame().evaluateJavaScript for pl in self.all_viewer_plugins: @@ -240,7 +240,7 @@ class Document(QWebPage): # {{{ self.anchor_positions = {} return {k:tuple(v) for k, v in self.anchor_positions.iteritems()} - def switch_to_paged_mode(self, onresize=False): + def switch_to_paged_mode(self, onresize=False, last_loaded_path=None): if onresize and not self.loaded_javascript: return self.javascript(''' @@ -251,9 +251,12 @@ class Document(QWebPage): # {{{ self.cols_per_screen, self.top_margin, self.side_margin, self.bottom_margin )) - side_margin = self.javascript('window.paged_display.layout()', typ=int) + force_fullscreen_layout = bool(getattr(last_loaded_path, + 'is_single_page', False)) + f = 'true' if force_fullscreen_layout else 'false' + side_margin = self.javascript('window.paged_display.layout(%s)'%f, typ=int) # Setup the contents size to ensure that there is a right most margin. - # Without this webkit renders the final column with no margin, as the + # Without this WebKit renders the final column with no margin, as the # columns extend beyond the boundaries (and margin) of body mf = self.mainFrame() sz = mf.contentsSize() @@ -730,7 +733,7 @@ class DocumentView(QWebView): # {{{ return self.loading_url = None self.document.load_javascript_libraries() - self.document.after_load() + self.document.after_load(self.last_loaded_path) self._size_hint = self.document.mainFrame().contentsSize() scrolled = False if self.to_bottom: