CLIM mail archive


Questions on Pixmaps & Output Recordin

    Date: Tue, 26 Oct 1993 18:24 EDT
    From: Land Fleming <>

    I'm working in Genera 8.3 on Symbolics, CLIM 2.0

    I would like to be able to have an output record that displays a fancy pixmap. 
    On my 1st attempt to do this I thick-headedly wrote:

      (with-output-to-output-record (...)
	    (copy-from-pixmap ...))

    This just produces an empty record of 0 area. I later noticed that the manual 
    explicitly states (as Scott McKay would say) that pixmaps cannot be captured by output 
    recording. This seems to be a rather severe limitation on the usefulness of pixmaps.

Symbolics will be releasing a new version of CLIM (heck, maybe we'll call
it CLIM 2.1) in the next few months.  In addition to the many bugfixes,
it will also include DRAW-PIXMAP[*], which is exactly what you want.

I have to say that your proposed solution is cool and hairy, but it's
not really right.  A pixmap output record is simply a leaf record, and
not different from, say, a line or string output record.

    I decided to improvise my own solution, based on defining a
    Standard-Sequence-Output-Record subclass, "Pixmap-Record", with a slot called "pixmap", 
    and a Replay-Output-Record :AFTER method that simply copies the pixmap in the pixmpa slot 
    to the window every time it is called. This worked to a limited extent. However, I found 
    that the stream-replay method does not really replay all output records in the window, so
    any time a function calls stream-replay or window-refresh,
    or any time the user does a <function> <refresh>, the pixmaps disappear.

    To get around this, I then wrote an :AFTER method on stream-replay that walks down 
    the output history tree of an application pane calling Replay on output records. 
    Since not all of my application panes will display pixmaps, I defined a subclass of 
    CLIM:Application-Pane called "Pane-with-Pixmap-Records," as the method specializer so that
    this class is only kind of pane that will incur the overhead of replaying each output record.
    I also intend to define a subclass of CLIM:Standard-Presentation, say 
    "Presentation-With-Pixmap-Records", to further restrict the tree walks to only those
    presentation that are known to have Pixmap-Records. 

    This appoach works, although there is still one hitch: the instances of 
    Pane-with-Pixmap-Records created in the application frame definition by calling 
    make-pane will not take the :SCROLL-BARS argument. Apparently, :SCROLL-BARS is not 
    actually an CLOS initarg and it is only accepted by the built-in classes of CLIM panes.

    Based on all this I have a three questions (in order of increasing generality):
    (1) Is there any way to get scroll bars and other pane options for programmer-defined
    pane subclasses such as my Pane-with-Pixmap-Records?

MAKE-PANE is the raw, pane creating macro.  :SCROLL-BARS is only
applicable to the MAKE-CLIM-STREAM-PANE macro.  It causes a separate
pane to be created that holds the scroll bar(s) and the viewport.

    (2) Is there a better approach to integrating pixmaps with CLIM's output recording system
    than the one I've outlined here?


    (3) Are there any plans to extend CLIM to do this integration?


    Since I was able to come up with a half-baked integration scheme in a few hours, it seems to 
    me that it would be no great undertaking for CLIM's authors to do a fully-baked job and 
    that a great many users would want such capabilities. 

I will send you the DRAW-PIXMAP[*] code if it is important that you
have it now.


Main Index | Thread Index