Yes, MCL exposes the Mac's native view-refresh mechanism, for better
or worse...
There are two ways to deal with this. You've described the first,
which is to use the view redraw mechanism to "replay" the drawing
you've done in the view so far.
The other way, which is identical to the BMP window you describe, is
to use an offscreen bitmap. Your drawing goes to the bitmap, and the
view redraw call just BLTs the drawing into the view. I think you'll
be able to find such code already written on the MCL CD-ROM; if not,
try asking on comp.lang.lisp.mcl.
Dave
______________________________ Reply Separator _________________________________
Subject: Re: Re(2): ACL to MCL
Author: Devin Hosea <alumni.Princeton.EDU at dhosea> at SMTPLINK
Date: 10/19/96 11:32 PM
[snip]
That is exactly the major limitation to the MCL graphics package: THERE IS
NOTHING LIKE A BMP WINDOW, e.g. a window which "remembers" what you have
drawn to it and is able to refresh, redisplay, etc. The only way to
accomplish this is to actually record (in your own code) all actions taken
to the window, then erase it, then redraw everything. This is something
about MCL which is very primitive and very disturbing when trying to do a
port.
To discover this, try creating a window in MCL, and then use (draw-rectangle
to put a black rectangle in the corner. Then drag something over it, e.g.
another window, and it will literally erase the rectangle. There is no way
to make it reappear, except to modify the actual method for the window so
that a black box is drawn in the window whenever it is redisplayed. MCL
makes absolutely no 'note' of the fact that you have drawn something into the
window. In a sense, everything must be a piece of the window. Fortunately,
the Macintosh, not the MCL, will automaticall refresh the window everytime it
is screwed with, but only with what MCL thinks is supposed to be in the
window. The only way to do this is to keep your own record of what is
supposed to be in the window and make sure that the resfresh-window method
references this database/list/whatever each time it tries to refresh.
[snip]