📄 toolkit.h
字号:
pixelValue ( Toolkit* tk, jint rgb ){ int r,g,b; XColor xclr; switch ( tk->colorMode ) { case CM_PSEUDO_256: return tk->pclr->pix [JI8(JRED(rgb))] [JI8(JGREEN(rgb))] [JI8(JBLUE(rgb))]; case CM_TRUE: SIGNED_RSHIFT( b, (rgb & tk->tclr->blueMask), tk->tclr->blueShift); SIGNED_RSHIFT( g, (rgb & tk->tclr->greenMask), tk->tclr->greenShift); SIGNED_RSHIFT( r, (rgb & tk->tclr->redMask), tk->tclr->redShift); return ( b | g | r ); case CM_TRUE_888: return (rgb & 0xffffff); case CM_DIRECT: return (((jint)tk->dclr->redPix[JRED(rgb)] << tk->dclr->redShift) | ((jint)tk->dclr->greenPix[JGREEN(rgb)] << tk->dclr->greenShift) | ((jint)tk->dclr->bluePix[JBLUE(rgb)] << tk->dclr->blueShift)); default: /* * this is a generic fallback for "exotic" visuals and might be *awefully* * slow (esp. for images) because XAllocColor is a roundtrip */ xclr.red = (rgb & 0xff0000) >> 8; xclr.green = (rgb & 0xff00); xclr.blue = (rgb & 0xff) << 8; xclr.flags = DoRed | DoGreen | DoBlue; XAllocColor( tk->dsp, DefaultColormapOfScreen( DefaultScreenOfDisplay( tk->dsp)), &xclr); return xclr.pixel; }}static inline voidrgbValues ( Toolkit* tk, unsigned long pixel, int* r, int* g, int* b ){ Visual *v; XColor xclr; switch ( tk->colorMode ) { case CM_PSEUDO_256: *r = tk->pclr->rgb[(unsigned char)pixel].r; *g = tk->pclr->rgb[(unsigned char)pixel].g; *b = tk->pclr->rgb[(unsigned char)pixel].b; break; case CM_TRUE: v = DefaultVisual( tk->dsp, DefaultScreen( tk->dsp)); SIGNED_LSHIFT( *r, (pixel & v->red_mask), tk->tclr->redShift); SIGNED_LSHIFT( *g, (pixel & v->green_mask), tk->tclr->greenShift); SIGNED_LSHIFT( *b, (pixel & v->blue_mask), tk->tclr->blueShift); *r >>= 16; *g >>= 8; break;/* *r = ((pixel & v->red_mask) << tk->tclr->redShift) >> 16; *g = ((pixel & v->green_mask) << tk->tclr->greenShift) >> 8; *b = ((pixel & v->blue_mask) << tk->tclr->blueShift); break;*/ case CM_TRUE_888: *r = JRED( pixel); *g = JGREEN( pixel); *b = JBLUE( pixel); break; case CM_DIRECT: v = DefaultVisual( tk->dsp, DefaultScreen( tk->dsp)); *r = tk->dclr->red[ ((pixel & v->red_mask) >> tk->dclr->redShift) ]; *g = tk->dclr->green[ ((pixel & v->green_mask) >> tk->dclr->greenShift) ]; *b = tk->dclr->blue[ ((pixel & v->blue_mask) >> tk->dclr->blueShift) ]; break; default: /* * this is a generic fallback for "exotic" visuals and might be *awefully* * slow (esp. for images) because XAllocColor is a roundtrip */ xclr.pixel = pixel; XQueryColor( tk->dsp, DefaultColormapOfScreen( DefaultScreenOfDisplay( tk->dsp)), &xclr); *r = xclr.red >> 8; *g = xclr.green >> 8; *b = xclr.blue >> 8; break; }}/***************************************************************************************** * image functions */Image* createImage ( int width, int height);void createXMaskImage ( Toolkit* tk, Image* img );void createXImage ( Toolkit* tk, Image* img );void createAlphaImage ( Toolkit* tk, Image* img );void initScaledImage ( Toolkit* tk, Image *tgt, Image *src, int dx0, int dy0, int dx1, int dy1, int sx0, int sy0, int sx1, int sy1 );static inline voidPutAlpha ( AlphaImage* img, int col, int row, unsigned char alpha ){ img->buf[ row*img->width + col ] = alpha;}static inline intGetAlpha ( AlphaImage* img, int col, int row ){ return img->buf[ row*img->width + col];}/***************************************************************************************** * clipboard functions */jobject selectionClear ( JNIEnv* env, Toolkit* tk );jobject selectionRequest ( JNIEnv* env, Toolkit* tk );/***************************************************************************************** * async (multithreaded) macros * this can be used to solve the problem of deferred drawing requests, not being * flushed because of infrequent (non-polled) XNextEvent calls. * (for now, we go with a backgound flush thread) */#define XFLUSH(_X,_force)/***************************************************************************************** * file io wrapper macros (for image production) */#define AWT_OPEN(_file) open(_file, 0)#define AWT_REWIND(_fd) lseek(_fd, 0, SEEK_SET)#define AWT_SETPOS(_fd,_off) lseek(_fd, _off, SEEK_CUR)#define AWT_READ(_fd,_buf,_count) read(_fd,_buf,_count)#define AWT_CLOSE(_fd) close(_fd)/***************************************************************************************** * macros to manage the source table (conversion of X windows to/from indices, which * are consistent with the AWTEvent.sources array) */#define WND_FRAME 0x01#define WND_WINDOW 0x02#define WND_DIALOG 0x04#define WND_MAPPED 0x08#define WND_DESTROYED 0x10static inline int getFreeSourceIdx ( Toolkit* tk, Window wnd ) { register int i, n; /* * we don't use a double hashing here because collisions are very unlikely * (window IDs usually already are hashed, so it does not make sense to * hash them again - we just could make it worse */ for ( i = (unsigned long)wnd, n=0; n < tk->nWindows; i++, n++ ) { i %= tk->nWindows; if ( (int)(tk->windows[i].w) <= 0 ) { tk->srcIdx = i; tk->lastWindow = wnd; return i; } } return -1;}static inline int getSourceIdx ( Toolkit* tk, Window w ){ int n; register int i; if ( w == X->lastWindow ){ return X->srcIdx; } else { for ( i = (unsigned long) w, n=0; n < tk->nWindows; i++, n++ ) { i %= tk->nWindows; if ( tk->windows[i].w == w ){ tk->srcIdx = i; tk->lastWindow = w; return tk->srcIdx; } else if ( tk->windows[i].w == 0 ){ return -1; } } return -1; }}static inline int checkSource ( Toolkit* tk, int idx ){ return ( (idx >= 0) && (idx < tk->nWindows) && (tk->windows[idx].w) );}/***************************************************************************************** * focus forwarding */#define FWD_SET 0 /* set focus forwarding */#define FWD_CLEAR 1 /* reset focus forwarding */#define FWD_REVERT 2 /* reset focus on owner */static inline void resetFocusForwarding ( Toolkit* tk ){ tk->fwdIdx = -1; tk->focusFwd = 0;}extern void forwardFocus( int cmd, Window wnd );/***************************************************************************************** * Macros to implement keyboard handling for owned windows (which don't ever get * the X focus). This is done by means of forwarding and generation of "artificial" * focus events (generated from clientMessages. */#define USE_POLLING_AWT 1/* Clipboard */typedef void ClipBoard;extern jobject Java_java_awt_Toolkit_cbdInitClipboard ( JNIEnv* env, jclass clazz );extern void Java_java_awt_Toolkit_cbdFreeClipboard ( JNIEnv* env, jclass clazz, ClipBoard* cbd );extern jboolean Java_java_awt_Toolkit_cbdSetOwner ( JNIEnv* env, jclass clazz, ClipBoard* cbd );extern jobject Java_java_awt_Toolkit_cbdGetContents ( JNIEnv* env, jclass clazz, ClipBoard* cbd );/* Color */extern jint Java_java_awt_Toolkit_clrGetPixelValue ( JNIEnv* env, jclass clazz, jint rgb );extern void Java_java_awt_Toolkit_clrSetSystemColors ( JNIEnv* env, jclass clazz, jintArray sysClrs );extern jobject Java_java_awt_Toolkit_clrGetColorModel ( JNIEnv* env, jclass clazz );/* Event */extern jobject Java_java_awt_Toolkit_evtInit ( JNIEnv* env, jclass clazz );extern jobject Java_java_awt_Toolkit_evtGetNextEvent ( JNIEnv* env, jclass clazz );extern jobject Java_java_awt_Toolkit_evtPeekEvent ( JNIEnv* env, jclass clazz );extern jobject Java_java_awt_Toolkit_evtPeekEventId ( JNIEnv* env, jclass clazz, jint id );extern void Java_java_awt_Toolkit_evtWakeup ( JNIEnv* env, jclass clazz );extern void Java_java_awt_Toolkit_evtSendWMEvent ( JNIEnv* env, jclass clazz, jobject wmEvt );extern jint Java_java_awt_Toolkit_evtRegisterSource ( JNIEnv* env, jclass clazz, jobject wnd );extern jint Java_java_awt_Toolkit_evtUnregisterSource ( JNIEnv* env, jclass clazz, jobject wnd );/* Font */extern void* Java_java_awt_Toolkit_fntInitFont ( JNIEnv* env, jclass clazz, jstring jSpec, jint style, jint size );#ifdef KAFFE_I18N#define KAFFE_FONT_FUNC_DECL( ret, name, args... ) ret name( JNIEnv* env, jclass clazz, jobject xoc , ## args )#define UNVEIL_XOC(xoc) ((XOC)JCL_GetRawData (env, xoc))#else#define KAFFE_FONT_FUNC_DECL( ret, name, args... ) ret name( JNIEnv* env, jclass clazz, jobject fs , ## args )#define UNVEIL_FS(fs) ((XFontStruct *)JCL_GetRawData (env, fs))#endifextern KAFFE_FONT_FUNC_DECL( void, Java_java_awt_Toolkit_fntFreeFont );extern KAFFE_FONT_FUNC_DECL( void *, Java_java_awt_Toolkit_fntInitFontMetrics );extern KAFFE_FONT_FUNC_DECL( void, Java_java_awt_Toolkit_fntFreeFontMetrics );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntGetAscent );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntGetDescent );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntGetFixedWidth );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntGetHeight );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntGetLeading );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntGetMaxAdvance );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntGetMaxAscent );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntGetMaxDescent );extern KAFFE_FONT_FUNC_DECL( jboolean, Java_java_awt_Toolkit_fntIsWideFont );extern KAFFE_FONT_FUNC_DECL( jobject, Java_java_awt_Toolkit_fntGetWidths );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntBytesWidth, jbyteArray jBytes, jint off, jint len );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntCharWidth, jchar jChar );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntCharsWidth, jcharArray jChars, jint off, jint len );extern KAFFE_FONT_FUNC_DECL( jint, Java_java_awt_Toolkit_fntStringWidth, jstring jStr );/* Graphics */typedef struct { GC gc; Drawable drw;#ifdef KAFFE_I18N XOC oc;#endif int fg; int bg; char xor; int xclr; int x0; int y0;} Graphics;#define WINDOW 0#define IMAGE 1#define GRAPHICS 2#define KAFFE_GRA_FUNC_DECL( ret, name, args... ) ret name( JNIEnv* env, jclass clazz, jobject ngr , ## args )#define UNVEIL_GR(ngr) ((Graphics *)JCL_GetRawData(env, ngr))extern KAFFE_GRA_FUNC_DECL( jobject, Java_java_awt_Toolkit_graInitGraphics, jobject tgt, jint tgtType, jint xOff, jint yOff, jint xClip, jint yClip, jint wClip, jint hClip, jobject fnt, jint fg, jint bg, jboolean blank );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graFreeGraphics );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graCopyArea, jint x, jint y, jint width, jint height, jint xDelta, jint yDelta );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graClearRect, jint x, jint y, jint width, jint height );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawBytes, jbyteArray jBytes, jint offset, jint len, jint x, jint y );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawChars, jcharArray jChars, jint offset, jint len, jint x, jint y );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawString, jstring str, jint x, jint y );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawLine, jint x1, jint y1, jint x2, jint y2 );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawArc, jint x, jint y, jint width, jint height, jint startAngle, jint arcAngle );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graFillArc, jint x, jint y, jint width, jint height, jint startAngle, jint arcAngle );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawOval, jint x, jint y, jint width, jint height );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graFillOval, jint x, jint y, jint width, jint height );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawPolygon, jintArray xPoints, jintArray yPoints, jint nPoints );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawPolyline, jintArray xPoints, jintArray yPoints, jint nPoints );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graFillPolygon, jintArray xPoints, jintArray yPoints, jint nPoints );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawRect, jint x, jint y, jint width, jint height );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graFillRect, jint x, jint y, jint width, jint height );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawRoundRect, jint x, jint y, jint width, jint height, jint wArc, jint hArc );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graFillRoundRect, jint x, jint y, jint width, jint height, jint wArc, jint hArc );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDraw3DRect, jint x, jint y, jint width, jint height, jboolean raised, jint rgb );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graFill3DRect, jint x, jint y, jint width, jint height, jboolean raised, jint rgb );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graAddClip, jint xClip, jint yClip, jint wClip, jint hClip );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graSetClip, jint xClip, jint yClip, jint wClip, jint hClip );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graSetColor, jint clr );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graSetBackColor, jint clr );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graSetFont, jobject fnt );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graSetOffset, jint xOff, jint yOff );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graSetPaintMode );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graSetXORMode, jint xorClr );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graSetVisible, jint isVisible );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawImage, jobject img, jint srcX, jint srcY, jint dstX, jint dstY, jint width, jint height, jint bgval );extern KAFFE_GRA_FUNC_DECL( void, Java_java_awt_Toolkit_graDrawImageScaled, jobject img, jint dx0, jint dy0, jint dx1, jint dy1, jint sx0, jint sy0, jint sx1, jint sy1, jint bgval ); /* Image */#define KAFFE_CREATE_IMG_FUNC_DECL( ret, name, args... ) ret name( JNIEnv* env, jclass clazz , ## args )#define KAFFE_IMG_FUNC_DECL( ret, name, args... ) ret name( JNIEnv* env, jclass clazz, jobject nimg , ## args )#define UNVEIL_IMG(nimg) ((Image *)JCL_GetRawData(env, nimg))extern KAFFE_CREATE_IMG_FUNC_DECL( jobject, Java_java_awt_Toolkit_imgCreateImage, jint width, jint height );extern KAFFE_CREATE_IMG_FUNC_DECL( jobject, Java_java_awt_Toolkit_imgCreateScreenImage, jint width, jint height );extern KAFFE_IMG_FUNC_DECL( void, Java_java_awt_Toolkit_imgSetIdxPels, jint x, jint y, jint w, jint h, jintArray clrMap, jbyteArray idxPels, jint trans, jint off, jint scan );extern KAFFE_IMG_FUNC_DECL( void, Java_java_awt_Toolkit_imgSetRGBPels, jint x, jint y, jint w, jint h, jintArray rgbPels, jint off, jint scan );extern KAFFE_IMG_FUNC_DECL( void, Java_java_awt_Toolkit_imgComplete, jint status );extern KAFFE_IMG_FUNC_DECL( void, Java_java_awt_Toolkit_imgFreeImage );extern void imgFreeImage( Image *img );extern KAFFE_IMG_FUNC_DECL( jobject, Java_java_awt_Toolkit_imgCreateScaledImage, int width, int height );extern KAFFE_CREATE_IMG_FUNC_DECL( void, Java_java_awt_Toolkit_imgProduceImage, jobject producer, jobject nimg );extern KAFFE_CREATE_IMG_FUNC_DECL( jobject, Java_java_awt_Toolkit_imgCreateFromFile, jstring fileName );extern KAFFE_CREATE_IMG_FUNC_DECL( jobject, Java_java_awt_Toolkit_imgCreateFromData, jbyteArray jbuffer, jint off, jint len );extern KAFFE_IMG_FUNC_DECL( jobject, Java_java_awt_Toolkit_imgSetFrame, int frameNo );extern KAFFE_IMG_FUNC_DECL( jint, Java_java_awt_Toolkit_imgGetWidth );extern KAFFE_IMG_FUNC_DECL( jint, Java_java_awt_Toolkit_imgGetHeight );extern KAFFE_IMG_FUNC_DECL( jboolean, Java_java_awt_Toolkit_imgIsMultiFrame );extern KAFFE_IMG_FUNC_DECL( jint, Java_java_awt_Toolkit_imgGetLatency );extern KAFFE_IMG_FUNC_DECL( jobject, Java_java_awt_Toolkit_imgGetNextFrame );/* Window */#define KAFFE_GLBL_WND_FUNC_DECL( ret, name, args... ) ret name( JNIEnv* env, jclass clazz, ## args )#define KAFFE_WND_FUNC_DECL( ret, name, args... ) ret name( JNIEnv* env, jclass clazz, jobject nwnd , ## args )#define UNVEIL_WND(wnd) ((Window)JCL_GetRawData(env, wnd))extern KAFFE_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndSetTitle, jstring jTitle );extern KAFFE_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndSetResizable, jboolean isResizable, int x, int y, int width, int height );extern KAFFE_GLBL_WND_FUNC_DECL( jobject, Java_java_awt_Toolkit_wndCreateFrame, jstring jTitle, jint x, jint y, jint width, jint height, jint jCursor, jint clrBack, jboolean isResizable );extern KAFFE_GLBL_WND_FUNC_DECL( jobject, Java_java_awt_Toolkit_wndCreateWindow, jobject nowner, jint x, jint y, jint width, jint height, jint jCursor, jint clrBack );extern KAFFE_GLBL_WND_FUNC_DECL( jobject, Java_java_awt_Toolkit_wndCreateDialog, jobject nowner, jstring jTitle, jint x, jint y, jint width, jint height, jint jCursor, jint clrBack, jboolean isResizable );extern KAFFE_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndDestroyWindow );extern KAFFE_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndRequestFocus );extern KAFFE_GLBL_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndSetFrameInsets, jint top, jint left, jint bottom, jint right );extern KAFFE_GLBL_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndSetDialogInsets, jint top, jint left, jint bottom, jint right );extern KAFFE_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndSetBounds, jint x, jint y, jint width, jint height, jboolean isResizable );extern KAFFE_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndRepaint, jint x, jint y, jint width, jint height );extern KAFFE_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndSetIcon, jobject nimg );extern KAFFE_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndSetVisible, jboolean showIt );extern KAFFE_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndToBack );extern KAFFE_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndToFront );extern KAFFE_WND_FUNC_DECL( void, Java_java_awt_Toolkit_wndSetCursor, jint jCursor );/* Toolkit */#define KAFFE_TLK_FUNC_DECL( ret, name, args... ) ret name( JNIEnv* env, jclass clazz , ## args )extern KAFFE_TLK_FUNC_DECL( jint, Java_java_awt_Toolkit_tlkProperties );extern KAFFE_TLK_FUNC_DECL( jboolean, Java_java_awt_Toolkit_tlkInit, jstring name );extern KAFFE_TLK_FUNC_DECL( void, Java_java_awt_Toolkit_tlkTerminate );extern KAFFE_TLK_FUNC_DECL( jstring, Java_java_awt_Toolkit_tlkVersion );extern KAFFE_TLK_FUNC_DECL( jint, Java_java_awt_Toolkit_tlkGetResolution );extern KAFFE_TLK_FUNC_DECL( jint, Java_java_awt_Toolkit_tlkGetScreenHeight );extern KAFFE_TLK_FUNC_DECL( jint, Java_java_awt_Toolkit_tlkGetScreenWidth );extern KAFFE_TLK_FUNC_DECL( void, Java_java_awt_Toolkit_tlkSync );extern KAFFE_TLK_FUNC_DECL( void, Java_java_awt_Toolkit_tlkFlush );extern KAFFE_TLK_FUNC_DECL( void, Java_java_awt_Toolkit_tlkBeep );extern KAFFE_TLK_FUNC_DECL( void, Java_java_awt_Toolkit_tlkDisplayBanner, jstring banner );#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -