diff options
| author | Joakim Verona | 2010-06-26 23:17:02 +0200 |
|---|---|---|
| committer | Joakim Verona | 2010-06-26 23:17:02 +0200 |
| commit | c7f514b5f17b4607690ebf37a3cb09538d5bcd8f (patch) | |
| tree | a191831e7f5f099e5579cd01350d1690554833d1 /lisp/image-mode.el | |
| parent | 65a192e9bde95812af4cd52201f631ad59c1e523 (diff) | |
| download | emacs-c7f514b5f17b4607690ebf37a3cb09538d5bcd8f.tar.gz emacs-c7f514b5f17b4607690ebf37a3cb09538d5bcd8f.zip | |
image-mode changes. removed the imagemagick specific :geometry and :crop interface that wasnt very good.
Diffstat (limited to 'lisp/image-mode.el')
| -rw-r--r-- | lisp/image-mode.el | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/lisp/image-mode.el b/lisp/image-mode.el index 585d82e9beb..a278c47a555 100644 --- a/lisp/image-mode.el +++ b/lisp/image-mode.el | |||
| @@ -471,7 +471,10 @@ was inserted." | |||
| 471 | (buffer-substring-no-properties (point-min) (point-max))) | 471 | (buffer-substring-no-properties (point-min) (point-max))) |
| 472 | filename)) | 472 | filename)) |
| 473 | (type (image-type file-or-data nil data-p)) | 473 | (type (image-type file-or-data nil data-p)) |
| 474 | (image (create-animated-image file-or-data type data-p)) | 474 | (image0 (create-animated-image file-or-data type data-p)) |
| 475 | (image (append image0 | ||
| 476 | (image-transform-properties image0) | ||
| 477 | )) | ||
| 475 | (props | 478 | (props |
| 476 | `(display ,image | 479 | `(display ,image |
| 477 | intangible ,image | 480 | intangible ,image |
| @@ -534,6 +537,72 @@ the image file and `image-mode' showing the image as an image." | |||
| 534 | (when (not (string= image-type (bookmark-prop-get bmk 'image-type))) | 537 | (when (not (string= image-type (bookmark-prop-get bmk 'image-type))) |
| 535 | (image-toggle-display)))) | 538 | (image-toggle-display)))) |
| 536 | 539 | ||
| 540 | |||
| 541 | (defvar image-transform-minor-mode-map | ||
| 542 | (let ((map (make-sparse-keymap))) | ||
| 543 | ; (define-key map [(control ?+)] 'image-scale-in) | ||
| 544 | ; (define-key map [(control ?-)] 'image-scale-out) | ||
| 545 | ; (define-key map [(control ?=)] 'image-scale-none) | ||
| 546 | ;; (define-key map "c f h" 'image-scale-fit-height) | ||
| 547 | ;; (define-key map "c ]" 'image-rotate-right) | ||
| 548 | map) | ||
| 549 | "Minor mode keymap for transforming the view of images Image mode.") | ||
| 550 | |||
| 551 | (define-minor-mode image-transform-mode | ||
| 552 | "minor mode for scaleing and rotation" | ||
| 553 | nil "image-transform" | ||
| 554 | image-transform-minor-mode-map) | ||
| 555 | |||
| 556 | ;;these are supposed to be buffer local | ||
| 557 | ;(defvar image-transform-height 100);;nil should mean 100% | ||
| 558 | ;;the interface could rather be: | ||
| 559 | (defvar image-transform-resize | ||
| 560 | nil | ||
| 561 | "values: fit-height number=scale nil=scale100% TODO fit-width fit-page" | ||
| 562 | ) | ||
| 563 | |||
| 564 | ;;TODO 0 90 180 270 degrees are the only reasonable angles here | ||
| 565 | ;;otherwise combining with rescaling will get very awkward | ||
| 566 | (defvar image-transform-rotation 0.0) | ||
| 567 | |||
| 568 | ;;then it would be nice with a bunch of globals like: | ||
| 569 | ;; image-transform-always-resize values: 'fit-height nil=100% number=scale TODO 'fit-width 'fit-page | ||
| 570 | ;; image-transform-always-rotate value: angle | ||
| 571 | |||
| 572 | (defun image-transform-properties (display) | ||
| 573 | (let* | ||
| 574 | ((size (image-size display t)) | ||
| 575 | (height | ||
| 576 | (cond | ||
| 577 | ((and (numberp image-transform-resize) (eq 100 image-transform-resize)) | ||
| 578 | nil) | ||
| 579 | ((numberp image-transform-resize) | ||
| 580 | (* image-transform-resize (cdr size))) | ||
| 581 | ((eq image-transform-resize 'fit-height) | ||
| 582 | (nth 3 (window-inside-pixel-edges))) | ||
| 583 | ))) | ||
| 584 | `(,@(if height (list :height height)) | ||
| 585 | ,@(if (not (equal 0.0 image-transform-rotation)) | ||
| 586 | (list :rotation image-transform-rotation)) | ||
| 587 | ))) | ||
| 588 | |||
| 589 | (defun image-transform-set-scale (scale) | ||
| 590 | (interactive "nscale:") | ||
| 591 | (image-transform-set-resize (float scale))) | ||
| 592 | |||
| 593 | (defun image-transform-fit-to-height () | ||
| 594 | (interactive) | ||
| 595 | (image-transform-set-resize 'fit-height)) | ||
| 596 | |||
| 597 | (defun image-transform-set-resize (resize) | ||
| 598 | (setq image-transform-resize resize) | ||
| 599 | (image-toggle-display-image)) | ||
| 600 | |||
| 601 | (defun image-transform-set-rotation (rotation) | ||
| 602 | (interactive "nrotation:") | ||
| 603 | (setq image-transform-rotation (float rotation)) | ||
| 604 | (image-toggle-display-image)) | ||
| 605 | |||
| 537 | (provide 'image-mode) | 606 | (provide 'image-mode) |
| 538 | 607 | ||
| 539 | ;; arch-tag: b5b2b7e6-26a7-4b79-96e3-1546b5c4c6cb | 608 | ;; arch-tag: b5b2b7e6-26a7-4b79-96e3-1546b5c4c6cb |