Temporarily replaces an output pane's display-callback such that it draws from the cached display and optionally adds further drawing.
start-drawing-with-cached-display pane temp-display-callback &key automatic-cancel resize-automatic-cancel user-info from-display-p
An output-pane.
A function designator, or nil
.
nil
, t
or a designator for a function of one argument.
nil
, t
or a designator for function of one argument.
A Lisp object.
A boolean.
The function start-drawing-with-cached-display
caches the display of the output pane
pane
(by calling output-pane-cache-display with
pane
and
from-display-p
, which defaults to nil
), remembers the current
display-callback
, and replaces the
display-callback
with a callback that first uses the cached display to redraw the area and then uses the
temp-display-callback
(if non-nil) to draw additional arbitrary drawing.
temp-display-callback
has the same signature as the
display-callback
of
pane
:
temp-display-callback
pane
x
y
width
height
The arguments that will be passed to the temp-display-callback are determined by calls to update-drawing-with-cached-display or update-drawing-with-cached-display-from-points. These functions should be called whenever the temporary display needs to be updated.
The effect of start-drawing-with-cached-display
is undone by any call to output-pane-free-cached-display (implicit or explicit). Since output-pane-cache-display, and hence start-drawing-with-cached-display
itself, makes an implicit call to output-pane-free-cached-display, it is not essential to call output-pane-free-cached-display between calls. However, the cached display can be quite large, so it is normally better to call output-pane-free-cached-display as soon as the cache is no longer needed.
If
automatic-cancel
is true then the cached drawing is automatically cancelled (by an implicit call to output-pane-free-cached-display) when the pane loses the focus or is resized. This is useful when a cached display is used temporarily, for example during drag and drop. If the cached display needs to survive longer, pass :automatic-cancel nil
. The default value of
automatic-cancel
is true. If
automatic-cancel
is a designator for function, it is called with
pane
after the cached displayed is canceled.
resize-automatic-cancel , which defaults to automatic-cancel , has the same effect as as automatic-cancel but controls what happens when the window is resized rather than when it loses the focus.
user-info is an arbitrary value which will be returned by calls to output-pane-cached-display-user-info and the call to output-pane-free-cached-display. It is useful for keeping information during an operation that uses the cached display, for example drag and drop.
:press
input model handler, with a matching output-pane-free-cached-display call in the :release
handler, to temporarily draw something on top of the permanent display while the user drags the mouse. start-drawing-with-cached-display
and its associated functions (update-drawing-with-cached-display and update-drawing-with-cached-display-from-points) use the cached display functions (output-pane-cache-display, output-pane-draw-from-cached-display, and output-pane-free-cached-display). Calling the cached display functions in the scope of start-drawing-with-cached-display
and output-pane-free-cached-display would confuse them.
This file shows how to use start-drawing-with-cached-display
in the :press
input model handler:
(example-edit-file "capi/output-panes/cached-display")
output-pane-cache-display
output-pane-free-cached-display
output-pane-cached-display-user-info
redraw-drawing-with-cached-display
update-drawing-with-cached-display
update-drawing-with-cached-display-from-points
Transient display on output-pane and subclasses
CAPI User Guide and Reference Manual (Macintosh version) - 3 Aug 2017