The
define-command
macro defines an alias for a mouse or keyboard gesture that can be used in the input model of an output pane.
The macro
define-command
defines an alias for a mouse or keyboard gesture that can then be used in output-pane's input models. The
name
is the name of the alias and the
gesture
is one of the gestures accepted by output-pane. The
translator
is a function that gets passed the arguments that would be passed to the callback, and returns a list of arguments to be passed to the callback along with the output-pane (which will be the first argument). The
host
indicates which platforms this gesture should apply for (it defaults to all platforms).
For a full description of the gesture syntax, see output-pane.
Firstly, here is an example of defining a command which maps onto a gesture.
(defun gesture-callback (output-pane x y)
(capi:display-message
"Pressed ~S at (~S,~S)"
output-pane x y))
(capi:define-command :select (:button-1 :press))
(capi:contain (make-instance
'capi:output-pane
:input-model '((:select
gesture-callback))))
Here is a more complicated example demonstrating the use of translator to affect the arguments passed to a callback.
(capi:define-command
:select-object (:button-1 :press)
:translator #'(lambda (output-pane x y)
(let ((object
(capi:pinboard-object-at-position
output-pane x y)))
(when object
(list object)))))
(defun object-select-callback (output-pane
&optional object)
(when object (capi:display-message
"Pressed on ~S in ~S"
object output-pane)))
(setq pinboard
(capi:contain (make-instance
'capi:pinboard-layout
:input-model '((:select-object
object-select-callback)))))
(make-instance 'capi:item-pinboard-object
:text "Press Me!"
:parent pinboard
:x 10 :y 20)
(make-instance 'capi:line-pinboard-object
:parent pinboard
:start-x 20 :start-y 50
:end-x 120 :end-y 150)
There is a further example in the file
capi/output-panes/commands.lisp
.