memdraw.h - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       memdraw.h (6143B)
       ---
            1 
            2 typedef struct        Memimage Memimage;
            3 typedef struct        Memdata Memdata;
            4 typedef struct        Memsubfont Memsubfont;
            5 typedef struct        Memlayer Memlayer;
            6 typedef struct        Memcmap Memcmap;
            7 typedef struct        Memdrawparam        Memdrawparam;
            8 
            9 
           10 /*
           11  * Memdata is allocated from main pool, but .data from the image pool.
           12  * Memdata is allocated separately to permit patching its pointer after
           13  * compaction when windows share the image data.
           14  * The first word of data is a back pointer to the Memdata, to find
           15  * The word to patch.
           16  */
           17 
           18 struct Memdata
           19 {
           20         uint32        *base;        /* allocated data pointer */
           21         uchar        *bdata;        /* pointer to first byte of actual data; word-aligned */
           22         int                ref;                /* number of Memimages using this data */
           23         void*        imref;
           24         int                allocd;        /* is this malloc'd? */
           25 };
           26 
           27 enum {
           28         Frepl                = 1<<0,        /* is replicated */
           29         Fsimple        = 1<<1,        /* is 1x1 */
           30         Fgrey        = 1<<2,        /* is grey */
           31         Falpha        = 1<<3,        /* has explicit alpha */
           32         Fcmap        = 1<<4,        /* has cmap channel */
           33         Fbytes        = 1<<5,        /* has only 8-bit channels */
           34 };
           35 
           36 struct Memimage
           37 {
           38         Rectangle        r;                /* rectangle in data area, local coords */
           39         Rectangle        clipr;                /* clipping region */
           40         int                depth;        /* number of bits of storage per pixel */
           41         int                nchan;        /* number of channels */
           42         uint32        chan;        /* channel descriptions */
           43         Memcmap        *cmap;
           44 
           45         Memdata        *data;        /* pointer to data; shared by windows in this image */
           46         int                zero;                /* data->bdata+zero==&byte containing (0,0) */
           47         uint32        width;        /* width in words of a single scan line */
           48         Memlayer        *layer;        /* nil if not a layer*/
           49         uint32        flags;
           50 
           51         int                shift[NChan];
           52         int                mask[NChan];
           53         int                nbits[NChan];
           54         void        *x;
           55 };
           56 
           57 struct Memcmap
           58 {
           59         uchar        cmap2rgb[3*256];
           60         uchar        rgb2cmap[16*16*16];
           61 };
           62 
           63 /*
           64  * Subfonts
           65  *
           66  * given char c, Subfont *f, Fontchar *i, and Point p, one says
           67  *        i = f->info+c;
           68  *        draw(b, Rect(p.x+i->left, p.y+i->top,
           69  *                p.x+i->left+((i+1)->x-i->x), p.y+i->bottom),
           70  *                color, f->bits, Pt(i->x, i->top));
           71  *        p.x += i->width;
           72  * to draw characters in the specified color (itself a Memimage) in Memimage b.
           73  */
           74 
           75 struct        Memsubfont
           76 {
           77         char                *name;
           78         short        n;                /* number of chars in font */
           79         uchar        height;                /* height of bitmap */
           80         char        ascent;                /* top of bitmap to baseline */
           81         Fontchar *info;                /* n+1 character descriptors */
           82         Memimage        *bits;                /* of font */
           83 };
           84 
           85 /*
           86  * Encapsulated parameters and information for sub-draw routines.
           87  */
           88 enum {
           89         Simplesrc=1<<0,
           90         Simplemask=1<<1,
           91         Replsrc=1<<2,
           92         Replmask=1<<3,
           93         Fullsrc=1<<4,
           94         Fullmask=1<<5,
           95 };
           96 struct        Memdrawparam
           97 {
           98         Memimage *dst;
           99         Rectangle        r;
          100         Memimage *src;
          101         Rectangle sr;
          102         Memimage *mask;
          103         Rectangle mr;
          104         int op;
          105 
          106         uint32 state;
          107         uint32 mval;        /* if Simplemask, the mask pixel in mask format */
          108         uint32 mrgba;        /* mval in rgba */
          109         uint32 sval;        /* if Simplesrc, the source pixel in src format */
          110         uint32 srgba;        /* sval in rgba */
          111         uint32 sdval;        /* sval in dst format */
          112 };
          113 
          114 /*
          115  * Memimage management
          116  */
          117 
          118 extern Memimage*        allocmemimage(Rectangle, uint32);
          119 extern Memimage*        allocmemimaged(Rectangle, uint32, Memdata*, void*);
          120 extern Memimage*        readmemimage(int);
          121 extern Memimage*        creadmemimage(int);
          122 extern int        writememimage(int, Memimage*);
          123 extern void        freememimage(Memimage*);
          124 extern int                loadmemimage(Memimage*, Rectangle, uchar*, int);
          125 extern int                cloadmemimage(Memimage*, Rectangle, uchar*, int);
          126 extern int                unloadmemimage(Memimage*, Rectangle, uchar*, int);
          127 extern uint32*        wordaddr(Memimage*, Point);
          128 extern uchar*        byteaddr(Memimage*, Point);
          129 extern int                drawclip(Memimage*, Rectangle*, Memimage*, Point*, Memimage*, Point*, Rectangle*, Rectangle*);
          130 extern void        memfillcolor(Memimage*, uint32);
          131 extern int                memsetchan(Memimage*, uint32);
          132 
          133 /*
          134  * Graphics
          135  */
          136 extern void        memdraw(Memimage*, Rectangle, Memimage*, Point, Memimage*, Point, int);
          137 extern void        memline(Memimage*, Point, Point, int, int, int, Memimage*, Point, int);
          138 extern void        mempoly(Memimage*, Point*, int, int, int, int, Memimage*, Point, int);
          139 extern void        memfillpoly(Memimage*, Point*, int, int, Memimage*, Point, int);
          140 extern void        _memfillpolysc(Memimage*, Point*, int, int, Memimage*, Point, int, int, int, int);
          141 extern void        memimagedraw(Memimage*, Rectangle, Memimage*, Point, Memimage*, Point, int);
          142 extern int        hwdraw(Memdrawparam*);
          143 extern void        memimageline(Memimage*, Point, Point, int, int, int, Memimage*, Point, int);
          144 extern void        _memimageline(Memimage*, Point, Point, int, int, int, Memimage*, Point, Rectangle, int);
          145 extern Point        memimagestring(Memimage*, Point, Memimage*, Point, Memsubfont*, char*);
          146 extern void        memellipse(Memimage*, Point, int, int, int, Memimage*, Point, int);
          147 extern void        memarc(Memimage*, Point, int, int, int, Memimage*, Point, int, int, int);
          148 extern Rectangle        memlinebbox(Point, Point, int, int, int);
          149 extern int        memlineendsize(int);
          150 extern void        _memmkcmap(void);
          151 extern void        memimageinit(void);
          152 
          153 /*
          154  * Subfont management
          155  */
          156 extern Memsubfont*        allocmemsubfont(char*, int, int, int, Fontchar*, Memimage*);
          157 extern Memsubfont*        openmemsubfont(char*);
          158 extern void        freememsubfont(Memsubfont*);
          159 extern Point        memsubfontwidth(Memsubfont*, char*);
          160 extern Memsubfont*        getmemdefont(void);
          161 
          162 /*
          163  * Predefined 
          164  */
          165 extern        Memimage*        memwhite;
          166 extern        Memimage*        memblack;
          167 extern        Memimage*        memopaque;
          168 extern        Memimage*        memtransparent;
          169 extern        Memcmap        *memdefcmap;
          170 
          171 /*
          172  * Kernel interface
          173  */
          174 void                memimagemove(void*, void*);
          175 
          176 /*
          177  * Kernel cruft
          178  */
          179 extern void        rdb(void);
          180 extern int                iprint(char*, ...);
          181 extern int                drawdebug;
          182 
          183 /*
          184  * doprint interface: numbconv bit strings
          185  */
          186 
          187 
          188 extern Memimage*        _allocmemimage(Rectangle, uint32);
          189 extern void        _freememimage(Memimage*);
          190 extern void        _memfillcolor(Memimage*, uint32);
          191 extern int        _loadmemimage(Memimage*, Rectangle, uchar*, int);
          192 extern int        _cloadmemimage(Memimage*, Rectangle, uchar*, int);
          193 extern int        _unloadmemimage(Memimage*, Rectangle, uchar*, int);
          194 extern void _memimageinit(void);
          195 extern Memdrawparam *_memimagedrawsetup(Memimage*, Rectangle, Memimage*, Point, Memimage*, Point, int);
          196 extern void _memimagedraw(Memdrawparam*);
          197 extern uint32 _rgbatoimg(Memimage*, uint32);
          198 extern uint32 _pixelbits(Memimage*, Point);
          199 extern uint32 _imgtorgba(Memimage*, uint32);
          200 
          201 extern uint32 rgbatoimg(Memimage*, uint32);
          202 extern uint32 pixelbits(Memimage*, Point);
          203 extern uint32 imgtorgba(Memimage*, uint32);