[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