CLIM mail archive
Date: Wed, 16 Oct 1991 18:20 EDT
I want to have lots of little windows that the user can drag around
and configure any which way. CLIM seems to be organized around a
monolithic application frame with several panes. Panes don't seem
to be able to overlap. One way around this for me would be to define
several application frames and have a top level loop which could
manage them. Is this possible without going outside of CLIM to the
native window system? What would such a top-level function look like?
CLIM application frames use a tiled organization, however, that is simply
a property of how frames lay out their child panes.
Suppose you have an application frame FRAME. Given a set of window edges
(LEFT, TOP, RIGHT, and BOTTOM), you can use CLIM:OPEN-WINDOW-STREAM to
create a new child of FRAME's top level window as follows:
(let* ((parent (clim:frame-top-level-window frame))
(input-buffer (clim:stream-input-buffer parent)))
(open-window-stream :parent main
:left left :top top :right right :bottom bottom
I have assumed that you wish to make the child windows share the input
buffer of the frame, but you may decide otherwise.
It is an oversight that the functions that change the edges of a window
are not part of the exported interface, but you can use
CLIM::BOUNDING-RECTANGLE-SET-EDGES and CLIM::WINDOW-SET-INSIDE-EDGES to
change the "outside" and "inside" edges of a window. (The outside edges
of a window is the amount of space the entire window takes up, including
borders and margin decorations. The inside edges of a window give the
usual space inside the window, that is, the outside edges minus the
amount of space required for borders, margin decorations, and other
marginalia.) You can use these functions to move around windows that
you yourself create, or that are part of the application frame already.
Main Index |