mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
Missed these.
This commit is contained in:
parent
522b0689c3
commit
55dedf713c
2 changed files with 257 additions and 0 deletions
209
include/memdraw.h
Normal file
209
include/memdraw.h
Normal file
|
@ -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*);
|
48
include/memlayer.h
Normal file
48
include/memlayer.h
Normal file
|
@ -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*);
|
Loading…
Reference in a new issue