[mcclim-devel] question about display functions and control apps

Timothy Moore moore at bricoworks.com
Fri Jan 7 21:42:15 UTC 2005


On Jan 7, 2005, at 9:50 PM, Paul Werkowski wrote:

>
> | | 1.  Do I just make an event that will translate into setting
> | |     frame-needs-redisplay?
> | |
> |
> | I tried this approach in Lispworks CLIM and it seems to work pretty 
> well.
>
> It is even easier than I thought. Here is a refinement of yesterdays 
> code.
>
> Paul
Very interesting. Does this all "just work" in LispWorks CLIM? Do see 
any weird artifacts with presentation highlighting?

Tim

> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> (in-package :clim-user)
>
> (defclass thing ()
>   ((x :initarg :x)
>    (y :initarg :y))
>   (:default-initargs :x (random 100) :y (random 100)))
>
> (define-application-frame a-test ()
>   ((things :initform nil))
>   (:pointer-documentation nil)
>   (:menu-bar nil)
>   (:panes
>    (p1 :application
>        :width 300 :height 200
>        :end-of-line-action :allow
>        :display-function 'p1df
>        :incremental-redisplay t))
>   (:layouts
>    (default p1)))
>
> (defun p1df (frame pane)
>   (with-output-recording-options (pane :record t)
>     (with-slots (things) frame
>       (dolist (thing things)
>         (with-slots (x y) thing
>           (updating-output (pane :unique-id thing
>                                  :cache-value (list x y)
>                                  :cache-test #'equal)
>             (draw-rectangle* pane x y (+ x 10) (+ y 10) :ink 
> +blue+)))))))
>
> (defvar *frame* nil)
>
> (defun doit ()
>   ;; display A-TEST application
>   (setq *frame* (make-application-frame 'a-test))
>   (run-frame-top-level *frame*))
>
> (defclass my-event (device-event)()
>   (:default-initargs :modifier-state 0))
>
> (defmethod handle-event (client (event my-event))
>   (with-application-frame (frame)
>     (redisplay-frame-pane frame client))))
>
> (defun stuffit (frame)
>   ;; do something to "update the database"
>   (let ((tls (frame-top-level-sheet frame))
>         (pane (frame-standard-output frame)))
>     (with-slots (things) frame
>       (push (make-instance 'thing) things))
>     ;; Inform frame that something has changed
>     (queue-event
>      tls
>      ;; :sheet causes event-handler client to be that
>      (make-instance 'my-event :sheet pane))))
>
>
> _______________________________________________
> mcclim-devel mailing list
> mcclim-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/mcclim-devel




More information about the mcclim-devel mailing list