Overview -------- This canvas test frame is for checking the behavior of the scrollbars. Canvas scrollbars work in one of two modes: 1) Managing: the scrollbar determines the size and offset of the canvas's drawing area. 2) Non-managing: the scrollbars are simply placed next to the canvas; the canvas's size and offset are not affected by the scrollbar values. In the test frame, the top canvas is initially unmanaged, and the bottom is managed. An HVCanvas has both horizontal and vertical scrollbars, but the scrollbars are initially disabled. Clicking the "Enable Vertical" checkbox enables the vertical scroll. A VCanvas has only a vertical scrollbar; clicking "Enable Horizontal" in this case has no effect. When a canvas is managed by its scrollbars and a scrollbar is missing in a particular direction, it should act the same as an unmanaged canvas in that direction. On each canvas, the following are painted at 0,0: * The name of the canvas * Three values per scroll bar, for UNMANAGED canvases: - The current value of the scroll - The maximum value of the scroll - The page step of the scroll These should all be 0 for MANAGED canvases and for disabled directions * Two size measurements: - The client size of the canvas - The drawing area of the canvas These should be the same for UNMANAGED canvases/directions * Two lines showing what each `virtual boundary' of the canvas would be if it is managed and the scrollbar is enabled. (Initially, the bottom canvas's boundaries are probably beyond the visible region.) When the canvas is managed with a vertical scrollbar, the bottom boundary line might not be visible, i.e., it might be clipped - but it must be clipped exactly in that case. As the scroll is changed for the managed canvas, the information will move, because the scrolls automatically adjust the offset of the canvas. For the unmanaged canvas, the information is always visible in the same place; it is just updated. The top's scrollbars have a range of 10 and a page step of 3. The bottom's scrollbars have a range of 20 and a page step of 3 (although the page step is sometimes ignored for a managed canvas). In managed mode: * In the bottom canvas, one vertical scroll step is mapped to 10 pixels and one horizontal step to 25 pixels, making the virtual area 200 pixels high and 500 pixels wide. When the "Small" checkbox is checked, the range is changed to 2 instead of 20, making the virtual size 20 high by 50 wide. * In the bottom canvas, one vertical or horizontal scroll step is mapped to 1 pixel, making the virtual area 10x10. Initially, the top canvas is unmanaged and the bottom is managed. Checking the "swap" checkbox makes the top canvas unmanaged and the bottom canvas managed. The steps below assume an HVCanvas. Don't resize the window before starting the steps. HVCanvas Steps -------------- Enable vertical scroll. The scroll should be at position 1 for both canvases. The bottom canvas should be scrolled up 10 pixels. The displayed info should change: ------------------------------------------- | Unmanaged Scroll | | V: p: 1 r: 10 g: 3 H: 0 0 0 | | Client: x Virtual: x | ; for some and ------------------------------------------- | Automanaged Scroll | ; <- actually, scrolled up | V: p: 0 r: 0 g: 0 H: 0 0 0 | ; all zero for managed | Client: x Virtual: x 200 | ; within 1 of ------------------------------------------- (You might not be able to read 200 in the lower right.) Make the window slightly wider. Make sure the gets bigger to reflect the new width of the canvases. Set the bottom canvas's vertical scroll to 0. The "Automanaged Scroll" should scroll back down into the original location. Scroll the bottom canvas's vertical scroll to its maximum value (which is less than 10) You may see the bottom border close to the bottom edge of the canvas. Adjust the top canvas's scroll, and watch the `p' value change each time. The maximum value is 10. Use the `page up/down' areas and make sure the `p' value changes by 3. Turn off the vertical scroll. The bottom canvas's image should snap back to its original place. All the `V:' values in the top should return to zeros. Perform the above steps for horizontal scrolling. Turn on both vertical and horizontal scrolling. You should see the obvious combined effect. In particular, the bottom canvas's text should be scrolled both up and to the left. Move all scrolls to 1 step beyond the smallest setting. Make the frame larger. The top canvas's scrolls should still have 10 steps, but the bottom canvas's scrolls will have fewer steps, reflecting the fact that less scrolling is needed to see the same virtual area. Test the bottom canvas's scrolls to ensure that the maximum values of the scrolls show the edges of the canvas's virtual area. Make the frame large enough to see the whole bottom canvas's virtual area. The scrollbars should become disabled in both directions. Make the frame smaller again. The bottom canvas's scrolls should adjust correctly. Make the frame small enough that all scrollbars are active. Move all scrolls to 1 step beyond the smallest setting. Check "swap". Now, the top canvas is managed and the bottom canvas is unmanaged. But the top canvas's area is so small that its scrollbars are always disabled. (It may also be clipped to the tiny 10x10 box.) The bottom canvas's scrollbars should now act the top ones used to: there are 20 steps in each direction and the `V:' and `H:' values change as the scrolls are moved. Uncheck "swap". The scrollbars should all go back to the 1 position. The bottom canvas should be scrolled in the usual way. Check "small". The top canvas should be unaffected. The bottom canvas should scroll back to 0,0, the scrollbars should be disabled, and a 50x20 box should be drawn in the upper left (or the entire canvas is clipped to that box). Check "swap". The bottom canvas should not be clipped. Check "swap". The bottom canvas might be clipped again. Uncheck "small". The bottom canvas should not be clipped. Check "small" and disable vertical scrolls. The bottom canvas should be clipped horizontally or the boundary drawn at a small offset from the left. Enable vertical and disable horizontal. The bottom canvas will be narrowly clipped of have a short boundary from the top. HCanvas Steps -------------- A vertical scrollbar should not be visible at all. Check both "Enable Vertical" and "Enable Horizontal". Verify that the canvases act exactly like an HVCanvas with vertical scrolls disabled. VCanvas Steps -------------- Transpose the approve appropriately Canvas Steps ------------ No scrollbars, checking the enabler boxes has no effect. Click "small" and make sure the bottom canvas is not clipped.