📄 gra.cc
字号:
void Java_java_awt_Toolkit_graDrawRect(JNIEnv* env, jclass clazz, Graphics* gr, jint x, jint y, jint width, jint height){ DBG( AWT_GRA, qqDebug("drawRect: %p, %d,%d - %d,%d\n", gr, x,y,width,height)); QPainter *painter = (QPainter*)gr->painter; if( (width >= 0) && (height >= 0) ) painter->drawRect(x+gr->x0, y+gr->y0, width, height);}void Java_java_awt_Toolkit_graFillRect(JNIEnv* env, jclass clazz, Graphics* gr, jint x, jint y, jint width, jint height){ DBG( AWT_GRA, qqDebug("fillRect: %p, %d,%d - %d,%d\n", gr, x,y,width,height)); QPainter *painter = (QPainter*)gr->painter; if( (width >= 0) && (height >= 0) ) { if(width == 1) { //some swing gimmicks painter->drawLine( x+gr->x0, y+gr->y0, x+gr->x0, y+gr->y0 + height -1); } else if ( height == 1) { painter->drawLine( x+gr->x0, y+gr->y0, x+gr->x0 + width -1, y+gr->y0); } else { painter->fillRect(x+gr->x0, y+gr->y0, width, height, QCOLOR(gr->fg)); } }}void Java_java_awt_Toolkit_graDrawRoundRect(JNIEnv* env, jclass clazz, Graphics* gr, jint x, jint y, jint width, jint height, jint wArc, jint hArc ){ int x1, x2, y1, y2, a, b; DBG( AWT_GRA, qqDebug("drawRoundRect: %p, %d,%d - %d,%d %d,%d\n", gr, x,y,width,height, wArc, hArc)); QPainter *painter = (QPainter*)gr->painter; painter->drawRoundRect(x+gr->x0, y+gr->y0, width, height, wArc, hArc);}voidJava_java_awt_Toolkit_graFillRoundRect ( JNIEnv* env, jclass clazz, Graphics* gr, jint x, jint y, jint width, jint height, jint wArc, jint hArc ){ int x1, x2, y1, y2, a, b; DBG( AWT_GRA, qqDebug("fillRoundRect: %p, %d,%d - %d,%d %d,%d\n", gr, x,y,width,height, wArc, hArc)); QPainter *painter = (QPainter*)gr->painter;}void Java_java_awt_Toolkit_graDraw3DRect(JNIEnv* env, jclass clazz, Graphics* gr, jint x, jint y, jint width, jint height, jboolean raised, jint rgb){ int bright, dark; int xw, yh; DBG( AWT_GRA, qqDebug("draw3DRect: %p, %d,%d - %d,%d %d %x\n", gr, x,y,width,height, raised, rgb)); QPainter *painter = (QPainter*)gr->painter; /* we should use the same mechanism like ordinary Graphics brighter()/darker() here */ dark = (int) (Java_java_awt_Toolkit_clrDark( env, clazz, rgb) >> 32); bright = (int) (Java_java_awt_Toolkit_clrBright( env, clazz, rgb) >> 32); x += gr->x0; y += gr->y0; xw = x + width; yh = y + height; painter->setPen(QCOLOR(raised ? bright : dark)); painter->drawLine(x, y, xw-1, y); painter->drawLine(x, y, x, yh); painter->setPen(QCOLOR(raised ? dark : bright)); painter->drawLine(x+1, yh, xw, yh); painter->drawLine(xw, y, xw, yh); painter->setPen(QCOLOR(gr->fg));}void Java_java_awt_Toolkit_graFill3DRect(JNIEnv* env, jclass clazz, Graphics* gr, jint x, jint y, jint width, jint height, jboolean raised, jint rgb){ DBG( AWT_GRA, qqDebug("fill3DRect: %p, %d,%d - %d,%d %d %x\n", gr, x,y,width,height, raised, rgb)); QPainter *painter = (QPainter*)gr->painter; painter->fillRect(x+gr->x0+1, y+gr->y0+1, width-2, height-2, QCOLOR(gr->fg)); Java_java_awt_Toolkit_graDraw3DRect(env, clazz, gr, x, y, width-1, height-1, raised, rgb);}void Java_java_awt_Toolkit_graAddClip(JNIEnv* env, jclass clazz, Graphics* gr, jint xClip, jint yClip, jint wClip, jint hClip){ /* XXX: not implemented yet */}void Java_java_awt_Toolkit_graSetClip(JNIEnv* env, jclass clazz, Graphics* gr, jint xClip, jint yClip, jint wClip, jint hClip){ DBG( AWT_GRA, qqDebug("setClip: %p, %d,%d - %d,%d\n", gr, xClip, yClip, wClip, hClip)); if(wClip <= 0) wClip = 0; if(yClip <= 0) yClip = 0; QPainter *painter = (QPainter*)gr->painter; painter->setClipRect(gr->x0 + xClip, gr->y0 + yClip, wClip, hClip);}void Java_java_awt_Toolkit_graSetColor(JNIEnv* env, jclass clazz, Graphics* gr, jint clr){ DBG(AWT_GRA, qqDebug("setColor: gr=%p, clr=%x, painter=%x\n", gr, clr, gr->painter)); gr->fg = clr; if ( gr->xor_mode ) clr ^= gr->xclr; QPainter *painter = (QPainter*)gr->painter; painter->setPen(QCOLOR(clr)); painter->setBrush(QCOLOR(clr));}void Java_java_awt_Toolkit_graSetBackColor(JNIEnv* env, jclass clazz, Graphics* gr, jint clr){ DBG( AWT_GRA, qqDebug("setBackColor: %p, %x\n", gr, clr)); gr->bg = clr; QPainter *painter = (QPainter*)gr->painter; painter->setBackgroundColor(QCOLOR(clr));}void Java_java_awt_Toolkit_graSetFont(JNIEnv* env, jclass clazz, Graphics* gr, jobject fnt){ DBG( AWT_GRA, qqDebug("setFont: %p, %p\n", gr, fnt)); QPainter *painter = (QPainter*)gr->painter; gr->painter->setFont(*((QFont*)fnt));}void Java_java_awt_Toolkit_graSetOffset(JNIEnv* env, jclass clazz, Graphics* gr, jint xOff, jint yOff){ DBG( AWT_GRA, qqDebug("setOffset: %p, %d,%d\n", gr, xOff, yOff)); gr->x0 = xOff; gr->y0 = yOff;}void Java_java_awt_Toolkit_graSetPaintMode(JNIEnv* env, jclass clazz, Graphics* gr){ DBG( AWT_GRA, qqDebug("setPaintMode: %p\n", gr)); gr->xor_mode = 0; QPainter *painter = (QPainter*)gr->painter; painter->setPen(QCOLOR(gr->fg)); painter->setBrush(QCOLOR(gr->fg)); painter->setRasterOp(Qt::CopyROP);}void Java_java_awt_Toolkit_graSetXORMode(JNIEnv* env, jclass clazz, Graphics* gr, jint xorClr){ DBG( AWT_GRA, qqDebug("setXORMode: %p, %x\n", gr, xorClr)); gr->xor_mode = 1; gr->xclr = xorClr; QPainter *painter = (QPainter*)gr->painter; painter->setPen(QCOLOR(gr->fg ^ xorClr)); painter->setBrush(QCOLOR(gr->fg ^ xorClr)); painter->setRasterOp(Qt::XorROP);}void Java_java_awt_Toolkit_graSetVisible(JNIEnv* env, jclass clazz, Graphics* gr, jint isVisible){ DBG( AWT_GRA, qqDebug("setVisble: %p %d\n", gr, isVisible)); /* * This is rather a hack to "defuse" a Graphics object, but we don't want to * add checks on every draw op to test if the target is invisible */ if(!isVisible) { if(gr->y0 >= -10000) gr->y0 -= 100000; } else { if(gr->y0 <= -10000) gr->y0 += 100000; }}/** * image rendering */static voiddrawAlphaImage ( Graphics* gr, Image* img, jint srcX, jint srcY, jint dstX, jint dstY, jint width, jint height, jint bgval ){ Image *dstImg = 0; QImage *dstQim = 0; int i, j, si, sj, alpha; unsigned long dpix, spix, bgpix = 0; int sr, sg, sb, dr, dg, db; DBG( AWT_GRA, qqDebug("drawAlphaImage: %p %p (%p, %p), %d,%d %d,%d %d,%d %x\n", gr, img, img->qImg, img->alpha, srcX, srcY, dstX, dstY, width, height, bgval)); if ( !img ) return; for(i=0;i<X->nWindows;i++) if (X->windows[i].flags= WND_FRAME) break; if(i == X->nWindows) i =0; QWidget *toplevel = (QWidget *)(X->windows[i].w); if ( !dstQim ) { QPixmap tmp; tmp = QPixmap::grabWidget(toplevel,(int)dstX,(int)dstY,(int)width,(int)height); *dstQim = tmp.convertToImage(); } if ( dstQim ) { for ( j=0, sj=srcY; j<dstQim->height(); j++, sj++ ) { for ( i=0, si=srcX; i<dstQim->width(); i++, si++ ) { dpix = (bgval == -1) ? dstQim->pixel(i,j):bgpix; spix = img->qImg->pixel(si,sj); alpha = GetAlpha( img->alpha, si, sj); if ( alpha ) { /* * ints still considered to be substantially faster than floats on most * architectures (avoid div by 255), map all 0..255 -> 1..256 */ alpha++; sr++; sg++; sb++; dr++; dg++; db++; dr = ((alpha * sr + (256 - alpha) * dr) + 128) >> 8; dg = ((alpha * sg + (256 - alpha) * dg) + 128) >> 8; db = ((alpha * sb + (256 - alpha) * db) + 128) >> 8; dr--; dg--; db--; dstQim->setPixel(i,j, qRgb(dr<<16,dg <<8, db)); } } } if ( dstImg != 0 ){ Java_java_awt_Toolkit_imgFreeImage( 0, 0, dstImg); } else { QPainter *painter = (QPainter *)gr->painter; QPixmap tmp; if(tmp.convertFromImage(*dstQim,0)) painter->drawPixmap((int)dstX, (int)dstY,tmp,0,0,(int)width,(int)height); } }}/* This functions scales the pixmap in the member variable "pm" to fit the widget size and puts the resulting pixmap in the member variable"pmScaled".*/void scale(Image *img, int w, int h){ if ( !img->qpm) return; if ( w == img->qpm->width() && h == img->qpm->height()) { // no need to scale if widget img->qpmScaled = img->qpm; // size equals pixmap size } else { img->qpmScaled = new QPixmap(); img->qpmScaled->convertFromImage(img->qImg->smoothScale(w, h),0); }}voidJava_java_awt_Toolkit_graDrawImage ( JNIEnv* env, jclass clazz, Graphics* gr, Image* img, jint srcX, jint srcY, jint dstX, jint dstY, jint width, jint height, jint bgval ){ DBG( AWT_GRA, qqDebug("drawImage: %p %p (%p,%p,%p %d,%d) %d,%d, %d,%d, %d,%d, %x\n", gr, img, img->qImg,img->qImg_AlphaMask,img->alpha, img->width,img->height, srcX,srcY, dstX,dstY, width,height, bgval)); if ( !img ) return; dstX += gr->x0; dstY += gr->y0; dstX += img->left; dstY += img->top; scale(img,width,height); if ( img->alpha ) { drawAlphaImage( gr, img, srcX, srcY, dstX, dstY, width, height,bgval); } if ( img->qpm ) { //if ( img->qImg->isNull() ) return; QPainter *painter = (QPainter *)gr->painter; painter->drawPixmap((int)dstX, (int)dstY, *(img->qpmScaled)); }}voidJava_java_awt_Toolkit_graDrawImageScaled ( JNIEnv* env, jclass clazz, Graphics* gr, Image* img, jint dx0, jint dy0, jint dx1, jint dy1, jint sx0, jint sy0, jint sx1, jint sy1, jint bgval ){ int iw, x0, y0, x1, y1; Image *tgt; int tmpXImg = (img->qImg == NULL); DBG( AWT_GRA, qqDebug("drawImageScaled: %p %p (%p), %d,%d,%d,%d, %d,%d,%d,%d, %x\n", gr, img, img->qImg, dx0, dy0, dx1, dy1, sx0, sy0, sx1, sy1, bgval)); if ( !img ) return; scale(img,dx1-dx0,dy1-dy0); if ( img->qpm ) { QPainter *painter = (QPainter *)gr->painter; painter->drawPixmap((int)dx0, (int)dy0, *(img->qpmScaled)); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -