jain@portia.Stanford.EDU (Deepak Jain) (11/30/89)
A sequence of QuickDraw commands in the Allegro CL for the Macintosh can be recorded in terms of a picture. The object functions `start-picture' and `get-picture' can be used for this purpose. I use these functions to save a picture so that I can play back the sequence of commands later whenever my window is brought to the front, or the screen needs to be refreshed otherwise. The code looks like the following. (defobject *my-windows* *window*) ; Object function to shadow the *window* class functions. (defobfun (window-draw-contents *my-windows*) (when (ask (self) (ownp 'saved-pict)) (ask (self) (draw-picture (ask (self) saved-pict)))) (usual-window-draw-contents)) ; *plan-window* inherits from *my-windows* (defun draw-floor-plan (*plan-window*) ... (ask *plan-window* (start-picture)) ... (draw something in the window using QuickDraw primitives) ... ; Get the picture and save it in a slot of *plan-window* (ask *plan-window* (have 'saved-pict (ask *plan-window* (get-picture)))) (ask *plan-window* (window-draw-contents)) ...) This code runs fine about half the time. At other times I get an error message like the following: Error: Picture for window: #<some object details> is not started While executing: GET-PICTURE and nothing is drawn in the window. I am pretty sure that `start-picture' is indeed executed every time before `get-picture', as I have traced the functions. In view of this the above error really seems strange. What I find even more surprising is that I get the error only at some times and not always. If the same code starts a picture in one instance, it should always start the picture. What am I doing wrong? Can any enlightened soul help? I am using Allegro Common Lisp for the Macintosh, Version 1.2.2. Deepak Jain jain@portia.stanford.edu