CLIM mail archive

[Prev][Next][Index][Thread]

CLIM incremental redisplay question



In my CLIM 1.0 application I have objects that consist of multi-level
presentation displayer types of object.  Each object in each layer holds
a list of pointers to inferior lower level objects (which may also have
pointers to other lower level objects. All of these levels are
simultaneously displaying the appropriate graphical information on the
screen. ie:  In CLIM style their display form from the top level is
(they are cached and uniquely identified but I'm ignoring that to
shorten the example.  Also they hold pointers to their respective
output-records):

(updating-output (display-pane)
  (loop for i in top-level-obj-list do
    (setf (my-output-record i)   ;generic accessing method to point to record
	  (updating-output (display-pane ...)
    	    (with-output-as-presentation (:stream display-pane :object i)
      	       (draw-something i)
     	       (loop for j in list-of-sub-objects do
		 (setf (my-output-record j)
		       (updating-output (display-pane ...)
	   		(with-output-as-presentation
			  (:stream display-pane :object j)
	      		  (draw-them j)
	      	 (loop for k in list-of-sub-sub-objects do
		    (setf (my-output-record k)
			  (updating-output (display-pane ...)
		    	     (with-output-as-presentation
				(:stream display-pane :object k)
				(draw-each-lowest-level-thing k))))))))))

Each layer of objects may change by removal and addition of more sub-level objects and each object in each layer may change internally
(and graphically).   I want to be able to selectively redisplay, add & erase children records or their respective parents from any level and have that automatically get carried on down into lower children levels as I thought CLIM would do.  CLIM seems to change the records on me without letting me know about it so for example if I tell an object from list-of-sub-objects to redisplay its output-record it says it doesn't exist in the output-record history tree.  What gives?  I also noticed that CLIM doesn't output my draws in the same order as my code dictates causing me further headaches  (How can I force it no not buffer output?)
Also I selectively add and remove branches from the output history from other locations in my code (Do I have to contain all of my display stuff within these updating-output record forms?).  Finally, speed has become an issue. There could be up to 20k presentation objects total on my display-pane.  I'm trying to keep display speed up while utilizing the presentation mechanism for my application's accept loop.  Should I consider trashing it and tracking the mouse and faking presentations on my own?  Any suggestions?

0,,

Follow-Ups:

Main Index | Thread Index