From c0b3373419a6a7aa3819bb4e32d6004928d6b5b1 Mon Sep 17 00:00:00 2001 From: luhuaei Date: Sat, 11 Apr 2020 12:46:48 +0800 Subject: [PATCH 1/3] pdf-viewer: support scroll left and right --- app/pdf-viewer/buffer.py | 16 +++++++++++++++- eaf.el | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/pdf-viewer/buffer.py b/app/pdf-viewer/buffer.py index a208798..d00dcba 100755 --- a/app/pdf-viewer/buffer.py +++ b/app/pdf-viewer/buffer.py @@ -45,6 +45,7 @@ class AppBuffer(Buffer): "scroll_down_page", "scroll_to_home", "scroll_to_end", "zoom_reset", "zoom_in", "zoom_out", "save_current_pos", "jump_to_saved_pos", + "scroll_left", "scroll_right", "toggle_read_mode", "toggle_inverted_mode", "toggle_mark_link"]: self.build_widget_method(method_name) @@ -196,6 +197,7 @@ class PdfViewerWidget(QWidget): # Init scale and scale mode. self.scale = 1.0 self.read_mode = "fit_to_width" + self.horizontal_offset = 0 # Inverted mode. self.inverted_mode = False @@ -385,7 +387,8 @@ class PdfViewerWidget(QWidget): painter.translate(0, self.page_padding) # Draw page image. - painter.drawPixmap(QRect(render_x, render_y, render_width, render_height), qpixmap) + visible_x = max(min(render_x + self.horizontal_offset, 0), self.rect().width() - render_width) # limit the visiable area size + painter.drawPixmap(QRect(visible_x, render_y, render_width, render_height), qpixmap) # Clean unused pixmap cache that avoid use too much memory. self.clean_unused_page_cache_pixmap() @@ -488,6 +491,12 @@ class PdfViewerWidget(QWidget): def scroll_down(self): self.update_scroll_offset(max(self.scroll_offset - self.scale * self.scroll_step, 0)) + def scroll_left(self): + self.update_horizontal_offset(max(self.horizontal_offset - self.scale * 30, (self.rect().width() - self.page_width * self.scale) / 2)) + + def scroll_right(self): + self.update_horizontal_offset(min(self.horizontal_offset + (self.scale * 30), (self.page_width * self.scale - self.rect().width()) / 2)) + def scroll_up_page(self): # Adjust scroll step to make users continue reading fluently. self.update_scroll_offset(min(self.scroll_offset + self.rect().height() - self.scroll_step, self.max_scroll_offset())) @@ -912,6 +921,11 @@ class PdfViewerWidget(QWidget): self.scroll_offset = new_offset self.update() + def update_horizontal_offset(self, new_offset): + if self.horizontal_offset != new_offset: + self.horizontal_offset = new_offset + self.update() + def get_cursor_absolute_position(self): start_page_index = self.get_start_page_index() last_page_index = self.get_last_page_index() diff --git a/eaf.el b/eaf.el index d99ad94..a9b90d3 100644 --- a/eaf.el +++ b/eaf.el @@ -352,6 +352,8 @@ Try not to modify this alist directly. Use `eaf-setq' to modify instead." ("" . "scroll_down") ("C-n" . "scroll_up") ("C-p" . "scroll_down") + ("C-b" . "scroll_left") + ("C-f" . "scroll_right") ("SPC" . "scroll_up_page") ("b" . "scroll_down_page") ("C-v" . "scroll_up_page") From d9e00126b16f4832e6d790d6b58a8262233edddd Mon Sep 17 00:00:00 2001 From: luhuaei Date: Sat, 11 Apr 2020 12:50:59 +0800 Subject: [PATCH 2/3] pdf-viewer: fix display on right when read_mode is fit_to_height --- app/pdf-viewer/buffer.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/pdf-viewer/buffer.py b/app/pdf-viewer/buffer.py index d00dcba..d67db23 100755 --- a/app/pdf-viewer/buffer.py +++ b/app/pdf-viewer/buffer.py @@ -387,8 +387,9 @@ class PdfViewerWidget(QWidget): painter.translate(0, self.page_padding) # Draw page image. - visible_x = max(min(render_x + self.horizontal_offset, 0), self.rect().width() - render_width) # limit the visiable area size - painter.drawPixmap(QRect(visible_x, render_y, render_width, render_height), qpixmap) + if self.read_mode == "fit_to_customize": + render_x = max(min(render_x + self.horizontal_offset, 0), self.rect().width() - render_width) # limit the visiable area size + painter.drawPixmap(QRect(render_x, render_y, render_width, render_height), qpixmap) # Clean unused pixmap cache that avoid use too much memory. self.clean_unused_page_cache_pixmap() From 1d626dc05675088a11168e8cb824c087ad9b9753 Mon Sep 17 00:00:00 2001 From: luhuaei Date: Sat, 11 Apr 2020 12:54:25 +0800 Subject: [PATCH 3/3] pdf-viewer: fix cursor position error on horizontal offset --- app/pdf-viewer/buffer.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/pdf-viewer/buffer.py b/app/pdf-viewer/buffer.py index d67db23..d94b6fc 100755 --- a/app/pdf-viewer/buffer.py +++ b/app/pdf-viewer/buffer.py @@ -937,6 +937,8 @@ class PdfViewerWidget(QWidget): if index < self.page_total_number: render_width = self.page_width * self.scale render_x = int((self.rect().width() - render_width) / 2) + if self.read_mode == "fit_to_customize": + render_x = max(min(render_x + self.horizontal_offset, 0), self.rect().width() - render_width) # computer absolute coordinate of page x = (ex - render_x) * 1.0 / self.scale