README
/* $XConsortium: README /main/3 1996/07/15 14:11:26 drk $ */

This directory contains the sources of the Dog widget, the Square widget,
and the dogs demo.

DOG WIDGET
----------
The Dog widget demonstrates how to subclass a primitive widget which
will remain binary compatible with future versions of Motif. It uses
XmResolvePartOffsets(), and associated macros, and implements all
the recommendations in the XmResolvePartOffsets manpage.

The Dog widget is a subclass of XmPrimitive. It can bark and wag its
tail. If you want more exotic tricks - feel free to subclass it, or
replace up.bm, down.bm and bark.bm with more interesting bitmaps.

It has the following resources:

	DogNwagTime - time in milliseconds between each wag.
	DogNbarkTime - time in milliseconds the bark graphic is displayed.
	DogNbarkCallback - callback called by the bark action.

It has the following translations:

	osfActivate/Return/Space/MB1 = Bark
	W/MB2 = Wag tail.
	S/Shift-MB2 = Stop wagging tail.
	osfHelp = Help

SQUARE WIDGET
-------------
The Square widget demonstrates how to subclass a constraint widget which
will remain binary compatible with future versions of Motif. It uses
XmResolveAllPartOffsets(), and associated macros, and implements all
the recommendations in the XmResolveAllPartOffsets manpage.

The Square Widget is a subclass of XmBulletinBoard. It forces its children
to be square using a constraint resource.

It has one resource:

	SquareNmajorDimension - determines which dimension will be used
				for the new size of the child. Values are
				SquareWIDTH or SquareHEIGHT.
	
It has one constraint resource:

	SquareNmakeSquare -	determines whether the child is forced
				to be square or set to its preferred size.


DOGS DEMO
---------
The dogs demo uses the Dog and Square widgets. It illustrates how
to incorporate new widgets into UIL source, using the user_defined
function.

It allows you to dynamically change the DogNwagTime and SquareNmakeSquare
resources.

If you have a machine with any sound generation features at all, you may
want to change the bark callback to something better than XBell().