E-book viewer: Fix blank pages after every page when viewing some comic files in paged mode

This commit is contained in:
Kovid Goyal 2012-11-12 10:02:44 +05:30
parent f2759fe04e
commit dd7330c515
5 changed files with 16 additions and 7 deletions

Binary file not shown.

View File

@ -71,7 +71,7 @@ class PagedDisplay
this.margin_side = margin_side this.margin_side = margin_side
this.margin_bottom = margin_bottom this.margin_bottom = margin_bottom
layout: () -> layout: (is_single_page=false) ->
# start_time = new Date().getTime() # start_time = new Date().getTime()
body_style = window.getComputedStyle(document.body) body_style = window.getComputedStyle(document.body)
bs = document.body.style bs = document.body.style
@ -151,6 +151,8 @@ class PagedDisplay
has_svg = document.getElementsByTagName('svg').length > 0 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 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 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.in_paged_mode = true
this.current_margin_side = sm this.current_margin_side = sm

View File

@ -126,6 +126,7 @@ class EbookIterator(BookmarksMixin):
self.spine = [] self.spine = []
Spiny = partial(SpineItem, read_anchor_map=read_anchor_map, Spiny = partial(SpineItem, read_anchor_map=read_anchor_map,
run_char_count=run_char_count) run_char_count=run_char_count)
is_comic = plumber.input_fmt.lower() in {'cbc', 'cbz', 'cbr', 'cb7'}
for i in ordered: for i in ordered:
spath = i.path spath = i.path
mt = None mt = None
@ -135,6 +136,8 @@ class EbookIterator(BookmarksMixin):
mt = guess_type(spath)[0] mt = guess_type(spath)[0]
try: try:
self.spine.append(Spiny(spath, mime_type=mt)) self.spine.append(Spiny(spath, mime_type=mt))
if is_comic:
self.spine[-1].is_single_page = True
except: except:
self.log.warn('Missing spine item:', repr(spath)) self.log.warn('Missing spine item:', repr(spath))

View File

@ -53,6 +53,7 @@ class SpineItem(unicode):
if mime_type is None: if mime_type is None:
mime_type = guess_type(obj)[0] mime_type = guess_type(obj)[0]
obj.mime_type = mime_type obj.mime_type = mime_type
obj.is_single_page = None
return obj return obj
class IndexEntry(object): class IndexEntry(object):

View File

@ -204,7 +204,7 @@ class Document(QWebPage): # {{{
_pass_json_value = pyqtProperty(QString, fget=_pass_json_value_getter, _pass_json_value = pyqtProperty(QString, fget=_pass_json_value_getter,
fset=_pass_json_value_setter) 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.javascript('window.paged_display.read_document_margins()')
self.set_bottom_padding(0) self.set_bottom_padding(0)
self.fit_images() self.fit_images()
@ -213,7 +213,7 @@ class Document(QWebPage): # {{{
if self.in_fullscreen_mode: if self.in_fullscreen_mode:
self.switch_to_fullscreen_mode() self.switch_to_fullscreen_mode()
if self.in_paged_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) self.read_anchor_positions(use_cache=False)
evaljs = self.mainFrame().evaluateJavaScript evaljs = self.mainFrame().evaluateJavaScript
for pl in self.all_viewer_plugins: for pl in self.all_viewer_plugins:
@ -240,7 +240,7 @@ class Document(QWebPage): # {{{
self.anchor_positions = {} self.anchor_positions = {}
return {k:tuple(v) for k, v in self.anchor_positions.iteritems()} 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: if onresize and not self.loaded_javascript:
return return
self.javascript(''' self.javascript('''
@ -251,9 +251,12 @@ class Document(QWebPage): # {{{
self.cols_per_screen, self.top_margin, self.side_margin, self.cols_per_screen, self.top_margin, self.side_margin,
self.bottom_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. # 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 # columns extend beyond the boundaries (and margin) of body
mf = self.mainFrame() mf = self.mainFrame()
sz = mf.contentsSize() sz = mf.contentsSize()
@ -730,7 +733,7 @@ class DocumentView(QWebView): # {{{
return return
self.loading_url = None self.loading_url = None
self.document.load_javascript_libraries() self.document.load_javascript_libraries()
self.document.after_load() self.document.after_load(self.last_loaded_path)
self._size_hint = self.document.mainFrame().contentsSize() self._size_hint = self.document.mainFrame().contentsSize()
scrolled = False scrolled = False
if self.to_bottom: if self.to_bottom: