diff --git a/src/calibre/gui2/viewer/config.py b/src/calibre/gui2/viewer/config.py index f45587d248..6280e8385e 100644 --- a/src/calibre/gui2/viewer/config.py +++ b/src/calibre/gui2/viewer/config.py @@ -78,6 +78,9 @@ def config(defaults=None): c.add_opt('show_fullscreen_help', default=True, action='store_false', help=_('Show full screen usage help')) c.add_opt('cols_per_screen', default=1) + c.add_opt('cols_per_screen_portrait', default=1) + c.add_opt('cols_per_screen_landscape', default=1) + c.add_opt('cols_per_screen_migrated', default=False, action='store_true') c.add_opt('use_book_margins', default=False, action='store_true') c.add_opt('top_margin', default=20) c.add_opt('side_margin', default=40) @@ -98,6 +101,15 @@ def config(defaults=None): fonts('standard_font', default='serif', help=_('The standard font type')) fonts('minimum_font_size', default=8, help=_('The minimum font size in px')) + oparse = c.parse + + def parse(): + ans = oparse() + if not ans.cols_per_screen_migrated: + ans.cols_per_screen_portrait = ans.cols_per_screen_landscape = ans.cols_per_screen + return ans + c.parse = parse + return c def load_themes(): @@ -322,7 +334,8 @@ class ConfigDialog(QDialog, Ui_Dialog): self.opt_start_in_fullscreen.setChecked(opts.start_in_fullscreen) self.opt_show_fullscreen_help.setChecked(opts.show_fullscreen_help) self.opt_fullscreen_pos.setChecked(opts.fullscreen_pos) - self.opt_cols_per_screen.setValue(opts.cols_per_screen) + self.opt_cols_per_screen_portrait.setValue(opts.cols_per_screen_portrait) + self.opt_cols_per_screen_landscape.setValue(opts.cols_per_screen_landscape) self.opt_override_book_margins.setChecked(not opts.use_book_margins) for x in ('top', 'bottom', 'side'): getattr(self, 'opt_%s_margin'%x).setValue(getattr(opts, @@ -405,7 +418,9 @@ class ConfigDialog(QDialog, Ui_Dialog): c.set('fullscreen_pos', self.opt_fullscreen_pos.isChecked()) c.set('fullscreen_scrollbar', self.opt_fullscreen_scrollbar.isChecked()) c.set('show_fullscreen_help', self.opt_show_fullscreen_help.isChecked()) - c.set('cols_per_screen', int(self.opt_cols_per_screen.value())) + c.set('cols_per_screen_migrated', True) + c.set('cols_per_screen_portrait', int(self.opt_cols_per_screen_portrait.value())) + c.set('cols_per_screen_landscape', int(self.opt_cols_per_screen_landscape.value())) c.set('start_in_fullscreen', self.opt_start_in_fullscreen.isChecked()) c.set('use_book_margins', not self.opt_override_book_margins.isChecked()) diff --git a/src/calibre/gui2/viewer/config.ui b/src/calibre/gui2/viewer/config.ui index 124c8b3b80..269da7047d 100644 --- a/src/calibre/gui2/viewer/config.ui +++ b/src/calibre/gui2/viewer/config.ui @@ -261,20 +261,27 @@ QToolBox::tab:hover { - - - - The number of &pages of text to show on screen - - - opt_cols_per_screen + + + + Qt::Horizontal - - - - page(s) + + + + In &Portrait orientation: + + + opt_cols_per_screen_portrait + + + + + + + Controls the number of pages on the screen when the viewer window's width is less than its height 1 @@ -284,7 +291,7 @@ QToolBox::tab:hover { - + &Override the page margin settings specified in the book @@ -294,7 +301,7 @@ QToolBox::tab:hover { - + &Top margin @@ -304,7 +311,7 @@ QToolBox::tab:hover { - + px @@ -317,7 +324,7 @@ QToolBox::tab:hover { - + &Side margin @@ -327,7 +334,7 @@ QToolBox::tab:hover { - + px @@ -340,7 +347,7 @@ QToolBox::tab:hover { - + &Bottom margin @@ -350,7 +357,7 @@ QToolBox::tab:hover { - + px @@ -363,6 +370,43 @@ QToolBox::tab:hover { + + + + Qt::Horizontal + + + + + + + The number of pages of text to show on screen + + + + + + + In &Landscape orientation: + + + opt_cols_per_screen_landscape + + + + + + + Controls the number of pages on the screen when the viewer window's height is less than its width + + + 1 + + + 5 + + + @@ -370,8 +414,8 @@ QToolBox::tab:hover { 0 0 - 799 - 378 + 381 + 193 @@ -472,8 +516,8 @@ QToolBox::tab:hover { 0 0 - 799 - 378 + 340 + 70 @@ -551,8 +595,8 @@ QToolBox::tab:hover { 0 0 - 799 - 378 + 384 + 140 @@ -629,8 +673,8 @@ QToolBox::tab:hover { 0 0 - 799 - 378 + 479 + 226 diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index 43d4515a40..4317e718f3 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -183,7 +183,8 @@ class Document(QWebPage): # {{{ self.start_in_fullscreen = opts.start_in_fullscreen self.show_fullscreen_help = opts.show_fullscreen_help self.use_book_margins = opts.use_book_margins - self.cols_per_screen = opts.cols_per_screen + self.cols_per_screen_portrait = opts.cols_per_screen_portrait + self.cols_per_screen_landscape = opts.cols_per_screen_landscape self.side_margin = opts.side_margin self.top_margin, self.bottom_margin = opts.top_margin, opts.bottom_margin self.show_controls = opts.show_controls @@ -291,12 +292,14 @@ class Document(QWebPage): # {{{ def switch_to_paged_mode(self, onresize=False, last_loaded_path=None): if onresize and not self.loaded_javascript: return + cols_per_screen = self.cols_per_screen_portrait if self.is_portrait else self.cols_per_screen_landscape + cols_per_screen = max(1, min(5, cols_per_screen)) self.javascript(''' window.paged_display.use_document_margins = %s; window.paged_display.set_geometry(%d, %d, %d, %d); '''%( ('true' if self.use_book_margins else 'false'), - self.cols_per_screen, self.top_margin, self.side_margin, + cols_per_screen, self.top_margin, self.side_margin, self.bottom_margin )) force_fullscreen_layout = bool(getattr(last_loaded_path, @@ -448,6 +451,10 @@ class Document(QWebPage): # {{{ def window_width(self): return self.javascript('window.innerWidth', 'int') + @property + def is_portrait(self): + return self.window_width < self.window_height + @property def xpos(self): return self.mainFrame().scrollPosition().x()