.TH DRAW 3
.SH NAME
Image, draw, gendraw, drawreplxy, drawrepl,
replclipr, line, poly, fillpoly, bezier, bezspline, fillbezier, fillbezspline, ellipse,
fillellipse, arc, fillarc, icossin, icossin2, border, string, stringn,
runestring, runestringn, stringbg, stringnbg, runestringbg,
runestringnbg, _string, ARROW, drawsetdebug \- graphics functions
.de PB
.PP
.ft L
.nf
..
.SH SYNOPSIS
.de PB
.PP
.ft L
.nf
..
.PB
#include <u.h>
#include <libc.h>
#include <draw.h>
.PB
typedef
struct Image
{
	Display	*display;	/* display holding data */
	int		id;		/* id of system-held Image */
	Rectangle	r;		/* rectangle in data area, local coords */
	Rectangle clipr;	/* clipping region */
	ulong	chan;	/* pixel channel format descriptor */
	int		depth;	/* number of bits per pixel */
	int		repl;	/* flag: data replicates to tile clipr */
	Screen	*screen;	/* 0 if not a window */
	Image	*next;	/* next in list of windows */
} Image;
.PB
typedef enum
{
	/* Porter-Duff compositing operators */
	Clear	= 0,
.sp 0.1
	SinD	= 8,
	DinS	= 4,
	SoutD	= 2,
	DoutS	= 1,
.sp 0.1
	S		= SinD|SoutD,
	SoverD	= SinD|SoutD|DoutS,
	SatopD	= SinD|DoutS,
	SxorD	= SoutD|DoutS,
.sp 0.1
	D		= DinS|DoutS,
	DoverS	= DinS|DoutS|SoutD,
	DatopS	= DinS|SoutD,
	DxorS	= DoutS|SoutD,	/* == SxorD */
.sp 0.1
	Ncomp = 12,
} Drawop;
.PB
.PD 0
.ta +\w'\fL      'u +\w'\fL    'u +6n +4n
void	draw(Image *dst, Rectangle r, Image *src,
		Image *mask, Point p)
.PB
void	drawop(Image *dst, Rectangle r, Image *src,
		Image *mask, Point p, Drawop op)
.PB
void	gendraw(Image *dst, Rectangle r, Image *src, Point sp,
		Image *mask, Point mp)
.PB
void	gendrawop(Image *dst, Rectangle r, Image *src, Point sp,
		Image *mask, Point mp, Drawop op)
.PB
int	drawreplxy(int min, int max, int x)
.PB
Point	drawrepl(Rectangle r, Point p)
.PB
void	replclipr(Image *i, int repl, Rectangle clipr)
.PB
void	line(Image *dst, Point p0, Point p1, int end0, int end1,
		int radius, Image *src, Point sp)
.PB
void	lineop(Image *dst, Point p0, Point p1, int end0, int end1,
		int radius, Image *src, Point sp, Drawop op)
.PB
void	poly(Image *dst, Point *p, int np, int end0, int end1,
		int radius, Image *src, Point sp)
.PB
void	polyop(Image *dst, Point *p, int np, int end0, int end1,
		int radius, Image *src, Point sp, Drawop op)
.PB
void	fillpoly(Image *dst, Point *p, int np, int wind,
		Image *src, Point sp)
.PB
void	fillpolyop(Image *dst, Point *p, int np, int wind,
		Image *src, Point sp, Drawop op)
.PB
int	bezier(Image *dst, Point p0, Point p1, Point p2, Point p3,
		int end0, int end1, int radius, Image *src, Point sp)
.PB
int	bezierop(Image *dst, Point p0, Point p1, Point p2, Point p3,
		int end0, int end1, int radius, Image *src, Point sp,
		Drawop op)
.PB
int	bezspline(Image *dst, Point *pt, int npt, int end0, int end1,
		int radius, Image *src, Point sp)
.PB
int	bezsplineop(Image *dst, Point *pt, int npt, int end0, int end1,
		int radius, Image *src, Point sp, Drawop op)
.PB
int	bezsplinepts(Point *pt, int npt, Point **pp)
.PB
int	fillbezier(Image *dst, Point p0, Point p1, Point p2, Point p3,
		int w, Image *src, Point sp)
.PB
int	fillbezierop(Image *dst, Point p0, Point p1, Point p2, Point p3,
		int w, Image *src, Point sp, Drawop op)
.PB
int	fillbezspline(Image *dst, Point *pt, int npt, int w,
		Image *src, Point sp)
.PB
int	fillbezsplineop(Image *dst, Point *pt, int npt, int w,
		Image *src, Point sp, Drawop op)
.PB
void	ellipse(Image *dst, Point c, int a, int b, int thick,
		Image *src, Point sp)
.PB
void	ellipseop(Image *dst, Point c, int a, int b, int thick,
		Image *src, Point sp, Drawop op)
.PB
void	fillellipse(Image *dst, Point c, int a, int b,
		Image *src, Point sp)
.PB
void	fillellipseop(Image *dst, Point c, int a, int b,
		Image *src, Point sp, Drawop op)
.PB
void	arc(Image *dst, Point c, int a, int b, int thick,
		Image *src, Point sp, int alpha, int phi)
.PB
void	arcop(Image *dst, Point c, int a, int b, int thick,
		Image *src, Point sp, int alpha, int phi, Drawop op)
.PB
void	fillarc(Image *dst, Point c, int a, int b, Image *src,
		Point sp, int alpha, int phi)
.PB
void	fillarcop(Image *dst, Point c, int a, int b, Image *src,
		Point sp, int alpha, int phi, Drawop op)
.PB
int	icossin(int deg, int *cosp, int *sinp)
.PB
int	icossin2(int x, int y, int *cosp, int *sinp)
.PB
void	border(Image *dst, Rectangle r, int i, Image *color, Point sp)
.br
.PB
Point	string(Image *dst, Point p, Image *src, Point sp,
		Font *f, char *s)
.PB
Point	stringop(Image *dst, Point p, Image *src, Point sp,
		Font *f, char *s, Drawop op)
.PB
Point	stringn(Image *dst, Point p, Image *src, Point sp,
		Font *f, char *s, int len)
.PB
Point	stringnop(Image *dst, Point p, Image *src, Point sp,
		Font *f, char *s, int len, Drawop op)
.PB
Point	runestring(Image *dst, Point p, Image *src, Point sp,
		Font *f, Rune *r)
.PB
Point	runestringop(Image *dst, Point p, Image *src, Point sp,
		Font *f, Rune *r, Drawop op)
.PB
Point	runestringn(Image *dst, Point p, Image *src, Point sp,
		Font *f, Rune *r, int len)
.PB
Point	runestringnop(Image *dst, Point p, Image *src, Point sp,
		Font *f, Rune *r, int len, Drawop op)
.PB
Point	stringbg(Image *dst, Point p, Image *src, Point sp,
		Font *f, char *s, Image *bg, Point bgp)
.PB
Point	stringbgop(Image *dst, Point p, Image *src, Point sp,
		Font *f, char *s, Image *bg, Point bgp, Drawop op)
.PB
Point	stringnbg(Image *dst, Point p, Image *src, Point sp,
		Font *f, char *s, int len, Image *bg, Point bgp)
.PB
Point	stringnbgop(Image *dst, Point p, Image *src, Point sp,
		Font *f, char *s, int len, Image *bg, Point bgp, Drawop op)
.PB
Point	runestringbg(Image *dst, Point p, Image *src, Point sp,
		Font *f, Rune *r, Image *bg, Point bgp)
.PB
Point	runestringbgop(Image *dst, Point p, Image *src, Point sp,
		Font *f, Rune *r, Image *bg, Point bgp, Drawop op)
.PB
Point	runestringnbg(Image *dst, Point p, Image *src, Point sp,
		Font *f, Rune *r, int len, Image *bg, Point bgp)
.PB
Point	runestringnbgop(Image *dst, Point p, Image *src, Point sp,
		Font *f, Rune *r, int len, Image *bg, Point bgp, Drawop op)
.PB
Point	_string(Image *dst, Point p, Image *src,
		Point sp, Font *f, char *s, Rune *r, int len,
		Rectangle clipr, Image *bg, Point bgp, Drawop op)
.PB
void	drawsetdebug(int on)
.PD
.PB
enum
{
	/* line ends */
	Endsquare	= 0,
	Enddisc		= 1,
	Endarrow	= 2,
	Endmask		= 0x1F
};
.PB
#define ARROW(a, b, c) (Endarrow|((a)<<5)|((b)<<14)|((c)<<23))
.SH DESCRIPTION
The
.B Image
type defines rectangular pictures and the methods to draw upon them;
it is also the building block for higher level objects such as
windows and fonts.
In particular, a window is represented as an
.BR Image ;
no special operators are needed to draw on a window.
.PP
.TP 10
.B r
The coordinates of the rectangle in the plane for which the
.B Image
has defined pixel values.
It should not be modified after the image is created.
.TP
.B clipr
The clipping rectangle: operations that read or write
the image will not access pixels outside
.BR clipr .
Frequently,
.B clipr
is the same as
.BR r ,
but it may differ; see in particular the discussion of
.BR repl .
The clipping region may be modified dynamically using
.I replclipr
.RI ( q.v. ).
.TP
.B chan
The pixel channel format descriptor, as described in
.IR image (6).
The value should not be modified after the image is created.
.TP
.B depth
The
number of bits per pixel in the picture;
it is identically
.B chantodepth(chan)
(see
.IR graphics (3))
and is provided as a convenience.
The value should not be modified after the image is created.
.TP
.B repl
A boolean value specifying whether the image is tiled to cover
the plane when used as a source for a drawing operation.
If
.B repl
is zero, operations are restricted to the intersection of
.B r
and
.BR clipr .
If
.B repl
is set,
.B r
defines the tile to be replicated and
.B clipr
defines the portion of the plane covered by the tiling, in other words,
.B r
is replicated to cover
.BR clipr ;
in such cases
.B r
and
.B clipr
are independent.
.IP
For example, a replicated image with
.B r
set to ((0,\ 0),\ (1,\ 1)) and
.B clipr
set to ((0,\ 0),\ (100,\ 100)),
with the single pixel of
.B r
set to blue,
behaves identically to an image with
.B r
and
.B clipr
both set to ((0,\ 0),\ (100,\ 100)) and all pixels set to blue.
However,
the first image requires far less memory.
The replication flag may be modified dynamically using
.I replclipr
.RI ( q.v. ).
.PP
Most of the drawing functions come in two forms:
a basic form, and an extended form that takes an extra
.B Drawop
to specify a Porter-Duff compositing operator to use.
The basic forms assume the operator is
.BR SoverD ,
which suffices for the vast majority of applications.
The extended forms are named by adding an
.RB - op
suffix to the basic form.
Only the basic forms are listed below.
.TP
.BI draw( dst\fP,\fP\ r\fP,\fP\ src\fP,\fP\ mask\fP,\fP\ p )
.I Draw
is the standard drawing function.
Only those pixels within the intersection of
.IB dst ->r
and
.IB dst ->clipr
will be affected;
.I draw
ignores
.IB dst ->repl\fR.
The operation proceeds as follows
(this is a description of the behavior, not the implementation):
.RS
.IP 1.
If
.B repl
is set in
.I src
or
.IR mask ,
replicate their contents to fill
their clip rectangles.
.IP 2.
Translate
.I src
and
.I mask
so
.I p
is aligned with
.IB r .min\fR.
.IP 3.
Set
.I r
to the intersection of
.I r
and
.IB dst ->r\fR.
.IP 4.
Intersect
.I r
with
.IB src ->clipr\fR.
If
.IB src ->repl
is false, also intersect
.I r
with
.IB src ->r\fR.
.IP 5.
Intersect
.I r
with
.IB mask ->clipr\fR.
If
.IB mask ->repl
is false, also intersect
.I r
with
.IB mask ->r\fR.
.IP 6.
For each location in
.IR r ,
combine the
.I dst
pixel with the
.I src
pixel using the alpha value
corresponding to the
.I mask
pixel.
If the
.I mask
has an explicit alpha channel, the alpha value
corresponding to the
.I mask
pixel is simply that pixel's alpha channel.
Otherwise, the alpha value is the NTSC greyscale equivalent
of the color value, with white meaning opaque and black transparent.
In terms of the Porter-Duff compositing algebra,
.I draw
replaces the
.I dst
pixels with
.RI ( src
in
.IR mask )
over
.IR dst .
(In the extended form,
``over'' is replaced by
.IR op ).
.RE
.IP
The various
pixel channel formats
involved need not be identical.
If the channels involved are smaller than 8-bits, they will
be promoted before the calculation by replicating the extant bits;
after the calculation, they will be truncated to their proper sizes.
.TP
\f5gendraw(\f2dst\fP, \f2r\fP, \f2src\fP, \f2p0\fP, \f2mask\fP, \f2p1\f5)\fP
Similar to
.I draw
except that
.I gendraw
aligns the source and mask differently:
.I src
is aligned so
.I p0
corresponds to
.IB r .min
and
.I mask
is aligned so
.I p1
corresponds to
.IB r .min .
For most purposes with simple masks and source images,
.B draw
is sufficient, but
.B gendraw
is the general operator and the one all other drawing primitives are built upon.
.TP
.BI drawreplxy( min ,  max ,  x\f5)
Clips
.I x
to be in the half-open interval [\fImin\fP, \fImax\fP) by adding
or subtracting a multiple of \fImax-min\fP.
.TP
.BI drawrepl( r , p )
Clips the point \fIp\fP to be within the rectangle \fIr\fP
by translating the point horizontally by an integer multiple of rectangle width
and vertically by the height.
.TP
.BI replclipr( i ,  repl ,  clipr\f5)
Because the image data is stored on the server, local modifications to the
.B Image
data structure itself will have no effect.
.I Repclipr
modifies the local
.B Image
data structure's
.B repl
and
.B clipr
fields, and notifies the server of their modification.
.TP
\f5line(\f2dst\fP, \f2p0\fP, \f2p1\fP, \f2end0\fP, \f2end1\fP, \f2thick\fP, \f2src\fP, \f2sp\fP)
Line
draws in
.I dst
a line of width
.RI 1+2* thick
pixels joining points
.I p0
and
.IR p1 .
The line is drawn using pixels from the
.I src
image aligned so
.I sp
in the source corresponds to
.I p0
in the destination.
The line touches both
.I p0
and
.IR p1 ,
and
.I end0
and
.I end1
specify how the ends of the line are drawn.
.B Endsquare
terminates the line perpendicularly to the direction of the line; a thick line with
.B Endsquare
on both ends will be a rectangle.
.B Enddisc
terminates the line by drawing a disc of diameter
.RI 1+2* thick
centered on the end point.
.B Endarrow
terminates the line with an arrowhead whose tip touches the endpoint.
.IP
The macro
.B ARROW
permits explicit control of the shape of the arrow.
If all three parameters are zero, it produces the default arrowhead,
otherwise,
.I a
sets the distance along line from end of the regular line to tip,
.I b
sets the distance along line from the barb to the tip,
and
.I c
sets the distance perpendicular to the line from edge of line to the tip of the barb,
all in pixels.
.IP
.I Line
and the other geometrical operators are equivalent to calls to
.I gendraw
using a mask produced by the geometric procedure.
.TP
\f5poly(\f2dst\fP, \f2p\fP, \f2np\fP, \f2end0\fP, \f2end1\fP, \f2thick\fP, \f2src\fP, \f2sp\fP)
.I Poly
draws a general polygon; it
is conceptually equivalent to a series of calls to
.I line
joining adjacent points in the
array of
.B Points
.IR p ,
which has
.I np
elements.
The ends of the polygon are specified as in
.IR line ;
interior lines are terminated with
.B Enddisc
to make smooth joins.
The source is aligned so
.I sp
corresponds to
.IB p [0]\f1.
.TP
\f5fillpoly(\f2dst\fP, \f2p\fP, \f2np\fP, \f2wind\fP, \f2src\fP, \f2sp\fP)
.I Fillpoly
is like
.I poly
but fills in the resulting polygon rather than outlining it.
The source is aligned so
.I sp
corresponds to
.IB p [0]\f1.
The winding rule parameter
.I wind
resolves ambiguities about what to fill if the polygon is self-intersecting.
If
.I wind
is
.BR ~0 ,
a pixel is inside the polygon if the polygon's winding number about the point
is non-zero.
If
.I wind
is
.BR 1 ,
a pixel is inside if the winding number is odd.
Complementary values (0 or ~1) cause outside pixels to be filled.
The meaning of other values is undefined.
The polygon is closed with a line if necessary.
.TP
\f5bezier(\f2dst\fP, \f2a\fP, \f2b\fP, \f2c\fP, \f2d\fP, \f2end0\fP, \f2end1\fP, \f2thick\fP, \f2src\fP, \f2sp\fP)
.I Bezier
draws the
cubic Bezier curve defined by
.B Points
.IR a ,
.IR b ,
.IR c ,
and
.IR d .
The end styles are determined by
.I end0
and
.IR end1 ;
the thickness of the curve is
.RI 1+2* thick .
The source is aligned so
.I sp
in
.I src
corresponds to
.I a
in
.IR dst .
.TP
\f5bezspline(\f2dst\fP, \f2p\fP, \f2end0\fP, \f2end1\fP, \f2thick\fP, \f2src\fP, \f2sp\fP)
.I Bezspline
takes the same arguments as
.I poly
but draws a quadratic B-spline (despite its name) rather than a polygon.
If the first and last points in
.I p
are equal, the spline has periodic end conditions.
.TP
\f5bezsplinepts(\f2pt\fP, \f2npt\fP, \f2pp\fP)
.I Bezsplinepts
returns in
.I pp
a list of points making up the open polygon that
.I bezspline
would draw.
The caller is responsible for freeing
.IR *pp .
.TP
\f5fillbezier(\f2dst\fP, \f2a\fP, \f2b\fP, \f2c\fP, \f2d\fP, \f2wind\fP, \f2src\fP, \f2sp\fP)
.I Fillbezier
is to
.I bezier
as
.I fillpoly
is to
.IR poly .
.TP
\f5fillbezspline(\f2dst\fP, \f2p\fP, \f2wind\fP, \f2src\fP, \f2sp\fP)
.I Fillbezspline
is like
.I fillpoly
but fills the quadratic B-spline rather than the polygon outlined by
.IR p .
The spline is closed with a line if necessary.
.TP
\f5ellipse(\f2dst\fP, \f2c\fP, \f2a\fP, \f2b\fP, \f2thick\fP, \f2src\fP, \f2sp\fP)
.I Ellipse
draws in
.I dst
an ellipse centered on
.I c
with horizontal and vertical semiaxes
.I a
and
.IR b .
The source is aligned so
.I sp
in
.I src
corresponds to
.I c
in
.IR dst .
The ellipse is drawn with thickness
.RI 1+2* thick .
.TP
\f5fillellipse(\f2dst\fP, \f2c\fP, \f2a\fP, \f2b\fP, \f2src\fP, \f2sp\fP)
.I Fillellipse
is like
.I ellipse
but fills the ellipse rather than outlining it.
.TP
\f5arc(\f2dst\fP, \f2c\fP, \f2a\fP, \f2b\fP, \f2thick\fP, \f2src\fP, \f2sp\fP, \f2alpha\fP, \f2phi\fP)
.I Arc
is like
.IR ellipse ,
but draws only that portion of the ellipse starting at angle
.I alpha
and extending through an angle of
.IR phi .
The angles are measured in degrees counterclockwise from the positive
.I x
axis.
.TP
\f5fillarc(\f2dst\fP, \f2c\fP, \f2a\fP, \f2b\fP, \f2src\fP, \f2sp\fP, \f2alpha\fP, \f2phi\fP)
.I Fillarc
is like
.IR arc ,
but fills the sector with the source color.
.TP
\f5icossin(\f2deg\fP, \f2cosp\fP, \f2sinp\fP)
.I Icossin
stores in
.BI * cosp
and
.BI * sinp
scaled integers representing the cosine and sine of the angle
.IR deg ,
measured in integer degrees.
The values are scaled so cos(0) is 1024.
.TP
\f5icossin2(\f2x\fP, \f2y\fP, \f2cosp\fP, \f2sinp\fP)
.I Icossin2
is analogous to
.IR icossin,
with the angle represented not in degrees but implicitly by the point
.RI ( x , y ).
It is to
.I icossin
what
.B atan2
is to
.B atan
(see
.IR sin (3)).
.TP
.BI border( dst\fP,\fP\ r\fP,\fP\ i\fP,\fP\ color\fP,\fP\ sp\fP)
.I Border
draws an outline of rectangle
.I r
in the specified
.IR color .
The outline has width
.IR i ;
if positive, the border goes inside the rectangle; negative, outside.
The source is aligned so
.I sp
corresponds to
.IB r .min .
.TP
.BI string( dst\fP,\fP\ p\fP,\fP\ src\fP,\fP\ sp\fP,\fP\ font\fP,\fP\ s )
.I String
draws in
.I dst
characters specified by the string
.I s
and
.IR font ;
it is equivalent to a series of calls to
.I gendraw
using source
.I src
and masks determined by the character shapes.
The text is positioned with the left of the first character at
.IB p .x
and the top of the line of text at
.IB p .y\f1.
The source is positioned so
.I sp
in
.I src
corresponds to
.I p
in
.IR dst .
.I String
returns a
.B Point
that is the position of the next character that would be drawn if the string were longer.
.IP
For characters with undefined
or zero-width images in the font, the character at font position 0 (NUL) is drawn.
.IP
The other string routines are variants of this basic form, and
have names that encode their variant behavior.
Routines whose names contain
.B rune
accept a string of Runes rather than
.SM UTF\c
-encoded bytes.
Routines ending in
.B n
accept an argument,
.IR n ,
that defines the number of characters to draw rather than accepting a NUL-terminated
string.
Routines containing
.B bg
draw the background behind the characters in the specified color
.RI ( bg )
and
alignment
.RI ( bgp );
normally the text is drawn leaving the background intact.
.IP
The routine
.I _string
captures all this behavior into a single operator.  Whether it draws a
.SM UTF
string
or Rune string depends on whether
.I s
or
.I r
is null (the string length is always determined by
.IR len ).
If
.I bg
is non-null, it is used as a background color.
The
.I clipr
argument allows further management of clipping when drawing the string;
it is intersected with the usual clipping rectangles to further limit the extent of the text.
.TP
.BI drawsetdebug( on )
Turns on or off debugging output (usually
to a serial line) according to whether
.I on
is non-zero.
.SH SOURCE
.B /usr/local/plan9/src/libdraw
.SH SEE ALSO
.IR graphics (3),
.IR stringsize (3),
.IR color (6),
.IR utf (6),
.IR addpt (3)
.PP
T. Porter, T. Duff.
``Compositing Digital Images'', 
.I "Computer Graphics
(Proc. SIGGRAPH), 18:3, pp. 253-259, 1984.
.SH DIAGNOSTICS
These routines call the graphics error function on fatal errors.
.SH BUGS
Anti-aliased characters can be drawn by defining a font
with multiple bits per pixel, but there are
no anti-aliasing geometric primitives.
