Fix #4299: refactor retina support for pdfs

This commit is contained in:
Henrik Lissner 2020-11-22 00:52:45 -05:00
parent e4890f6ac9
commit 8914b7b8ab
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 36 additions and 45 deletions

View file

@ -1,30 +0,0 @@
;;; tools/pdf/autoload/pdf.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +pdf--supply-width-to-create-image-calls-a (orig-fn &rest args)
(cl-letf* ((old-create-image (symbol-function #'create-image))
((symbol-function #'create-image)
(lambda (file-or-data &optional type data-p &rest props)
(apply old-create-image file-or-data type data-p
:width (car (pdf-view-image-size))
props))))
(apply orig-fn args)))
;;;###autoload
(defun +pdf--util-frame-scale-factor-a (orig-fn)
(if (and pdf-view-use-scaling
(memq (pdf-view-image-type) '(imagemagick image-io))
(fboundp 'frame-monitor-attributes))
(funcall orig-fn)
;; Add special support for retina displays on MacOS
(if (and (eq (framep-on-display) 'ns)
EMACS27+)
2
1)))
;;;###autoload
(defun +pdf--view-use-scaling-p-a ()
"Returns t if on ns window-system on Emacs 27+."
(and (eq (framep-on-display) 'ns)
EMACS27+
pdf-view-use-scaling))

View file

@ -39,20 +39,6 @@
(pdf-view-goto-page page) (pdf-view-goto-page page)
(setq-local +pdf--page-restored-p t))))) (setq-local +pdf--page-restored-p t)))))
;; Add retina support for MacOS users
(when IS-MAC
(advice-add #'pdf-util-frame-scale-factor :around #'+pdf--util-frame-scale-factor-a)
(advice-add #'pdf-view-use-scaling-p :before-until #'+pdf--view-use-scaling-p-a)
(defadvice! +pdf--supply-width-to-create-image-calls-a (orig-fn &rest args)
:around '(pdf-annot-show-annotation
pdf-isearch-hl-matches
pdf-view-display-region)
(letf! (defun create-image (file-or-data &optional type data-p &rest props)
(apply create-image file-or-data type data-p
:width (car (pdf-view-image-size))
props))
(apply orig-fn args))))
;; Handle PDF-tools related popups better ;; Handle PDF-tools related popups better
(set-popup-rules! (set-popup-rules!
'(("^\\*Outline*" :side right :size 40 :select nil) '(("^\\*Outline*" :side right :size 40 :select nil)
@ -91,4 +77,39 @@
;; Sets up `pdf-tools-enable-minor-modes', `pdf-occur-global-minor-mode' and ;; Sets up `pdf-tools-enable-minor-modes', `pdf-occur-global-minor-mode' and
;; `pdf-virtual-global-minor-mode'. ;; `pdf-virtual-global-minor-mode'.
(pdf-tools-install-noverify))) (pdf-tools-install-noverify))
;; Add retina support for MacOS users
(eval-when! IS-MAC
(defvar +pdf--scaled-p nil)
(defadvice! +pdf--scale-up-on-retina-display-a (orig-fn &rest args)
"Scale up the PDF on retina displays."
:around #'pdf-util-frame-scale-factor
(cond ((not pdf-view-use-scaling) 1)
((and (memq (pdf-view-image-type) '(imagemagick image-io))
(fboundp 'frame-monitor-attributes))
(funcall orig-fn))
;; Add special support for retina displays on MacOS
((and (eq (framep-on-display) 'ns)
(not +pdf--scaled-p)
EMACS27+)
(setq-local +pdf--scaled-p t)
2)
(1)))
(defadvice! +pdf--use-scaling-on-ns-a ()
:before-until #'pdf-view-use-scaling-p
(and (eq (framep-on-display) 'ns)
EMACS27+
pdf-view-use-scaling))
(defadvice! +pdf--supply-width-to-create-image-calls-a (orig-fn &rest args)
:around '(pdf-annot-show-annotation
pdf-isearch-hl-matches
pdf-view-display-region)
(letf! (defun create-image (file-or-data &optional type data-p &rest props)
(apply create-image file-or-data type data-p
:width (car (pdf-view-image-size))
props))
(apply orig-fn args)))))