Factor handbook > UI framework > Building user interfaces

Next:Gadget geometry


Class description
An object which displays itself on the screen and acts on user input gestures. Gadgets have the following slots:
pref-dim - a cached value for pref-dim; do not read or write this slot directly.
parent - the gadget containing this one, or f if this gadget is not part of the visible gadget hierarchy.
children - a vector of child gadgets. Do not modify this vector directly, instead use add-gadget, add-gadgets, unparent or clear-gadget.
graft-state - a pair of boolean values that represent the current graft state of the gadget and what its next state will become.
orientation - an orientation specifier. This slot is used by layout gadgets.
layout-state - stores the layout state of the gadget. Do not read or write this slot directly, instead call relayout and relayout-1 if the gadget needs to be re-laid out.
visible? - a boolean indicating if the gadget should display and receive user input.
root? - if set to t, layout changes in this gadget will not propagate to the gadget's parent.
clipped? - a boolean indicating if clipping will be enabled when drawing this gadget's children.
interior - an implementation of the UI pen protocol
boundary - an implementation of the UI pen protocol
model - a model or f; see Implementing controls

Gadgets subclass the rect class, and thus all instances have loc and dim instances holding their location and dimensions.

Other classes may inherit from gadget in order to re-implement generic words such as draw-gadget* and user-input*, or to define gestures with set-gestures.


TUPLE: gadget < rect
pref-dim parent children
{ orientation initial: { 0 1 } } focus
{ visible? initial: t } root? clipped? layout-state
{ graft-state initial: { f f } } graft-node interior
boundary model ;