View (Graphics)
Sets new physical coordinate mapping and clipping region for graphics keywords
Syntax
`
View
View ( x1, y1 )-( x2, y2 ) [ [, fill_color ] [, border_color ] ]
View Screen ( x1, y1 )-( x2, y2 ) [ [, fill_color ] [, border_color ] ]
`
Parameters
`x1` `As Integer`, `y1` `As Integer`
The horizontal and vertical offsets, in pixels, of one corner of the viewport relative to the top-left corner of the screen.
`x2` `As Integer`, `y2` `As Integer`
The horizontal and vertical offsets, in pixels, of the opposite corner of the viewport relative to the top-left corner of the screen.
`fill_color` `As ULong`
The color to fill the new viewport.
`border_color` `As ULong`
The color of the border to draw around the new viewport.
Description
The viewport, or clipping region, is a rectangular area of the graphics screen, outside of which no graphics drawing will be done. That is, only graphics drawing done within this area will be shown. A graphics screen must be created with `Screen (Graphics)` or `ScreenRes` before calling `View` or `View Screen`.
The first statement (`View`) sets the viewport to encompass the entire screen, which is the default viewport for a new graphics screen.
The second and third statements (`View` `parameters` and `View Screen` `parameters`) both allow a new viewport to be defined. The indicated effects for each parameter only occur if that parameter is specified:

- The corners of the viewport are specified by the `x1`, `y1`, `x2` and `y2` parameters.
- `fill_color` and `border_color` are both in the format accepted by `Color`.
- The second statement (`View` `parameters`) modifies the coordinate mapping of the graphics screen such that coordinates specified for graphics drawing statements and procedures are relative to the top-left corner of the viewport.
- The third statement (`View Screen` `parameters`) modifies the coordinate mapping of the graphics screen such that coordinates specified for graphics drawing statements and procedures are relative to the top-left corner of the screen.
- In both cases no new scale factor is applied (see `Window` for that).

Example
`
Screen 12
Dim ip As Any Ptr
Dim As Integer x, y
'simple sprite
ip = ImageCreate(64,64)
For y = 0 To 63
For x = 0 To 63
PSet ip, (x, y), (x\4) Xor (y\4)
Next x
Next y
'viewport with blue border
Line (215,135)-(425,345), 1, bf
View (220,140)-(420,340)
'move sprite around the viewport
Do
x = 100*Sin(Timer*2.0)+50
y = 100*Sin(Timer*2.7)+50
ScreenSync
ScreenLock
'clear viewport and put image
Cls 1
Put (x, y), ip, PSet
ScreenUnlock
Loop While Inkey = ""
ImageDestroy(ip)
`
Differences from QB

- QBASIC preserves the `WINDOW` coordinate mapping after subsequent calls to `VIEW`.
- FreeBASIC's current behavior is to preserve the `WINDOW` coordinates after calls to `VIEW`, or when working on images, meaning that the coordinate mapping may undergo scaling/translations if the viewport changes. (If a `WINDOW` hasn't been set, there is no coordinate mapping, and so it doesn't change after calls to `VIEW`.) The behavior may change in future, but consistent behavior can be assured over inconstent viewport coordinates by re-calling `WINDOW` whenever you change the `VIEW`.

See also

- `View Print`
- `Screen (Graphics)`
- `Window`
- `PMap`