Function: doc-view-insert-image
doc-view-insert-image is a byte-compiled function defined in
doc-view.el.gz.
Signature
(doc-view-insert-image FILE &rest ARGS)
Documentation
Insert the given png FILE.
ARGS is a list of image descriptors.
Source Code
;; Defined in /usr/src/emacs/lisp/doc-view.el.gz
;;;; Display
(defun doc-view-insert-image (file &rest args)
"Insert the given png FILE.
ARGS is a list of image descriptors."
(when doc-view--pending-cache-flush
(clear-image-cache)
(setq doc-view--pending-cache-flush nil))
(let ((ol (doc-view-current-overlay)))
;; Only insert the image if the buffer is visible.
(when (window-live-p (overlay-get ol 'window))
(let* ((image (if (and file (file-readable-p file))
(if (not doc-view-scale-internally)
(apply #'create-image file doc-view--image-type nil args)
(unless (member :width args)
(setq args `(,@args :width ,doc-view-image-width)))
(unless (member :transform-smoothing args)
(setq args `(,@args :transform-smoothing t)))
(apply #'create-image file doc-view--image-type nil args))))
(slice (doc-view-current-slice))
(img-width (and image (car (image-size image))))
(displayed-img-width (if (and image slice)
(* (/ (float (nth 2 slice))
(car (image-size image 'pixels)))
img-width)
img-width))
(window-width (window-width)))
(setf (doc-view-current-image) image)
(move-overlay ol (point-min) (point-max))
;; In case the window is wider than the image, center the image
;; horizontally.
(overlay-put ol 'before-string
(when (and image (> window-width displayed-img-width))
(propertize " " 'display
`(space :align-to (+ center (-0.5 . ,displayed-img-width))))))
(overlay-put ol 'display
(cond
(image
(if slice
(list (cons 'slice slice) image)
image))
;; We're trying to display a page that doesn't exist.
(doc-view--current-converter-processes
;; Maybe the page doesn't exist *yet*.
"Cannot display this page (yet)!")
(t
;; Typically happens if the conversion process somehow
;; failed. Better not signal an error here because it
;; could prevent a subsequent reconversion from fixing
;; the problem.
(concat "Cannot display this page!\n"
"Maybe because of a conversion failure!"))))
(let ((win (overlay-get ol 'window)))
(if (stringp (overlay-get ol 'display))
(progn ;Make sure the text is not scrolled out of view.
(set-window-hscroll win 0)
(set-window-vscroll win 0))
(let ((hscroll (image-mode-window-get 'hscroll win))
(vscroll (image-mode-window-get 'vscroll win)))
;; Reset scroll settings, in case they were changed.
(if hscroll (set-window-hscroll win hscroll))
(if vscroll (set-window-vscroll win vscroll t)))))))))