📄 device.h
字号:
#define PIXEL233BLUE(pixelval) (((pixelval) >> 6) & 0x03)/* * Conversion from MWPIXELVAL to MWCOLORVAL *//* create RGB colorval (0x00BBGGRR) from 8/8/8 format pixel*/#define PIXEL888TOCOLORVAL(p) \ ((((p) & 0xff0000) >> 16) | ((p) & 0xff00) | (((p) & 0xff) << 16))/* create RGB colorval (0x00BBGGRR) from 5/6/5 format pixel*/#define PIXEL565TOCOLORVAL(p) \ ((((p) & 0xf800) >> 8) | (((p) & 0x07e0) << 5) | (((p) & 0x1f) << 19))#define PIXEL555TOCOLORVAL(p) \ ((((p) & 0x7c00) >> 7) | (((p) & 0x03e0) << 6) | (((p) & 0x1f) << 19))/* create RGB colorval (0x00BBGGRR) from 3/3/2 format pixel*/#define PIXEL332TOCOLORVAL(p) \ ((((p) & 0xe0)) | (((p) & 0x1c) << 11) | (((p) & 0x03) << 19))/* create RGB colorval (0x00BBGGRR) from 2/3/3 format pixel*/#define PIXEL233TOCOLORVAL(p) \ (((p) & 0x07) | (((p) & 0x38) << 5) | (((p) & 0xC0) << 14))#if (MWPIXEL_FORMAT == MWPF_TRUECOLOR888) || (MWPIXEL_FORMAT == MWPF_TRUECOLOR0888)#define RGB2PIXEL(r,g,b) RGB2PIXEL888(r,g,b)#define COLORVALTOPIXELVAL(c) COLOR2PIXEL888(c)#define PIXELVALTOCOLORVAL(p) PIXEL888TOCOLORVAL(p)#define PIXEL2RED(p) PIXEL888RED(p)#define PIXEL2GREEN(p) PIXEL888GREEN(p)#define PIXEL2BLUE(p) PIXEL888BLUE(p)#endif#if MWPIXEL_FORMAT == MWPF_TRUECOLOR565#define RGB2PIXEL(r,g,b) RGB2PIXEL565(r,g,b)#define COLORVALTOPIXELVAL(c) COLOR2PIXEL565(c)#define PIXELVALTOCOLORVAL(p) PIXEL565TOCOLORVAL(p)#define PIXEL2RED(p) PIXEL565RED(p)#define PIXEL2GREEN(p) PIXEL565GREEN(p)#define PIXEL2BLUE(p) PIXEL565BLUE(p)#endif#if MWPIXEL_FORMAT == MWPF_TRUECOLOR555#define RGB2PIXEL(r,g,b) RGB2PIXEL555(r,g,b)#define COLORVALTOPIXELVAL(c) COLOR2PIXEL555(c)#define PIXELVALTOCOLORVAL(p) PIXEL555TOCOLORVAL(p)#define PIXEL2RED(p) PIXEL555RED(p)#define PIXEL2GREEN(p) PIXEL555GREEN(p)#define PIXEL2BLUE(p) PIXEL555BLUE(p)#endif#if MWPIXEL_FORMAT == MWPF_TRUECOLOR332#define RGB2PIXEL(r,g,b) RGB2PIXEL332(r,g,b)#define COLORVALTOPIXELVAL(c) COLOR2PIXEL332(c)#define PIXELVALTOCOLORVAL(p) PIXEL332TOCOLORVAL(p)#define PIXEL2RED(p) PIXEL332RED(p)#define PIXEL2GREEN(p) PIXEL332GREEN(p)#define PIXEL2BLUE(p) PIXEL332BLUE(p)#endif#if MWPIXEL_FORMAT == MWPF_TRUECOLOR233#define RGB2PIXEL(r,g,b) RGB2PIXEL233(r,g,b)#define COLORVALTOPIXELVAL(c) COLOR2PIXEL233(c)#define PIXELVALTOCOLORVAL(p) PIXEL233TOCOLORVAL(p)#define PIXEL2RED(p) PIXEL233RED(p)#define PIXEL2GREEN(p) PIXEL233GREEN(p)#define PIXEL2BLUE(p) PIXEL233BLUE(p)#endif/* Alpha blend two pixels using 8-bit alpha *//* FIXME this will be quite a bit faster as an inlined function */#define ALPHAPIXELRED(pixelvalsrc, pixelvaldest, alpha) \ (unsigned char)((((PIXEL2RED(pixelvalsrc) - PIXEL2RED(pixelvaldest))\ * alpha) >> 8) + PIXEL2RED(pixelvaldest))#define ALPHAPIXELGREEN(pixelvalsrc, pixelvaldest, alpha) \ (unsigned char)((((PIXEL2GREEN(pixelvalsrc)-PIXEL2GREEN(pixelvaldest))\ * alpha) >> 8) + PIXEL2GREEN(pixelvaldest))#define ALPHAPIXELBLUE(pixelvalsrc, pixelvaldest, alpha) \ (unsigned char)((((PIXEL2BLUE(pixelvalsrc) - PIXEL2BLUE(pixelvaldest))\ * alpha) >> 8) + PIXEL2BLUE(pixelvaldest))#if 0000/* colors assumed in first 16 palette entries*//* note: don't use palette indices if the palette may * be reloaded. Use the RGB values instead. */#define BLACK PALINDEX(0) /* 0, 0, 0*/#define BLUE PALINDEX(1)#define GREEN PALINDEX(2)#define CYAN PALINDEX(3)#define RED PALINDEX(4)#define MAGENTA PALINDEX(5)#define BROWN PALINDEX(6)#define LTGRAY PALINDEX(7) /* 192, 192, 192*/#define GRAY PALINDEX(8) /* 128, 128, 128*/#define LTBLUE PALINDEX(9)#define LTGREEN PALINDEX(10)#define LTCYAN PALINDEX(11)#define LTRED PALINDEX(12)#define LTMAGENTA PALINDEX(13)#define YELLOW PALINDEX(14)#define WHITE PALINDEX(15) /* 255, 255, 255*/#endif/* GdMakePaletteConversionTable bLoadType types*/#define LOADPALETTE 1 /* load image palette into system palette*/#define MERGEPALETTE 2 /* merge image palette into system palette*//* entry points*//* devdraw.c*/PSD GdOpenScreen(void);void GdCloseScreen(PSD psd);int GdSetPortraitMode(PSD psd, int portraitmode);int GdSetMode(int mode);MWBOOL GdSetUseBackground(MWBOOL flag);MWPIXELVAL GdSetForeground(MWPIXELVAL fg);MWPIXELVAL GdSetBackground(MWPIXELVAL bg);void GdResetPalette(void);void GdSetPalette(PSD psd,int first, int count, MWPALENTRY *palette);int GdGetPalette(PSD psd,int first, int count, MWPALENTRY *palette);MWPIXELVAL GdFindColor(MWCOLORVAL c);MWPIXELVAL GdFindNearestColor(MWPALENTRY *pal, int size, MWCOLORVAL cr);int GdCaptureScreen(char *path);void GdGetScreenInfo(PSD psd,PMWSCREENINFO psi);void GdPoint(PSD psd,MWCOORD x, MWCOORD y);void GdLine(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2,MWCOORD y2, MWBOOL bDrawLastPoint);void GdRect(PSD psd,MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height);void GdFillRect(PSD psd,MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height);void GdBitmap(PSD psd,MWCOORD x,MWCOORD y,MWCOORD width,MWCOORD height, MWIMAGEBITS *imagebits);MWBOOL GdColorInPalette(MWCOLORVAL cr,MWPALENTRY *palette,int palsize);void GdMakePaletteConversionTable(PSD psd,MWPALENTRY *palette,int palsize, MWPIXELVAL *convtable,int fLoadType);void GdDrawImage(PSD psd,MWCOORD x, MWCOORD y, PMWIMAGEHDR pimage);void GdPoly(PSD psd,int count, MWPOINT *points);void GdFillPoly(PSD psd,int count, MWPOINT *points);void GdReadArea(PSD psd,MWCOORD x,MWCOORD y,MWCOORD width,MWCOORD height, MWPIXELVAL *pixels);void GdArea(PSD psd,MWCOORD x,MWCOORD y,MWCOORD width,MWCOORD height, void *pixels, int pixtype);void GdTranslateArea(MWCOORD width, MWCOORD height, void *in, int inpixtype, MWCOORD inpitch, void *out, int outpixtype, int outpitch);void GdCopyArea(PSD psd,MWCOORD srcx,MWCOORD srcy,MWCOORD width, MWCOORD height, MWCOORD destx, MWCOORD desty);void GdBlit(PSD dstpsd, MWCOORD dstx, MWCOORD dsty, MWCOORD width, MWCOORD height,PSD srcpsd,MWCOORD srcx,MWCOORD srcy,long rop);void GdStretchBlit(PSD dstpsd, MWCOORD dstx, MWCOORD dsty, MWCOORD dstw, MWCOORD dsth, PSD srcpsd, MWCOORD srcx, MWCOORD srcy, MWCOORD srcw, MWCOORD srch, long rop);int GdCalcMemGCAlloc(PSD psd, unsigned int width, unsigned int height, int planes, int bpp, int *size, int *linelen);extern SCREENDEVICE scrdev;/* devarc.c*//* requires float*/void GdArcAngle(PSD psd, MWCOORD x0, MWCOORD y0, MWCOORD rx, MWCOORD ry, MWCOORD angle1, MWCOORD angle2, int type);/* integer only*/void GdArc(PSD psd, MWCOORD x0, MWCOORD y0, MWCOORD rx, MWCOORD ry, MWCOORD ax, MWCOORD ay, MWCOORD bx, MWCOORD by, int type);void GdEllipse(PSD psd,MWCOORD x, MWCOORD y, MWCOORD rx, MWCOORD ry, MWBOOL fill);/* devfont.c*/void GdClearFontList(void);int GdAddFont(char *fndry, char *family, char *fontname, PMWLOGFONT lf, unsigned int flags);PMWFONT GdSetFont(PMWFONT pfont);PMWFONT GdCreateFont(PSD psd, const char *name, MWCOORD height, const PMWLOGFONT plogfont);MWCOORD GdSetFontSize(PMWFONT pfont, MWCOORD fontsize);void GdGetFontList(MWFONTLIST ***list, int *num);void GdFreeFontList(MWFONTLIST ***list, int num);int GdSetFontRotation(PMWFONT pfont, int tenthdegrees);int GdSetFontAttr(PMWFONT pfont, int setflags, int clrflags);void GdDestroyFont(PMWFONT pfont);MWBOOL GdGetFontInfo(PMWFONT pfont, PMWFONTINFO pfontinfo);int GdConvertEncoding(const void *istr, int iflags, int cc, void *ostr, int oflags);void GdGetTextSize(PMWFONT pfont, const void *str, int cc, MWCOORD *pwidth, MWCOORD *pheight, MWCOORD *pbase, int flags);int GdGetTextSizeEx(PMWFONT pfont, const void *str, int cc, int nMaxExtent, int *lpnFit, int *alpDx, MWCOORD *pwidth, MWCOORD *pheight, MWCOORD *pbase, int flags); void GdText(PSD psd,MWCOORD x,MWCOORD y,const void *str,int count,int flags);/* devclip1.c*/void GdSetClipRects(PSD psd,int count,MWCLIPRECT *table);MWBOOL GdClipPoint(PSD psd,MWCOORD x,MWCOORD y);int GdClipArea(PSD psd,MWCOORD x1, MWCOORD y1, MWCOORD x2, MWCOORD y2);extern MWCOORD clipminx, clipminy, clipmaxx, clipmaxy;/* devclip2.c*/void GdSetClipRegion(PSD psd, MWCLIPREGION *reg);/* devrgn.c - multi-rectangle region entry points*/MWBOOL GdPtInRegion(MWCLIPREGION *rgn, MWCOORD x, MWCOORD y);int GdRectInRegion(MWCLIPREGION *rgn, const MWRECT *rect);MWBOOL GdEqualRegion(MWCLIPREGION *r1, MWCLIPREGION *r2);MWBOOL GdEmptyRegion(MWCLIPREGION *rgn);MWCLIPREGION *GdAllocRegion(void);MWCLIPREGION *GdAllocRectRegion(MWCOORD left,MWCOORD top,MWCOORD right,MWCOORD bottom);MWCLIPREGION *GdAllocRectRegionIndirect(MWRECT *prc);void GdSetRectRegion(MWCLIPREGION *rgn, MWCOORD left, MWCOORD top, MWCOORD right, MWCOORD bottom);void GdSetRectRegionIndirect(MWCLIPREGION *rgn, MWRECT *prc);void GdDestroyRegion(MWCLIPREGION *rgn);void GdOffsetRegion(MWCLIPREGION *rgn, MWCOORD x, MWCOORD y);int GdGetRegionBox(MWCLIPREGION *rgn, MWRECT *prc);void GdUnionRectWithRegion(const MWRECT *rect, MWCLIPREGION *rgn);void GdSubtractRectFromRegion(const MWRECT *rect, MWCLIPREGION *rgn);void GdCopyRegion(MWCLIPREGION *d, MWCLIPREGION *s);void GdIntersectRegion(MWCLIPREGION *d, MWCLIPREGION *s1, MWCLIPREGION *s2);void GdUnionRegion(MWCLIPREGION *d, MWCLIPREGION *s1, MWCLIPREGION *s2);void GdSubtractRegion(MWCLIPREGION *d, MWCLIPREGION *s1, MWCLIPREGION *s2);void GdXorRegion(MWCLIPREGION *d, MWCLIPREGION *s1, MWCLIPREGION *s2);/* devrgn2.c*/MWCLIPREGION *GdAllocPolygonRegion(MWPOINT *points, int count, int mode);MWCLIPREGION *GdAllocPolyPolygonRegion(MWPOINT *points, int *count, int nbpolygons, int mode);/* devmouse.c*/int GdOpenMouse(void);void GdCloseMouse(void);void GdGetButtonInfo(int *buttons);void GdRestrictMouse(MWCOORD newminx,MWCOORD newminy,MWCOORD newmaxx, MWCOORD newmaxy);void GdSetAccelMouse(int newthresh, int newscale);void GdMoveMouse(MWCOORD newx, MWCOORD newy);int GdReadMouse(MWCOORD *px, MWCOORD *py, int *pb);void GdMoveCursor(MWCOORD x, MWCOORD y);MWBOOL GdGetCursorPos(MWCOORD *px, MWCOORD *py);void GdSetCursor(PMWCURSOR pcursor);int GdShowCursor(PSD psd);int GdHideCursor(PSD psd);void GdCheckCursor(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2,MWCOORD y2);void GdFixCursor(PSD psd);extern MOUSEDEVICE mousedev;/* devkbd.c*/int GdOpenKeyboard(void);void GdCloseKeyboard(void);void GdGetModifierInfo(MWKEYMOD *modifiers, MWKEYMOD *curmodifiers);int GdReadKeyboard(MWKEY *buf, MWKEYMOD *modifiers, MWSCANCODE *scancode);extern KBDDEVICE kbddev;/* devimage.c */int GdLoadImageFromBuffer(PSD psd, void *buffer, int size, int flags);void GdDrawImageFromBuffer(PSD psd, MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height, void *buffer, int size, int flags);void GdDrawImageFromFile(PSD psd, MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height, char *path, int flags);int GdLoadImageFromFile(PSD psd, char *path, int flags);void GdDrawImageToFit(PSD psd, MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height, int id);void GdFreeImage(int id);MWBOOL GdGetImageInfo(int id, PMWIMAGEINFO pii);void GdStretchImage(PMWIMAGEHDR src, MWCLIPRECT *srcrect, PMWIMAGEHDR dst, MWCLIPRECT *dstrect);/* devlist.c*//* field offset*/#define MWITEM_OFFSET(type, field) ((long)&(((type *)0)->field))void * GdItemAlloc(unsigned int size);void GdListAdd(PMWLISTHEAD pHead,PMWLIST pItem);void GdListInsert(PMWLISTHEAD pHead,PMWLIST pItem);void GdListRemove(PMWLISTHEAD pHead,PMWLIST pItem);#define GdItemNew(type) ((type *)GdItemAlloc(sizeof(type)))#define GdItemFree(ptr) free((void *)ptr)/* return base item address from list ptr*/#define GdItemAddr(p,type,list) ((type *)((long)p - MWITEM_OFFSET(type,list)))#if UNIX || DOS_DJGPP#include <sys/time.h>typedef void (*MWTIMERCB)(void *);#define MWTIMER_ONESHOT 0 #define MWTIMER_PERIODIC 1typedef struct mw_timer MWTIMER;struct mw_timer { struct timeval timeout; MWTIMERCB callback; void *arg; MWTIMER *next; MWTIMER *prev; int type; /* MWTIMER_ONESHOT or MWTIMER_PERIODIC */ MWTIMEOUT period;};MWTIMER *GdAddTimer(MWTIMEOUT timeout, MWTIMERCB callback, void *arg);MWTIMER *GdAddPeriodicTimer(MWTIMEOUT timeout, MWTIMERCB callback, void *arg);void GdDestroyTimer(MWTIMER *timer);MWTIMER *GdFindTimer(void *arg);MWBOOL GdGetNextTimeout(struct timeval *tv, MWTIMEOUT timeout);MWBOOL GdTimeout(void);#endif/* error.c*/int GdError(const char *format, ...);int GdErrorNull(const char *format, ...); /* doesn't print msgs */#ifdef USE_ALLOCA/* alloca() is available, so use it for better performance */#define ALLOCA(size) alloca(size)#define FREEA(pmem)#else/* no alloca(), so use malloc()/free() instead */#define ALLOCA(size) malloc(size)#define FREEA(pmem) free(pmem)#endif/* no assert() in MSDOS or ELKS...*/#if MSDOS | ELKS#undef assert#define assert(x)#endif/* RTEMS requires rtems_main()*/#if __rtems__#define main rtems_main#endif#if !_MINIX#ifndef __rtems__#define HAVESELECT 1 /* has select system call*/#endif#endif#endif /*_DEVICE_H*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -