XmNinputCallback@XmCR_INPUT@ButtonPress, ButtonRelease, @@KeyPress, KeyRelease
_ A common convention we've included in this program is the double use of the drawing_area_callback()
function. This technique is known as function overloading, since the same function is used by more than one source.
We are using the routine as the input callback for the DrawingArea widget, as well as the activate callback for the
PushButton gadget. Whenever the PushButton is activated, the callback function is invoked and passed an
XmPushButtonCallbackStruct with the reason field set to XmCR_ACTIVATE.
It is beyond the scope of this book to discuss at length or even introduce the use of Xlib; for that, see Volume One,
Xlib Programming Manual. However, there are a couple of details concerning the use of Xlib functions that are
noteworthy. For efficiency in use of the X protocol, Xlib drawing calls typically do not carry a lot of information
about the drawing to be done. Instead, drawing characteristics such as the foreground and background colors, fill style,
line weight, and so on, are defined in a graphics context (GC), which is cached in the X server. Any drawing function
that wishes to use a particular GC must include the handle returned by a GC creation call.
If many different routines are going to use the same GC, the programmer should try to make the handle to it generally
available. The natural tendency is to declare the GC as a global variable. However, as a program gets large, it is easy
to get carried ...