From 2237a0e8abce47b44a50950b9b954dd34364a185 Mon Sep 17 00:00:00 2001 From: Hollow Man Date: Sat, 25 Jul 2020 21:51:41 +0800 Subject: [PATCH 1/2] PDF Viewer: Make PDF background and annotate color follow the emacs theme Signed-off-by: Hollow Man --- app/pdf-viewer/buffer.py | 25 +++++++++++++++++++------ eaf.el | 18 ++++++++++++++++-- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/app/pdf-viewer/buffer.py b/app/pdf-viewer/buffer.py index 3a8bb42..9971211 100755 --- a/app/pdf-viewer/buffer.py +++ b/app/pdf-viewer/buffer.py @@ -256,8 +256,7 @@ class PdfViewerWidget(QWidget): self.page_annotate_height = 22 self.page_annotate_padding_right = 10 self.page_annotate_padding_bottom = 10 - self.page_annotate_light_color = QColor("#333333") - self.page_annotate_dark_color = QColor("#999999") + self.page_annotate_color = QColor(self.emacs_var_dict["eaf-emacs-theme-foreground-color"]) self.font = QFont() self.font.setPointSize(12) @@ -273,6 +272,16 @@ class PdfViewerWidget(QWidget): self.remember_offset = None + def handle_color(self,color,inverted=False): + r = float(color.redF()) + g = float(color.greenF()) + b = float(color.blueF()) + if inverted: + r = 1.0-r + g = 1.0-g + b = 1.0-b + return (r,g,b) + def repeat_to_length(self, string_to_expand, length): return (string_to_expand * (int(length/len(string_to_expand))+1))[:length] @@ -316,6 +325,13 @@ class PdfViewerWidget(QWidget): self.char_dict[index] = self.get_page_char_rect_list(index) self.select_area_annot_cache_dict[index] = None + if self.emacs_var_dict["eaf-pdf-dark-mode"] == "follow": + if self.inverted_mode: + col = self.handle_color(QColor(self.emacs_var_dict["eaf-emacs-theme-background-color"]), True) + else: + col = self.handle_color(QColor(self.emacs_var_dict["eaf-emacs-theme-background-color"])) + page.drawRect(page.rect, color=col, fill=col, overlay=False) + trans = self.page_cache_trans if self.page_cache_trans is not None else fitz.Matrix(scale, scale) pixmap = page.getPixmap(matrix=trans, alpha=False) @@ -410,10 +426,7 @@ class PdfViewerWidget(QWidget): # Render current page. painter.setFont(self.font) - if self.inverted_mode: - painter.setPen(self.page_annotate_dark_color) - else: - painter.setPen(self.page_annotate_light_color) + painter.setPen(self.page_annotate_color) painter.drawText(QRect(self.rect().x(), self.rect().y() + self.rect().height() - self.page_annotate_height - self.page_annotate_padding_bottom, diff --git a/eaf.el b/eaf.el index bfdec7c..3fe06cd 100644 --- a/eaf.el +++ b/eaf.el @@ -275,7 +275,9 @@ It must defined at `eaf-browser-search-engines'." (eaf-mindmap-dark-mode . "follow") (eaf-mindmap-save-path . "~/Documents") (eaf-marker-letters . "ASDFHJKLWEOPCNM") - (eaf-emacs-theme-mode . "")) + (eaf-emacs-theme-mode . "") + (eaf-emacs-theme-background-color . "") + (eaf-emacs-theme-foreground-color . "")) "The alist storing user-defined variables that's shared with EAF Python side. Try not to modify this alist directly. Use `eaf-setq' to modify instead." @@ -2088,13 +2090,25 @@ Make sure that your smartphone is connected to the same WiFi network as this com (defun eaf-get-theme-mode () (format "%s"(frame-parameter nil 'background-mode))) +(defun eaf-get-theme-background-color () + (format "%s"(frame-parameter nil 'background-color))) + +(defun eaf-get-theme-foreground-color () + (format "%s"(frame-parameter nil 'foreground-color))) + (eaf-setq eaf-emacs-theme-mode (eaf-get-theme-mode)) +(eaf-setq eaf-emacs-theme-background-color (eaf-get-theme-background-color)) + +(eaf-setq eaf-emacs-theme-foreground-color (eaf-get-theme-foreground-color)) + (advice-add 'load-theme :around #'eaf-monitor-load-theme) (defun eaf-monitor-load-theme (orig-fun &optional arg &rest args) "Update `eaf-emacs-theme-mode' after execute `load-theme'." (apply orig-fun arg args) - (eaf-setq eaf-emacs-theme-mode (eaf-get-theme-mode))) + (eaf-setq eaf-emacs-theme-mode (eaf-get-theme-mode)) + (eaf-setq eaf-emacs-theme-background-color (eaf-get-theme-background-color)) + (eaf-setq eaf-emacs-theme-foreground-color (eaf-get-theme-foreground-color))) (define-minor-mode eaf-pdf-outline-mode "EAF pdf outline mode." From c405ef920f17a1cd2d00ba6f48e7afe293c6f55d Mon Sep 17 00:00:00 2001 From: Hollow Man Date: Sun, 26 Jul 2020 08:14:00 +0800 Subject: [PATCH 2/2] Fix Change Request #350 Signed-off-by: Hollow Man --- app/pdf-viewer/buffer.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/pdf-viewer/buffer.py b/app/pdf-viewer/buffer.py index 9971211..6cbb5b9 100755 --- a/app/pdf-viewer/buffer.py +++ b/app/pdf-viewer/buffer.py @@ -256,7 +256,10 @@ class PdfViewerWidget(QWidget): self.page_annotate_height = 22 self.page_annotate_padding_right = 10 self.page_annotate_padding_bottom = 10 - self.page_annotate_color = QColor(self.emacs_var_dict["eaf-emacs-theme-foreground-color"]) + self.page_annotate_light_color = QColor(self.emacs_var_dict["eaf-emacs-theme-foreground-color"]) + self.page_annotate_dark_color = QColor(1-QColor(self.emacs_var_dict["eaf-emacs-theme-foreground-color"]).redF(),\ + 1-QColor(self.emacs_var_dict["eaf-emacs-theme-foreground-color"]).greenF(),\ + 1-QColor(self.emacs_var_dict["eaf-emacs-theme-foreground-color"]).blueF()) self.font = QFont() self.font.setPointSize(12) @@ -326,10 +329,7 @@ class PdfViewerWidget(QWidget): self.select_area_annot_cache_dict[index] = None if self.emacs_var_dict["eaf-pdf-dark-mode"] == "follow": - if self.inverted_mode: - col = self.handle_color(QColor(self.emacs_var_dict["eaf-emacs-theme-background-color"]), True) - else: - col = self.handle_color(QColor(self.emacs_var_dict["eaf-emacs-theme-background-color"])) + col = self.handle_color(QColor(self.emacs_var_dict["eaf-emacs-theme-background-color"]), self.inverted_mode) page.drawRect(page.rect, color=col, fill=col, overlay=False) trans = self.page_cache_trans if self.page_cache_trans is not None else fitz.Matrix(scale, scale) @@ -426,7 +426,10 @@ class PdfViewerWidget(QWidget): # Render current page. painter.setFont(self.font) - painter.setPen(self.page_annotate_color) + if self.inverted_mode: + painter.setPen(self.page_annotate_dark_color) + else: + painter.setPen(self.page_annotate_light_color) painter.drawText(QRect(self.rect().x(), self.rect().y() + self.rect().height() - self.page_annotate_height - self.page_annotate_padding_bottom,