10.4 Implementing True Application−defined Scrolling
In this section, we pull together what we've learned in this chapter and put it to work to implement
application−defined scrolling. We are going to use an example that displays a large number of individual bitmaps in a
ScrolledWindow, so that the user can view all of the bitmaps by scrolling the window. The intent is to make the
appearance and functionality of the ScrolledWindow mimic the automatic scrolling mode as much as possible.
There are actually several ways to go about writing this program, depending on the constraints that we impose. The
simplest method is to render each bitmap into one large pixmap and use that pixmap as the XmNlabelPixmap for a
Label widget. The Label widget can then be used as the work window for an automatic ScrolledWindow. This design
is similar to most of the other examples of ScrolledWindows used throughout the book. However, we want to add a
constraint such that each incremental scrolling action causes the display to shift by one bitmap cell, so that the top and
left sides of the viewport always show a full bitmap. In other words, no partially−displayed bitmaps are allowed.
Furthermore, when the user drags the slider, we want the display to scroll in cell−increments, not pixel−by−pixel.
The constraints that we just described define the behavior that the List and Text widgets use for their own displays.
Like those widgets, our example program has a conceptual unit size that is represented by the object ...