There are two sets of two basic functions, that roughly have the following signatures. First, the ones for primitives:
PreferredSize( Widget w °/* input */° ); Layout( Widget w °/* input with side effects */° );
and for composites:
PreferredSize( Widget w, °/* input */° Widget instig, °/* input */° XtWidgetGeometry *instig_request, °/* input */° XtWidgetGeometry *preferred_geom °/* output */° ); Layout( Widget w, °/* input */° Widget instig, °/* input */° XtWidgetGeometry *instig_request, °/* input/output */° XtWidgetGeometry *preferred_geom °/* input */° );
For primitives, an example of the function to calculate the preferred size is XmCalcLabelDimensions(). The equivalent layout procedure would be the resize() method. Regardless, your layout function or preferred-size function can be modified for different behavior as appropriate to your class.