CLIM mail archive


Moving and zooming

I am writing some kind of graph-editor.
Because some aspects of the nodes can be changed by the user
(eg, node-label, status like selected,...) I present the nodes
using updating-output and manually redisplay them to
update the changing aspects. I thougt this could be
quite efficient and hope this is a "legal" use
of incremental-redisplay.

When the nodes are moved to another position, I also use 
the function REDISPLAY to move the output-record to the new
position (if the position has changed, any cached output
is invalidated). So far, so good.

I need  commands like "zoom in" and "zoom out".
I implemented them by modifying the medium-transformation of 
the display-pane. Now things are quite confusing, if that's not
the identity transformation.

1. After changing the transformation, I issue an window-erase-viewport
and REDISPLAY all objects. That works ok.
2. When I move an object, the graphic at the old position is
NOT erased --- execept it is positioned at point (0 0), which is mapped to
itself under my pure scaling-transformations.
3. This even happens if I create new objects (output records) under this 
transformation. So moving output records by using REDISPLAY just works
under the identity transform???

4. I'm using tracking-pointer to basically reimplement
but just to move the record along the points of a raster. I'm all confused
by the coordinate systems the output-record uses (well, I should not use
the internal function clim::output-record-set-position*, but what else?),
the one inside the clauses :pointer-motion, :pointer-button-release
with the value of :transformp and the visible position of the mouse on the 
screen (relative to the viewport of the pane, of course).

At the moment, I erase the ouput-record(s) and re-present them after zoom-
and move-operations. 

Besides any helping insight for my simple mind, other approaches to
implement move and zoom functionality in an efficient an CLIM-ish way
are welcome.

Thanks - Stefan.

- Stefan Bernemann   (


Main Index | Thread Index