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)))))))))