tMissed these. - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 55dedf713c04d00add59ba54464150b3a5a3aa60
 (DIR) parent 522b0689c340d26feeac360640bf7e2e0582353c
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue, 30 Sep 2003 19:06:20 +0000
       
       Missed these.
       
       Diffstat:
         A include/memdraw.h                   |     209 +++++++++++++++++++++++++++++++
         A include/memlayer.h                  |      48 +++++++++++++++++++++++++++++++
       
       2 files changed, 257 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/include/memdraw.h b/include/memdraw.h
       t@@ -0,0 +1,209 @@
       +typedef struct        Memimage Memimage;
       +typedef struct        Memdata Memdata;
       +typedef struct        Memsubfont Memsubfont;
       +typedef struct        Memlayer Memlayer;
       +typedef struct        Memcmap Memcmap;
       +typedef struct        Memdrawparam        Memdrawparam;
       +
       +/*
       + * Memdata is allocated from main pool, but .data from the image pool.
       + * Memdata is allocated separately to permit patching its pointer after
       + * compaction when windows share the image data.
       + * The first word of data is a back pointer to the Memdata, to find
       + * The word to patch.
       + */
       +
       +struct Memdata
       +{
       +        u32int        *base;        /* allocated data pointer */
       +        uchar        *bdata;        /* pointer to first byte of actual data; word-aligned */
       +        int        ref;        /* number of Memimages using this data */
       +        void*        imref;
       +        int        allocd;        /* is this malloc'd? */
       +};
       +
       +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 */
       +};
       +
       +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 */
       +        u32int                chan;        /* channel descriptions */
       +        Memcmap                *cmap;
       +
       +        Memdata                *data;        /* pointer to data; shared by windows in this image */
       +        int                zero;        /* data->bdata+zero==&byte containing (0,0) */
       +        u32int                width;        /* width in words of a single scan line */
       +        Memlayer        *layer;        /* nil if not a layer*/
       +        u32int                flags;
       +        void                *X;
       +
       +        int                shift[NChan];
       +        int                mask[NChan];
       +        int                nbits[NChan];
       +};
       +
       +struct Memcmap
       +{
       +        uchar        cmap2rgb[3*256];
       +        uchar        rgb2cmap[16*16*16];
       +};
       +
       +/*
       + * Subfonts
       + *
       + * given char c, Subfont *f, Fontchar *i, and Point p, one says
       + *        i = f->info+c;
       + *        draw(b, Rect(p.x+i->left, p.y+i->top,
       + *                p.x+i->left+((i+1)->x-i->x), p.y+i->bottom),
       + *                color, f->bits, Pt(i->x, i->top));
       + *        p.x += i->width;
       + * to draw characters in the specified color (itself a Memimage) in Memimage b.
       + */
       +
       +struct        Memsubfont
       +{
       +        char                *name;
       +        short                n;                /* number of chars in font */
       +        uchar                height;                /* height of bitmap */
       +        char                ascent;                /* top of bitmap to baseline */
       +        Fontchar        *info;                /* n+1 character descriptors */
       +        Memimage        *bits;                /* of font */
       +};
       +
       +/*
       + * Encapsulated parameters and information for sub-draw routines.
       + */
       +enum {
       +        Simplesrc=1<<0,
       +        Simplemask=1<<1,
       +        Replsrc=1<<2,
       +        Replmask=1<<3,
       +        Fullmask=1<<4,
       +};
       +struct        Memdrawparam
       +{
       +        Memimage *dst;
       +        Rectangle        r;
       +        Memimage *src;
       +        Rectangle sr;
       +        Memimage *mask;
       +        Rectangle mr;
       +        int op;
       +
       +        u32int state;
       +        u32int mval;        /* if Simplemask, the mask pixel in mask format */
       +        u32int mrgba;        /* mval in rgba */
       +        u32int sval;        /* if Simplesrc, the source pixel in src format */
       +        u32int srgba;        /* sval in rgba */
       +        u32int sdval;        /* sval in dst format */
       +};
       +
       +/*
       + * Memimage management
       + */
       +
       +extern Memimage*        allocmemimage(Rectangle, u32int);
       +extern Memimage*        allocmemimaged(Rectangle, u32int, Memdata*, void*);
       +extern Memimage*        readmemimage(int);
       +extern Memimage*        creadmemimage(int);
       +extern int                writememimage(int, Memimage*);
       +extern void                freememimage(Memimage*);
       +extern int                loadmemimage(Memimage*, Rectangle, uchar*, int);
       +extern int                cloadmemimage(Memimage*, Rectangle, uchar*, int);
       +extern int                unloadmemimage(Memimage*, Rectangle, uchar*, int);
       +extern u32int*                wordaddr(Memimage*, Point);
       +extern uchar*                byteaddr(Memimage*, Point);
       +extern int                drawclip(Memimage*, Rectangle*, Memimage*, Point*,
       +                                Memimage*, Point*, Rectangle*, Rectangle*);
       +extern void                memfillcolor(Memimage*, u32int);
       +extern int                memsetchan(Memimage*, u32int);
       +extern u32int                pixelbits(Memimage*, Point);
       +
       +/*
       + * Graphics
       + */
       +extern void        memdraw(Memimage*, Rectangle, Memimage*, Point, 
       +                        Memimage*, Point, int);
       +extern void        memline(Memimage*, Point, Point, int, int, int,
       +                        Memimage*, Point, int);
       +extern void        mempoly(Memimage*, Point*, int, int, int, int,
       +                        Memimage*, Point, int);
       +extern void        memfillpoly(Memimage*, Point*, int, int,
       +                        Memimage*, Point, int);
       +extern void        _memfillpolysc(Memimage*, Point*, int, int,
       +                        Memimage*, Point, int, int, int, int);
       +extern void        memimagedraw(Memimage*, Rectangle, Memimage*, Point,
       +                        Memimage*, Point, int);
       +extern int        hwdraw(Memdrawparam*);
       +extern void        memimageline(Memimage*, Point, Point, int, int, int,
       +                        Memimage*, Point, int);
       +extern void        _memimageline(Memimage*, Point, Point, int, int, int,
       +                        Memimage*, Point, Rectangle, int);
       +extern Point        memimagestring(Memimage*, Point, Memimage*, Point,
       +                        Memsubfont*, char*);
       +extern void        memellipse(Memimage*, Point, int, int, int,
       +                        Memimage*, Point, int);
       +extern void        memarc(Memimage*, Point, int, int, int, Memimage*,
       +                        Point, int, int, int);
       +extern Rectangle memlinebbox(Point, Point, int, int, int);
       +extern int        memlineendsize(int);
       +extern void        _memmkcmap(void);
       +extern void        memimageinit(void);
       +
       +/*
       + * Subfont management
       + */
       +extern Memsubfont*        allocmemsubfont(char*, int, int, int, Fontchar*, Memimage*);
       +extern Memsubfont*        openmemsubfont(char*);
       +extern void                freememsubfont(Memsubfont*);
       +extern Point                memsubfontwidth(Memsubfont*, char*);
       +extern Memsubfont*        getmemdefont(void);
       +
       +/*
       + * Predefined 
       + */
       +extern        Memimage*        memwhite;
       +extern        Memimage*        memblack;
       +extern        Memimage*        memopaque;
       +extern        Memimage*        memtransparent;
       +extern        Memcmap*        memdefcmap;
       +
       +/*
       + * Kernel interface
       + */
       +void                        memimagemove(void*, void*);
       +
       +/*
       + * Kernel cruft
       + */
       +extern void                rdb(void);
       +extern int                iprint(char*, ...);
       +extern int                drawdebug;
       +
       +/*
       + * For other implementations, like x11.
       + */
       +extern void                _memfillcolor(Memimage*, u32int);
       +extern Memimage*        _allocmemimage(Rectangle, u32int);
       +extern int                _cloadmemimage(Memimage*, Rectangle, uchar*, int);
       +extern int                _loadmemimage(Memimage*, Rectangle, uchar*, int);
       +extern void                _freememimage(Memimage*);
       +extern u32int                _rgbatoimg(Memimage*, u32int);
       +extern u32int                _imgtorgba(Memimage*, u32int);
       +extern u32int                _pixelbits(Memimage*, Point);
       +extern int                _unloadmemimage(Memimage*, Rectangle, uchar*, int);
       +extern Memdrawparam*        _memimagedrawsetup(Memimage*,
       +                                Rectangle, Memimage*, Point, Memimage*,
       +                                Point, int);
       +extern void                _memimagedraw(Memdrawparam*);
       +extern void                _drawreplacescreenimage(Memimage*);
 (DIR) diff --git a/include/memlayer.h b/include/memlayer.h
       t@@ -0,0 +1,48 @@
       +typedef struct Memscreen Memscreen;
       +typedef void (*Refreshfn)(Memimage*, Rectangle, void*);
       +
       +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;                /* function to call to refresh obscured parts if save==nil */
       +        void                *refreshptr;        /* argument to refreshfn */
       +};
       +
       +/*
       + * These functions accept local coordinates
       + */
       +int                        memload(Memimage*, Rectangle, uchar*, int, int);
       +int                        memunload(Memimage*, Rectangle, uchar*, int);
       +
       +/*
       + * All these functions accept screen coordinates, not local ones.
       + */
       +void                        _memlayerop(void (*fn)(Memimage*, Rectangle, Rectangle, void*, int), Memimage*, Rectangle, Rectangle, void*);
       +Memimage*        memlalloc(Memscreen*, Rectangle, Refreshfn, void*, u32int);
       +void                        memldelete(Memimage*);
       +void                        memlfree(Memimage*);
       +void                        memltofront(Memimage*);
       +void                        memltofrontn(Memimage**, int);
       +void                        _memltofrontfill(Memimage*, int);
       +void                        memltorear(Memimage*);
       +void                        memltorearn(Memimage**, int);
       +int                        memlsetrefresh(Memimage*, Refreshfn, void*);
       +void                        memlhide(Memimage*, Rectangle);
       +void                        memlexpose(Memimage*, Rectangle);
       +void                        _memlsetclear(Memscreen*);
       +int                        memlorigin(Memimage*, Point, Point);
       +void                        memlnorefresh(Memimage*, Rectangle, void*);