### 17.4 Characteristics of Graphics Output

Two characteristics of graphics output are so useful that they are supported uniformly by all graphics devices: drawing mode and line style. A third characteristic, color, is equally useful (if not more so), but implementation restrictions prohibit a uniform interface.

The drawing mode, an exact integer in the range `0` to `15` inclusive, determines how the figure being drawn is combined with the background over which it is drawn to generate the final result. Initially the drawing mode is set to “source”, so that the new output overwrites whatever appears in that place. Useful alternative drawing modes can, for example, erase what was already there, or invert it.

Altogether 16 boolean operations are available for combining the source (what is being drawn) and the destination (what is being drawn over). The source and destination are combined by the device on a pixel-by-pixel basis as follows:

    Mode    Meaning
    ----    -------
    0       ZERO [erase; use background color]
    1       source AND destination
    2       source AND (NOT destination)
    3       source
    4       (NOT source) AND destination
    5       destination
    6       source XOR destination
    7       source OR destination
    8       NOT (source OR destination)
    9       NOT (source XOR destination)
    10      NOT destination
    11      source OR (NOT destination)
    12      NOT source
    13      (NOT source) OR destination
    14      (NOT source) OR (NOT destination)
    15      ONE [use foreground color]

The line style, an exact integer in the range `0` to `7` inclusive, determines which parts of a line are drawn in the foreground color, and which in the background color. The default line style, “solid”, draws the entire line in the foreground color. Alternatively, the “dash” style alternates between foreground and background colors to generate a dashed line. This capability is useful for plotting several things on the same graph.

Here is a table showing the name and approximate pattern of the different styles. A ‘`1`’ in the pattern represents a foreground pixel, while a ‘`-`’ represents a background pixel. Note that the precise output for each style will vary from device to device. The only style that is guaranteed to be the same for every device is “solid”.

    Style   Name                    Pattern
    -----   -------                 -------
    0       solid                   1111111111111111
    1       dash                    11111111--------
    2       dot                     1-1-1-1-1-1-1-1-
    3       dash dot                1111111111111-1-
    4       dash dot dot            11111111111-1-1-
    5       long dash               11111111111-----
    6       center dash             111111111111-11-
    7       center dash dash        111111111-11-11-

procedure: graphics-bind-drawing-mode graphics-device drawing-mode thunk ¶
procedure: graphics-bind-line-style graphics-device line-style thunk ¶

  These procedures bind the drawing mode or line style, respectively, of graphics-device, invoke the procedure thunk with no arguments, then undo the binding when thunk returns. The value of each procedure is the value returned by thunk. Graphics operations performed during thunk’s dynamic extent will see the newly bound mode or style as current.

procedure: graphics-set-drawing-mode graphics-device drawing-mode ¶
procedure: graphics-set-line-style graphics-device line-style ¶

  These procedures change the drawing mode or line style, respectively, of graphics-device. The mode or style will remain in effect until subsequent changes or bindings.