A picmenu
(picture menu) is analogous to a menu, but involves a
user-defined picture containing sensitive spots or “buttons”. The test
function (wteste)
shows an example of a picmenu
. A
picmenu
is created by:
(picmenu-create buttons width height drawfn
&optional title dotflg w:window x y perm flat font boxflg)
If a picmenu is to be used more than once, the common parts can be made
into a picmenu-spec
and reused:
(picmenu-create-spec buttons width height drawfn
&optional dotflg font)
(picmenu-create-from-spec spec:picmenu-spec
&optional title w:window x y perm flat boxflg)
width
and height
are the size of the area occupied by the
picture. (drawfn w x y)
should draw the picture at the offset
x y
. Note that the draw
utility can be used to make the
drawing function, including picmenu
buttons. dotflg
is
non-nil
if it is desired that small boxes be automatically added
to the sensitive points when the picture is drawn. boxflg
is
non-nil
if a box is to be drawn around the picmenu when the
picture is drawn (this is only needed for flat picmenus). If perm
is non-nil, the drawing program is not called when a selection is to be
made, so that an external program must draw the picmenu
; this
avoids the need to redraw a complex picture. The remaining arguments are
as described for menus.
Each of the buttons
in a picmenu is a list:
(buttonname offset size highlightfn unhighlightfn)
buttonname
is the name of the button; it is the value returned
when that button is selected. offset
is a vector (x y)
that gives the offset of the center of the button from the lower-left
corner of the picture. The remainder of the button list may be omitted.
size
is an optional list (width height)
that gives the
size of the sensitive area of the button; the default size is
(12 12)
. (highlightfn w x y)
and
(unhighlightfn w x y)
(where (x y)
is the center of the
button in the coordinates of w
) are optional functions to
highlight the button area when the cursor is moved into it and
unhighlight the button when the cursor is moved out; the default is to
display a box of the specified size
.
(picmenu-select m &optional inside)
If the picmenu
is not flat
, its window should be destroyed
following the selection using menu-destroy
.
(picmenu-item-position m name &optional location)
(picmenu-delete-named-button m name:symbol)
This deletes a button from a displayed picmenu
. The set of
deleted buttons is reset to nil
when the picmenu is drawn.