Drawing+outside+the+window

//by Richard Russell, December 2006//

When you initialise BBC BASIC's output window using **MODE** or **VDU 23,22** not only is the window's size set to the appropriate dimensions but the graphics //viewport// is also initialised to the same area. This is done for reasons of efficiency, so BB4W doesn't waste time drawing graphics outside of the window where they cannot be seen. This is particularly true of statements like **CLG** and **FILL** which could otherwise spend a considerable amount of time unnecessarily clearing or filling large areas outside the window.

However this may not always be what you want. The user can (usually) resize the window by dragging a side or corner, or by clicking on the //maximise// button. In normal circumstances if he does so he will simply reveal areas of black, because the graphics viewport will have prevented anything being drawn in those areas. If you want him to be able to reveal more graphics it is necessary to change the viewport to make it possible to draw there.

In principle this is straightforward, using the **VDU 24** command, but it is quite easy to get the coordinates wrong. Suppose you have selected but you want to be able to draw graphics over an area corresponding to a 1024 x 768 pixel display. Since you can only enlarge BBC BASIC's window by extending it at the //right// or the //bottom// (i.e. the displayed region must be in the //top left corner// of the larger area) this is the situation you end up with:



The shaded area corresponds to the window, with its normal range of graphics coordinates from **0,0** in the bottom left corner to **1278,1022** in the top right corner. The unshaded area corresponds to the maximum size to which the window could be enlarged by the user, assuming a 1024 x 768 display (remember that there are two BBC BASIC graphics coordinates per pixel).

Therefore the appropriate command for enlarging the graphics viewport, to allow drawing over the entire area, is:

code format="bb4w" VDU 24,0;-512;2046;1022; code which might not have been obvious at first sight.

If you prefer that the origin of the graphics coordinates should be at the bottom left corner of the unshaded area you can achieve that using the **ORIGIN** statement:

code format="bb4w" ORIGIN 0,-512 VDU 24,0;0;2046;1534; code