.TH MEMLAYER 3
.SH NAME
memdraw, memlalloc, memldelete, memlexpose, memlfree, memlhide, memline, memlnorefresh, memload, memunload, memlorigin, memlsetrefresh, memltofront, memltofrontn, memltorear, memltorearn \- windows of memory-resident images
.SH SYNOPSIS
.nf
.B #include <u.h>
.br
.B #include <libc.h>
.br
.B #include <draw.h>
.br
.B #include <memdraw.h>
.br
.B #include <memlayer.h>
.PP
.ft L
typedef struct Memscreen Memscreen;
typedef struct Memlayer Memlayer;
typedef void (*Refreshfn)(Memimage*, Rectangle, void*);
.ta 4n +\w'\fLRefreshfn 'u +\w'\fL*frontmost; 'u

struct Memscreen
{
	Memimage	*frontmost;	/* frontmost layer on screen */
	Memimage	*rearmost;	/* rearmost layer on screen */
	Memimage	*image;	/* upon which all layers are drawn */
	Memimage	*fill;		/* if non-zero, picture to use when repainting */
};

struct Memlayer
{
	Rectangle	screenr;	/* true position of layer on screen */
	Point	delta;	/* add delta to go from image coords to screen */
	Memscreen	*screen;	/* screen this layer belongs to */
	Memimage	*front;	/* window in front of this one */
	Memimage	*rear;	/* window behind this one*/
	int	clear;	/* layer is fully visible */
	Memimage	*save;	/* save area for obscured parts */
	Refreshfn	refreshfn;		/* fn to refresh obscured parts if save==nil */
	void	*refreshptr;	/* argument to refreshfn */
};
.ft
.ta \w'\fLMemimage* 'u
.PP
.B
Memimage*	memlalloc(Memscreen *s, Rectangle r, Refreshfn fn, void *arg, ulong col)
.PP
.B void	memlnorefresh(Memimage *i, Rectangle r, void *arg)
.PP
.B
int	memlsetrefresh(Memimage *i, Refreshfn fn, void *arg)
.PP
.B
int	memldelete(Memimage *i)
.PP
.B
int	memlfree(Memimage *i)
.PP
.B
int	memlexpose(Memimage *i, Rectangle r)
.PP
.B
int	memlhide(Memimage *i, Rectangle r)
.PP
.B 
void	memltofront(Memimage *i)
.PP
.B
void	memltofrontn(Memimage**ia, int n)
.PP
.B
void	memltorear(Memimage *i)
.PP
.B
void	memltorearn(Memimage **ia , int n)
.PP
.B
int	memlorigin(Memimage *i, Point log, Point phys)
.PP
.B
void	memdraw(Image *dst, Rectangle r,
.br
.B
		   Image *src, Point sp, Image *mask, Point mp, Drawop op)
.fi
.B
int	memload(Memimage *i, Rectangle r,
.br
.B
		uchar *buf, int n, int iscompressed)
.PP
.B
int	memunload(Memimage *i, Rectangle r,
.br
.B
		uchar *buf, int n)
.PP
.SH DESCRIPTION
These functions build upon the
.IR memdraw (3)
interface to maintain overlapping graphical windows on in-memory images.
They are used by the kernel to implement the windows interface presented by
.IR draw (3)
and
.IR window (3)
and probably have little use outside of the kernel.
.PP
The basic function is to extend the definition of a
.B Memimage
(see
.IR memdraw (3))
to include overlapping windows defined by the
.B Memlayer
type.
The first fields of the
.B Memlayer
structure are identical to those in
.BR Memimage ,
permitting a function that expects a
.B Memimage
to be passed a
.BR Memlayer ,
and vice versa.
Both structures have a
.B save
field, which is nil in a
.B Memimage
and points to `backing store' in a
.BR Memlayer .
The layer routines accept
.B Memimages
or
.BR Memlayers ;
if the image is a
.B Memimage
the underlying
.B Memimage
routine is called; otherwise the layer routines recursively
subdivide the geometry, reducing the operation into a smaller
component that ultimately can be performed on a
.BR Memimage ,
either the display on which the window appears, or the backing store.
.PP
.B Memlayers
are associated with a
.B Memscreen
that holds the data structures to maintain the windows and connects
them to the associated
.BR image .
The
.B fill
color is used to paint the background when a window is deleted.
There is no function to establish a
.BR Memscreen ;
to create one, allocate the memory, zero
.B frontmost
and
.BR rearmost ,
set
.B fill
to a valid fill color or image, and set
.B image
to the
.B Memimage
(or
.BR Memlayer )
on which the windows will be displayed.
.PP
.I Memlalloc
allocates a
.B Memlayer
of size
.I r
on
.B Memscreen
.IR s .
If
.I col
is not
.BR DNofill ,
the new window will be initialized by painting it that color.
.PP
The refresh function
.I fn
and associated argument
.I arg
will be called by routines in the library to restore portions of the window
uncovered due to another window being deleted or this window being pulled to the front of the stack.
The function, when called,
receives a pointer to the image (window) being refreshed, the rectangle that has been uncovered,
and the
.I arg
recorded when the window was created.
A couple of predefined functions provide built-in management methods:
.I memlnorefresh
does no backup at all, useful for making efficient temporary windows;
while a
.I nil
function specifies that the backing store
.RB ( Memlayer.save )
will be used to keep the obscured data.
Other functions may be provided by the client.
.I Memlsetrefresh
allows one to change the function associated with the window.
.PP
.I Memldelete
deletes the window
.IR i ,
restoring the underlying display.
.I Memlfree
frees the data structures without unlinking the window from the associated
.B Memscreen
or doing any graphics.
.PP
.I Memlexpose
restores rectangle
.I r
within the window, using the backing store or appropriate refresh method.
.I Memlhide
goes the other way, backing up
.I r
so that that portion of the screen may be modified without losing the data in this window.
.PP
.I Memltofront
pulls
.I i
to the front of the stack of windows, making it fully visible.
.I Memltofrontn
pulls the
.I n
windows in the array
.I ia
to the front as a group, leaving their internal order unaffected.
.I Memltorear
and
.I memltorearn
push the windows to the rear.
.PP
.I Memlorigin
changes the coordinate systems associated with the window
.IR i .
The points
.I log
and
.I phys
represent the upper left corner
.RB ( min )
of the window's internal coordinate system and its physical location on the screen.
Changing
.I log
changes the interpretation of coordinates within the window; for example, setting it to
(0,\ 0) makes the upper left corner of the window appear to be the origin of the coordinate
system, regardless of its position on the screen.
Changing
.I phys
changes the physical location of the window on the screen.
When a window is created, its logical and physical coordinates are the same, so
.EX
	memlorigin(i, i->r.min, i->r.min)
.EE
would be a no-op.
.PP
.I Memdraw
and
.I memline
are implemented in the layer library but provide the main entry points for drawing on
memory-resident windows.
They have the signatures of
.I memimagedraw
and
.I memimageline
(see
.IR memdraw (3))
but accept
.B Memlayer
or
.B Memimage
arguments both.
.PP
.I Memload
and
.I memunload
are similarly layer-savvy versions of
.I loadmemimage
and
.IR unloadmemimage .
The
.I iscompressed
flag to
.I memload
specifies whether the
.I n
bytes of data in
.I buf
are in compressed image format
(see
.IR image (7)).
.SH SOURCE
.B \*9/src/libmemlayer
.SH SEE ALSO
.IR graphics (3),
.IR memdraw (3),
.IR stringsize (3),
.IR window (3),
.IR draw (3)
