[mcclim-cvs] CVS mcclim/Examples
thenriksen
thenriksen at common-lisp.net
Mon Apr 14 16:46:28 UTC 2008
Update of /project/mcclim/cvsroot/mcclim/Examples
In directory clnet:/tmp/cvs-serv15385/Examples
Modified Files:
demodemo.lisp
Added Files:
image-viewer.lisp
Log Message:
Converted MCCLIM-IMAGES to CLIM 2.2 bitmap functions (with extensions).
Includes new demo application.
--- /project/mcclim/cvsroot/mcclim/Examples/demodemo.lisp 2007/02/05 03:26:28 1.19
+++ /project/mcclim/cvsroot/mcclim/Examples/demodemo.lisp 2008/04/14 16:46:28 1.20
@@ -67,6 +67,7 @@
;(make-demo-button "Colorslider" 'colorslider)
(make-demo-button "D&D Translator" 'drag-test)
(make-demo-button "Draggable Graph" 'draggable-graph-demo)
+ (make-demo-button "Image viewer" 'image-viewer)
(make-pane 'push-button
:label "Font Selector"
:activate-callback
--- /project/mcclim/cvsroot/mcclim/Examples/image-viewer.lisp 2008/04/14 16:46:28 NONE
+++ /project/mcclim/cvsroot/mcclim/Examples/image-viewer.lisp 2008/04/14 16:46:28 1.1
;;; -*- Mode: Lisp; Package: CLIM-DEMO -*-
;;; (c) copyright 2008 by
;;; Troels Henriksen (athas at sigkill.dk)
;;; This library is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU Library General Public
;;; License as published by the Free Software Foundation; either
;;; version 2 of the License, or (at your option) any later version.
;;;
;;; This library is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;;; Library General Public License for more details.
;;;
;;; You should have received a copy of the GNU Library General Public
;;; License along with this library; if not, write to the
;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;;; Boston, MA 02111-1307 USA.
;;; A simple program for displaying images of formats known to McCLIM.
(in-package :clim-demo)
(defclass image-viewer-gadget (value-gadget)
()
(:documentation "An abstract gadget for displaying images. The
value of the gadget is the image being displayed.")
(:default-initargs :value nil))
(defmethod (setf gadget-value) :after (new-value (gadget image-viewer-gadget)
&key &allow-other-keys)
(handle-repaint gadget (or (pane-viewport-region gadget)
(sheet-region gadget))))
(defclass image-viewer-pane (image-viewer-gadget basic-gadget)
()
(:documentation "A concrete gadget for displaying images. The
value of the gadget is the image being displayed."))
(defmethod handle-repaint ((pane image-viewer-pane) region)
(declare (ignore region))
;; Clear the old image.
(with-bounding-rectangle* (x1 y1 x2 y2) (sheet-region pane)
(draw-rectangle* (sheet-medium pane) x1 y1 x2 y2 :ink +background-ink+))
(when (gadget-value pane)
;; Try to ensure there is room for the new image.
(change-space-requirements pane
:height (pattern-height (gadget-value pane))
:width (pattern-width (gadget-value pane)))
;; Draw the new one, if there is one.
(handler-case (draw-pattern* pane (gadget-value pane) 0 0)
(error ()
(with-text-style (pane (make-text-style nil :italic nil))
(draw-text* pane (format nil "Error while drawing image")
0 0 :align-y :top))))))
(define-application-frame image-viewer ()
((%image-pathname :accessor image-pathname
:initarg :image-pathname
:initform nil))
(:menu-bar t)
(:panes
(viewer (make-pane 'image-viewer-pane))
(interactor :interactor
:text-style (make-text-style :sans-serif nil nil)
:min-height 100))
(:layouts
(default (vertically ()
(4/5 (labelling (:label "Image")
viewer))
(1/5 interactor))))
(:top-level ((lambda (frame)
(default-frame-top-level frame)))))
(define-image-viewer-command (com-display-image :name t :menu t)
((image-pathname 'pathname
:default (user-homedir-pathname) :insert-default t))
(if (probe-file image-pathname)
(let* ((type (funcall (case (readtable-case *readtable*)
(:upcase #'string-upcase)
(:downcase #'string-downcase)
(t #'identity))
(pathname-type image-pathname)))
(format (find-symbol type (find-package :keyword)))
(viewer (find-pane-named *application-frame* 'viewer)))
(handler-case (progn
(setf (gadget-value viewer)
(make-pattern-from-bitmap-file image-pathname :format format)
(image-pathname *application-frame*) image-pathname)
(format t "~A image loaded succesfully" type))
(unsupported-bitmap-format ()
(format t "Image format ~A not recognized" type))))
(format t "No such file: ~A" image-pathname)))
(defun image-viewer (&key (new-process t))
(flet ((run ()
(let ((frame (make-application-frame 'image-viewer)))
(run-frame-top-level frame))))
(if new-process
(clim-sys:make-process #'run :name "Image viewer")
(run))))
More information about the Mcclim-cvs
mailing list