




The graphics state object, holding default parameters for drawing operations on an associated port .
A transform object which determines the coordinate transformation applying to the graphics port. The default value is the unit transform which leaves the port coordinates unchanged from those used by the host window system — origin at top left, X increasing to the right and Y increasing down the screen. Allowed values are anything returned by the transform functions, described in Graphics state transforms.
Determines the foreground color used in drawing functions. The value can be a converted color (result of convert-color), a color name symbol, a color name string or a color spec object. Using converted colors results in better performance, because it saves the system from doing the conversion each time it uses it. The default value is :black. The value :color_highlighttext is useful for drawing text with the system highlighting.
Determines the background color used in functions which draw text such as draw-string when block is true.
On X11/Motif, background also determines the background color used in drawing functions which use a stipple.
Valid values are the same as for 
foreground
. The default value is :white. The value :color_highlight is useful for drawing text with the system highlighting.
Determines the color combination used in the drawing primitives when the 
port
's 
drawing-mode
 is :compatible. Valid values are 0 to 15, being the same logical values as the 
op
 arg to the Common Lisp function boole. The default value is boole-1. Combining pixels with :compatible drawing shows how to use 
operation
.
On X11/Motif 
stipple
 is a 1-bit pixmap ("bitmap") or nil (which is the default value). The bitmap is used in conjunction with the 
fill-style
 when drawing. Here, nil means that all pixels are drawn in the 
foreground
 color. A stipple is not transformed by the 
transform
 parameter. Its origin is assumed to coincide with the origin of the port. The 
stipple
 is tiled across the drawing. 
stipple
 is ignored if a 
pattern
 is given. If no 
fill-style
 is given, or it is specified as :solid, when a 
stipple
 is given, then 
fill-style
 defaults to :opaque-stippled.
Determines how the drawing is done. The value should be one of :solid, :tiled, :opaque-stippled or :stippled. The default value :solid means that the 
foreground
 is used everywhere. :tiled means that the 
pattern
 is repeated over across the drawing.
Additionally on X11/Motif :opaque-stippled means that the 
stipple
 bitmap is used with stipple 1s giving the 
foreground
 and 0s the 
background
. :stippled means that the 
stipple
 bitmap is used with 
foreground
 where there are 1s and where the are 0s, no drawing is done. If you specify a stipple but no 
fill-style
, or a 
fill-style
 of :solid, it defaults to :opaque-stipple.
An image the same depth as the 
port
, or nil. If non-nil, 
pattern
 is used as the source of color for drawing instead of the 
foreground
 and 
background
 parameters. A pattern is not transformed by the 
transform
 parameter. The 
pattern
 is tiled across the drawing. When 
pattern
 is specified, the 
stipple
 value is ignored.The default value of 
pattern
 is nil.
See Working with images for information on creating an image.
A number (defaulting to 1) specifying the thickness of lines drawn. If scale-thickness is non-nil, the value thickness is in port (transformed) coordinates, otherwise thickness is in pixels.
A boolean, defaulting to t which means interpret the 
thickness
 parameter in transformed port coordinates. If 
scale-thickness
 is nil, 
thickness
 is interpreted in pixels.
A boolean, defaulting to nil. If 
dashed
 is t then lines are drawn as a dashed line using 
dash
 as the mark-space specifier.
A list of two or more integer, or nil. A list of integers specifies the alternate mark and space sizes for dashed lines. These mark and space values are interpreted in pixels only. The default value of 
dash
 is (4 4).
The value should be one of :butt, :round or :projecting and specifies how to draw the ends of lines. The default value is :butt.
The value should be one of :bevel, :miter  or :round and specifies how to draw the areas where the edges of polygons meet. The default value is :miter.
nil, or a list specifying a shape. The mask clips the drawing, so that drawing occurs only inside it.
An integer specifying in window coordinates where in the port the X coordinate of the mask origin is to be considered to be. The default value is 0.
The 
mask-x
 parameter works only when the 
drawing-mode
 is :compatible and the platform is GTK+ or X11/Motif.
An integer specifying in window coordinates where in the port the Y coordinate of the mask origin is to be considered to be. The default value is 0.
The 
mask-y
 parameter works only when the 
drawing-mode
 is :compatible and the platform is GTK+ or X11/Motif.
A transform object which determines the coordinate transformation use for the mask in 
drawing-mode
 :quality.
Either nil or a font object to be used by the draw-character and draw-string functions. The default value is nil.
Note that font cannot be a font-description. Use find-best-font to convert a font-description to a font.
A keyword controlling the mode of rendering text, most importantly anti-aliasing.
A keyword controlling the mode of drawing shapes (that is, anything except text).
A keyword controlling the combining of new drawing with existing drawing.
graphics-state-transform
graphics-state-foreground
graphics-state-background
graphics-state-operation
graphics-state-stipple
graphics-state-pattern
graphics-state-thickness
graphics-state-scale-thickness
graphics-state-dashed
graphics-state-dash
graphics-state-fill-style
graphics-state-line-end-style
graphics-state-line-joint-style
graphics-state-mask
graphics-state-mask-x
graphics-state-mask-y
graphics-state-mask-transform
graphics-state-font
graphics-state-text-mode
graphics-state-shape-mode
graphics-state-compositing-mode
Each graphics port has a graphics-state object associated with it, providing the default values of graphics parameters for drawing operations. The drawing operations such as draw-ellipse, draw-rectangle and draw-string can override specific parameters by passing them as keyword arguments.
graphics-state objects are used in the with-graphics-state macro and modified using the accessor functions listed above. See Setting the graphics state for examples.
mask
 should be nil (the default), a list of the form (
x
 
y
 
width
 
height
), defining a rectangle inside which the drawing is done or a list of the form (:path 
path
 :fill-rule 
fill-rule
) specifying a path inside which the drawing is done. The mask is not tiled.
In the latter case 
path
 should be a path specification (see draw-path). The 
fill-rule
 specifies how overlapping regions are filled. Possible values are :even-odd and :winding. The 
mask
 will be transformed by the 
mask-transform
 parameter. 
There some examples of path masks in
(example-edit-file "capi/graphics/paths")
mask-transform
 is used only in 
drawing-mode
 :quality. It is ignored in 
drawing-mode
 :compatible. The default value is the unit transform, which can also be specified as nil. Other allowed values include anything returned by the transform functions, described in Graphics state transforms. The other allowed value of 
mask-transform
 is the keyword :dynamic which is replaced by the current value of the 
transform
 graphics state parameter when the drawing operation uses the mask.
Each of text-mode and shape-mode can be one of:
No anti-aliasing.
With anti-aliasing.
Fastest rendering. The same as :plain except on Windows.
Best display.
The system default (which is :antialias).
Additionally 
text-mode
 can be :compatible, which causes  text to be drawn the way it would be drawn if 
drawing-mode
 was :compatible. This makes a difference only on Microsoft Windows, because on other platforms the default 
text-mode
 draws like the :compatible one.
The default of both 
text-mode
 and 
shape-mode
 is :default.
compositing-mode is a keyword or an integer controlling the compositing mode, that is the way that a new drawing is combined with the existing value in the target of the drawing to generate the result.
Two values of compositing-mode are supported on all platforms other than Motif:
Draw over the existing values. If the source is a solid color, then the result is simply the source. If the source has alpha value alpha , then it is blended with the destination, with the destination multiplied by the remainder of the alpha, that is (- 1 alpha ).
The source is written to the destination ignoring the existing values. If the source has alpha and the target does not, that has the effect of converting semi-transparent source to solid.
The default value of 
compositing-mode
 is :over.
The value :copy of 
compositing-mode
 is especially useful for creating a transparent or semi-transparent pixmap-port, which can be displayed directly or converted to an image by make-image-from-port. 
On Cocoa 10.5 and later and GTK+ 2.8 or later, these additional keyword values of 
compositing-mode
 are supported: :clear, :over, :in, :out, :atop, :dest-over, :dest-in, :dest-out, :dest-atop, :xor and :add. These correspond to the CAIRO_OPERATOR_* operators in Cairo, which are documented in 
cairographics.org/operators
 and the CGBlendMode values which are documented in the CGContext Reference at 
developer.apple.com
.
Note:
 on GTK+, the "unbounded" operators (:in, :out, :dest-in and :dest-atop) do not work properly for shape drawings. They can only be used for image drawing and copying operations.
Both Cocoa and GTK+ also allow 
compositing-mode
 to be an integer, which is simply passed through to the underlying system. This allows using modes that are not available via keywords, but it is not portable. For Cocoa, it is a CGBlendMode as documented in the CGContext Reference. For GTK+ it is cairo_operator_t, as documented in the entry for cairo_t in the Gnome documentation for Cairo.
Note: For drawing images on Cocoa, only values that corresponding to available keywords work properly.
:compatible.:quality.:quality. For more information about 
drawing-mode
, see The drawing mode and anti-aliasing.
(example-edit-file "capi/graphics/compositing-mode-simple")
(example-edit-file "capi/graphics/compositing-mode")
CAPI User Guide and Reference Manual (Windows version) - 3 Aug 2017