.TH MEMDRAW 3
.SH NAME
Memimage,
Memdata,
Memdrawparam,
memimageinit,
wordaddr,
byteaddr,
memimagemove,
allocmemimage,
allocmemimaged,
readmemimage,
creadmemimage,
writememimage,
freememimage,
memsetchan,
loadmemimage,
cloadmemimage,
unloadmemimage,
memfillcolor,
memarc,
mempoly,
memellipse,
memfillpoly,
memimageline,
memimagedraw,
drawclip,
memlinebbox,
memlineendsize,
allocmemsubfont,
openmemsubfont,
freememsubfont,
memsubfontwidth,
getmemdefont,
memimagestring,
iprint,
hwdraw \- drawing routines for memory-resident images
.SH SYNOPSIS
.nf
.B #include <u.h>
.nf
.B #include <u.h>
.B #include <libc.h>
.B #include <draw.h>
.B #include <memdraw.h>
.PP
.ft L
typedef struct Memdata
{
	ulong	*base;	/* allocated data pointer */
	uchar	*bdata;	/* first byte of actual data; word-aligned */
	int		ref;		/* number of Memimages using this data */
	void*	imref;	/* last image that pointed at this */
	int		allocd;	/* is this malloc'd? */
} Memdata;

enum {
	Frepl	= 1<<0,	/* is replicated */
	Fsimple	= 1<<1,	/* is 1x1 */
	Fgrey	= 1<<2,	/* is grey */
	Falpha	= 1<<3,	/* has explicit alpha */
	Fcmap	= 1<<4,	/* has cmap channel */
	Fbytes	= 1<<5,	/* has only 8-bit channels */
};

typedef struct Memimage
{
	Rectangle	r;		/* rectangle in data area, local coords */
	Rectangle	clipr;	/* clipping region */
	int		depth;	/* number of bits of storage per pixel */
	int		nchan;	/* number of channels */
	ulong	chan;	/* channel descriptions */

	Memdata	*data;	/* pointer to data */
	int		zero;	/* data->bdata+zero==&byte containing (0,0) */
	ulong	width;	/* width in words of a single scan line */
	Memlayer	*layer;	/* nil if not a layer*/
	ulong	flags;
	\fI...\fP
} Memimage;

typedef struct Memdrawparam
{
	Memimage	*dst;
	Rectangle	r;
	Memimage	*src;
	Rectangle	sr;
	Memimage	*mask;
	Rectangle	mr;
	\fI...\fP
} Memdrawparam;

.ta \w'\fLMemsubfont* 'u
int	drawdebug;
.ft
.PP
.ft L
.nf
void	memimageinit(void)
ulong*	wordaddr(Memimage *i, Point p)
uchar*	byteaddr(Memimage *i, Point p)
void	memimagemove(void *from, void *to)
.PP
.ft L
.nf
Memimage*	allocmemimage(Rectangle r, ulong chan)
Memimage*	allocmemimaged(Rectangle r, ulong chan, Memdata *data)
Memimage*	readmemimage(int fd)
Memimage*	creadmemimage(int fd)
int	writememimage(int fd, Memimage *i)
void	freememimage(Memimage *i)
int	memsetchan(Memimage*, ulong)
.PP
.ft L
.nf
int	loadmemimage(Memimage *i, Rectangle r,
	   uchar *buf, int nbuf)
int	cloadmemimage(Memimage *i, Rectangle r,
	   uchar *buf, int nbuf)
int	unloadmemimage(Memimage *i, Rectangle r,
	   uchar *buf, int nbuf)
void	memfillcolor(Memimage *i, ulong color)
.PP
.ft L
.nf
void	memarc(Memimage *dst, Point c, int a, int b, int thick,
	   Memimage *src, Point sp, int alpha, int phi, Drawop op)
void	mempoly(Memimage *dst, Point *p, int np, int end0,
	   int end1, int radius, Memimage *src, Point sp, Drawop op)
void	memellipse(Memimage *dst, Point c, int a, int b,
	   int thick, Memimage *src, Point sp, Drawop op)
void	memfillpoly(Memimage *dst, Point *p, int np, int wind,
		   Memimage *src, Point sp, Drawop op)
void	memimageline(Memimage *dst, Point p0, Point p1, int end0,
	   int end1, int radius, Memimage *src, Point sp, Drawop op)
void	memimagedraw(Memimage *dst, Rectangle r, Memimage *src,
	   Point sp, Memimage *mask, Point mp, Drawop op)
.PP
.ft L
.nf
int	drawclip(Memimage *dst, Rectangle *dr, Memimage *src,
	   Point *sp, Memimage *mask, Point *mp,
	   Rectangle *sr, Rectangle *mr)
Rectangle	memlinebbox(Point p0, Point p1, int end0, int end1,
	   int radius)
int	memlineendsize(int end)
.PP
.ft L
.nf
Memsubfont*	allocmemsubfont(char *name, int n, int height,
	   int ascent, Fontchar *info, Memimage *i)
Memsubfont*	openmemsubfont(char *name)
void	freememsubfont(Memsubfont *f)
Point	memsubfontwidth(Memsubfont *f, char *s)
Memsubfont*	getmemdefont(void)
Point	memimagestring(Memimage *dst, Point p, Memimage *color,
	    Point cp, Memsubfont *f, char *cs, Drawop op)
.PP
.ft L
.nf
int	iprint(char *fmt, ...)
int	hwdraw(Memdrawparam *param)
.ft R
.SH DESCRIPTION
The
.B Memimage
type defines memory-resident rectangular pictures and the methods to draw upon them;
.BR Memimage s
differ from
.BR Image s
(see
.IR draw (3))
in that they are manipulated directly in user memory rather than by
RPCs to the
.B /dev/draw
hierarchy.
The
.Bmemdraw
library is the basis for the kernel 
.IR draw (3)
driver and also used by a number of programs that must manipulate
images without a display.
.PP
The 
.BR r, 
.BR clipr ,
.BR depth ,
.BR nchan ,
and
.BR chan 
structure elements are identical to
the ones of the same name
in the 
.B Image
structure.
.PP
The
.B flags
element of the 
.B Memimage
structure holds a number of bits of information about the image.
In particular, it subsumes the
purpose of the
.B repl
element of 
.B Image
structures.
.PP
.I Memimageinit
initializes various static data that the library depends on,
as well as the replicated solid color images 
.BR memopaque ,
.BR memtransparent ,
.BR memblack ,
and
.BR memwhite .
It should be called before referring to any of these images
and before calling any of the other library functions.
.PP
Each 
.B Memimage
points at a 
.B Memdata
structure that in turn points at the actual pixel data for the image.
This allows multiple images to be associated with the same 
.BR Memdata .
The first word of the data pointed at by
the 
.B base
element of
.B Memdata
points back at the
.B Memdata
structure, so that in the Plan 9 kernel, the
memory allocator (see
Plan 9's \fIpool\fR(3))
can compact image memory
using
.IR memimagemove .
.PP
Because images can have different coordinate systems,
the 
.B zero
element of the 
.B Memimage
structure contains the offset that must be added
to the 
.B bdata
element of the corresponding
.B Memdata
structure in order to yield a pointer to the data for the pixel (0,0).
Adding
.BR width
machine words
to this pointer moves it down one scan line.
The
.B depth
element can be used to determine how to move the
pointer horizontally.
Note that this method works even for images whose rectangles
do not include the origin, although one should only dereference
pointers corresponding to pixels within the image rectangle.
.I Wordaddr
and
.IR byteaddr 
perform these calculations, 
returning pointers to the word and byte, respectively,
that contain the beginning of the data for a given pixel.
.PP
.I Allocmemimage
allocages 
images with a given rectangle and channel descriptor
(see 
.B strtochan
in
.IR graphics (3)),
creating a fresh
.B Memdata
structure and associated storage.
.I Allocmemimaged
is similar but uses the supplied
.I Memdata
structure rather than a new one.
The
.I readmemimage
function reads an uncompressed bitmap 
from the given file descriptor,
while
.I creadmemimage
reads a compressed bitmap.
.I Writememimage
writes a compressed representation of
.I i
to file descriptor
.IR fd .
For more on bitmap formats, see
.IR image (7).
.I Freememimage
frees images returned by any of these routines.
The
.B Memimage
structure contains some tables that are used
to store precomputed values depending on the channel descriptor.
.I Memsetchan
updates the
.B chan
element of the structure as well as these tables,
returning \-1 if passed a bad channel descriptor.
.PP
.I Loadmemimage
and
.I cloadmemimage
replace the pixel data for a given rectangle of an image
with the given buffer of uncompressed or compressed
data, respectively.
When calling
.IR cloadmemimage ,
the buffer must contain an
integral number of 
compressed chunks of data that exactly cover the rectangle.
.I Unloadmemimage
retrieves the uncompressed pixel data for a given rectangle of an image.
All three return the number of bytes consumed on success,
and \-1 in case of an error.
.PP
.I Memfillcolor
fills an image with the given color, a 32-bit number as
described in 
.IR color (3).
.PP
.IR Memarc ,
.IR mempoly ,
.IR memellipse ,
.IR memfillpoly ,
.IR memimageline ,
and
.I memimagedraw
are identical to the 
.IR arc ,
.IR poly ,
.IR ellipse ,
.IR fillpoly ,
.IR line ,
and
.IR gendraw ,
routines described in
.IR draw (3),
except that they operate on
.BR Memimage s
rather than 
.BR Image s.
Similarly, 
.IR allocmemsubfont ,
.IR openmemsubfont ,
.IR freememsubfont ,
.IR memsubfontwidth ,
.IR getmemdefont ,
and
.I memimagestring
are the 
.B Memimage
analogues of 
.IR allocsubfont ,
.IR openfont ,
.IR freesubfont ,
.IR strsubfontwidth ,
.IR getdefont ,
and
.B string
(see 
.IR subfont (3)
and
.IR graphics (3)),
except that they operate
only on 
.BR Memsubfont s
rather than
.BR Font s.
.PP
.I Drawclip
takes the images involved in a draw operation,
together with the destination rectangle 
.B dr
and source
and mask alignment points
.B sp
and
.BR mp ,
and
clips them according to the clipping rectangles of the images involved.
It also fills in the rectangles
.B sr
and
.B mr
with rectangles congruent to the returned destination rectangle
but translated so the upper left corners are the returned
.B sp
and
.BR mp .
.I Drawclip
returns zero when the clipped rectangle is empty.
.I Memlinebbox
returns a conservative bounding box containing a line between
two points
with given end styles
and radius.
.I Memlineendsize
calculates the extra length added to a line by attaching
an end of a given style.
.PP
The
.I hwdraw
and 
.I iprint
functions are no-op stubs that may be overridden by clients
of the library.
.I Hwdraw
is called at each call to
.I memimagedraw
with the current request's parameters.
If it can satisfy the request, it should do so 
and return 1.
If it cannot satisfy the request, it should return 0.
This allows (for instance) the kernel to take advantage
of hardware acceleration.
.I Iprint
should format and print its arguments;
it is given much debugging output when
the global integer variable
.B drawdebug
is non-zero.
In the kernel,
.I iprint
prints to a serial line rather than the screen, for obvious reasons.
.SH SOURCE
.B \*9/src/libmemdraw
.SH SEE ALSO
.IR addpt (3),
.IR color (3),
.IR draw (3),
.IR graphics (3),
.IR memlayer (3),
.IR stringsize (3),
.IR subfont (3),
.IR color (7),
.IR utf (7)
.SH BUGS
.I Memimagestring
is unusual in using a subfont rather than a font,
and in having no parameter to align the source.
