⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gra.cc

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 CC
📖 第 1 页 / 共 2 页
字号:
/** * gra.c -  * * Copyright (c) 1998 *      Transvirtual Technologies, Inc.  All rights reserved. * * Copyright (c) 2002, 2003, 2004, 2005 *	Kaffe.org contributors, see ChangeLog for details.  All rights reserved. * * See the file "license.terms" for information on usage and redistribution  * of this file.  */#include <qimage.h>#include <qpaintdevice.h>#include <qpainter.h>#include <qpixmap.h>#include <qstring.h>#include <qwidget.h>#include "toolkit.h"#define  WINDOW   0#define  IMAGE    1#define  GRAPHICS 2#define QCOLOR(c) QColor(JRED(c), JGREEN(c), JBLUE(c))void* Java_java_awt_Toolkit_graInitGraphics(JNIEnv* env, jclass clazz,  Graphics* gr, jobject tgt, jint tgtType, jint xOff, jint yOff,  jint xClip, jint yClip, jint wClip, jint hClip,  jobject fnt, jint fg, jint bg, jboolean blank){  QPaintDevice*       drw;  DBG(AWT_GRA, qqDebug("initGraphics: gr %p (tgt %p, type=%d) xo %d,yo %d  %d,%d - %d,%d  %p %x %x\n",    gr, tgt,tgtType, xOff,yOff, xClip,yClip,wClip,hClip, fnt,fg,bg));  if ( tgt ) {    switch ( tgtType ) {      case 0:        drw = (QWidget*)tgt;        break;          /* Window   */      case 1:        drw = (QPixmap*)(((Image*)tgt)->qpm);        DBG(AWT_GRA, qqDebug("tgt = IMAGE drw=%p\n",drw));        break;     /* Image    */      case 2:        drw = ((Graphics*)tgt)->drw;        DBG(AWT_GRA, qqDebug("tgt = GRAPHICS\n"));        break;  /* Graphics */      default:        qFatal("illegal Graphics target: %d\n", tgtType);        drw = 0;    }  }  else {    if ( gr )      drw = gr->drw;    else {      qFatal("attempt to set an uninitialized graphics");      drw = 0;    }  }  if(gr == 0) {    gr = (Graphics*) AWT_MALLOC( sizeof(Graphics));    memset((void*)gr, 0, sizeof(Graphics));  }  else {    /* Release QPainter objects of reused NativeGraphics Java objects */    if (gr->painter != NULL) {      delete gr->painter;    }  }   gr->painter = new QPainter(drw);  DBG(AWT_GRA, qqDebug("painter=%x\n", gr->painter));  gr->painter->setPen(QCOLOR(fg));  gr->painter->setBrush(QCOLOR(fg));  gr->painter->setBackgroundColor(QCOLOR(bg));  gr->painter->setFont(*((QFont*)fnt));  gr->painter->setRasterOp(Qt::CopyROP);  if (wClip < 0)     wClip = 0;  if (hClip < 0)     hClip = 0;  gr->painter->setClipRect(xOff+xClip, yOff+yClip, wClip, hClip);  gr->fg        = fg;  gr->bg        = bg;  gr->drw       = drw;  gr->x0        = xOff;  gr->y0        = yOff;  gr->xor_mode  = 0;  if ( blank ) {    gr->painter->fillRect(xOff+xClip, yOff+yClip, wClip, hClip, QCOLOR(bg));  }  return gr;}void Java_java_awt_Toolkit_graFreeGraphics(JNIEnv* env, jclass clazz,  Graphics* gr){  DBG(AWT_GRA, qqDebug("freeGraphics: %p\n", gr));  if(gr->painter)    delete gr->painter;  AWT_FREE( gr);}void Java_java_awt_Toolkit_graCopyArea(JNIEnv* env, jclass clazz,  Graphics* gr, jint x, jint y, jint width, jint height,  jint xDelta, jint yDelta ){  DBG(AWT_GRA, qqDebug("copyArea: %p, %d,%d-%d,%d  %d,%d\n", gr, x,y,width,height, xDelta,yDelta));  /* some X servers act alleric on that (careless bitblt, again) */  if ( (width < 0) || (height < 0) )	return;  x += gr->x0; y += gr->y0;}void Java_java_awt_Toolkit_graClearRect(JNIEnv* env, jclass clazz,  Graphics* gr, jint x, jint y, jint width, jint height){  DBG(AWT_GRA, qqDebug("clearRect: %p, %d,%d-%d,%d\n", gr, x,y,width,height));  QPainter *painter = (QPainter*)gr->painter;  painter->fillRect(x + gr->x0, y + gr->y0, width, height, QCOLOR(gr->bg));}voidJava_java_awt_Toolkit_graDrawBytes ( JNIEnv* env, jclass clazz,	Graphics* gr, jbyteArray jBytes, jint offset, jint len, jint x, jint y ){  jboolean isCopy;  int      n;  jbyte    *jb, *jbo;  QPainter *painter;  painter = (QPainter *)gr->painter;  if ( !jBytes ) return;  n = env->GetArrayLength( jBytes);  jb = env->GetByteArrayElements( jBytes, &isCopy);  jbo = jb + offset;  DBG(AWT_GRA, qqDebug("drawBytes: %p, %p,%d,%d  \"%s\"  %d,%d\n", gr,				 jBytes,offset,len, jb, x,y));  if ( offset+len > n )	len = n - offset;  QByteArray a;  a.setRawData((char *)jbo,len);  painter->drawText( x+gr->x0, y+gr->y0, QString(a), len);  env->ReleaseByteArrayElements( jBytes, jb, JNI_ABORT);}voidJava_java_awt_Toolkit_graDrawChars ( JNIEnv* env, jclass clazz,	Graphics* gr, jcharArray jChars, jint offset, jint len, jint x, jint y ){  jboolean isCopy;  int      n;  jchar    *jc, *jco;  ushort  *b;  QChar   *unicode;  QPainter *painter;  painter = (QPainter *)gr->painter;  if ( !jChars ) return;  n   = env->GetArrayLength( jChars);  jc = env->GetCharArrayElements( jChars, &isCopy);  jco = jc + offset;  DBG(AWT_GRA, qqDebug("drawChars: %p, %p,%d,%d  \"%s\"  %d,%d\n", gr, jChars,offset,len,				 jchar2CString(X,jco,len), x,y));  if ( offset+len > n )	len = n - offset;#ifndef WORDS_BIGENDIAN  n = sizeof(ushort)*len;  b = (ushort *) getBuffer( X, n);  swab( (void*)jco, (void*)b, n);#else  b = (ushort *) jco;#endif  int i;  unicode = new QChar[len];  for(i=0;i<len;i++)    unicode[i] = QChar((ushort)*(b+i));  painter->drawText( x+gr->x0, y+gr->y0, QString(jchar2CString(X,jco,len)),len);  env->ReleaseCharArrayElements( jChars, jc, JNI_ABORT);}void Java_java_awt_Toolkit_graDrawString(JNIEnv* env, jclass clazz,  Graphics* gr, jstring str, jint x, jint y){  char *cstr;  QPainter *painter;  if ( !str ) return;  cstr = java2CString(env, X, str);  DBG(AWT_GRA, qqDebug("drawString: %p  \"%s\"  %d,%d\n", gr, cstr, x,y));  painter = (QPainter*)gr->painter;  QString qstr(cstr);  painter->drawText(x+gr->x0, y+gr->y0, qstr);}void Java_java_awt_Toolkit_graDrawLine(JNIEnv* env, jclass clazz,  Graphics* gr, jint x1, jint y1, jint x2, jint y2){  DBG( AWT_GRA, qqDebug("drawLine: %p, %d,%d - %d,%d\n", gr, x1,y1, x2,y2));  QPainter *painter = (QPainter*)gr->painter;  if( (x1==x2) && (y1==y2) ) { //swing gimmicks    painter->drawPoint( x1 + gr->x0, y1 + gr->y0);  }  else {    painter->drawLine( x1 + gr->x0, y1 + gr->y0, x2 + gr->x0, y2 + gr->y0);  }}void Java_java_awt_Toolkit_graDrawArc(JNIEnv* env, jclass clazz,  Graphics* gr, jint x, jint y, jint width, jint height,  jint startAngle, jint arcAngle){  DBG( AWT_GRA, qqDebug("drawArc: %p, %d,%d-%d,%d  %d,%d\n", gr,				 x,y,width,height, startAngle,arcAngle));  QPainter *painter = (QPainter*)gr->painter;  painter->drawArc(x+gr->x0, y+gr->y0, width, height,    startAngle << 4, arcAngle << 4);}void Java_java_awt_Toolkit_graFillArc(JNIEnv* env, jclass clazz,  Graphics* gr, jint x, jint y, jint width, jint height,  jint startAngle, jint arcAngle){  DBG( AWT_GRA, qqDebug("fillArc: %p, %d,%d-%d,%d  %d,%d\n", gr,				 x,y,width,height, startAngle, arcAngle));  QPainter *painter = (QPainter*)gr->painter;  painter->drawPie(x+gr->x0, y+gr->y0, width, height,    startAngle << 4, arcAngle << 4);}void Java_java_awt_Toolkit_graDrawOval(JNIEnv* env, jclass clazz,  Graphics* gr, int x, jint y, jint width, jint height){  DBG( AWT_GRA, qqDebug("drawOval: %p, %d,%d - %d,%d\n", gr, x,y,width,height));  QPainter *painter = (QPainter*)gr->painter;  painter->drawArc(x+gr->x0, y+gr->y0, width, height,    0, 360 << 4);}void Java_java_awt_Toolkit_graFillOval(JNIEnv* env, jclass clazz,  Graphics* gr, jint x, jint y, jint width, jint height){  DBG( AWT_GRA, qqDebug("fillOval: %p, %d,%d - %d,%d\n", gr, x,y,width,height));  QPainter *painter = (QPainter*)gr->painter;  painter->drawPie(x+gr->x0, y+gr->y0, width, height,    0, 360 << 4);}QPointArray* jarray2Points(JNIEnv* env, Toolkit* X, int x0, int y0,  jintArray xPoints, jintArray yPoints, int nPoints){  register int i;  int      n;  jboolean isCopy;  jint     *jx = env->GetIntArrayElements( xPoints, &isCopy);  jint     *jy = env->GetIntArrayElements( yPoints, &isCopy);  if ( (n = env->GetArrayLength( xPoints)) < nPoints ) nPoints = n;  if ( (n = env->GetArrayLength( yPoints)) < nPoints ) nPoints = n;  QPointArray *points = new QPointArray(nPoints);  for ( i=0; i<nPoints; i++){    points->setPoint(i, jx[i] + x0, jy[i] + y0);  }  env->ReleaseIntArrayElements( xPoints, jx, JNI_ABORT);  env->ReleaseIntArrayElements( yPoints, jy, JNI_ABORT);  return points;}void Java_java_awt_Toolkit_graDrawPolygon(JNIEnv* env, jclass clazz,  Graphics* gr, jintArray xPoints, jintArray yPoints, jint nPoints ){  int n;  DBG( AWT_GRA, qqDebug("drawPolygon: %p, %p,%p  %d\n", gr, xPoints, yPoints, nPoints));  if ( !xPoints || !yPoints ) return;  QPainter *painter = (QPainter*)gr->painter;  QPointArray *points = jarray2Points(env, X, gr->x0, gr->y0,    xPoints, yPoints, nPoints);  uint size = points->size();  if(points->point(0) != points->point(size-1)) {    points->resize(size+1);    points->setPoint(size, points->point(0));  }  painter->drawPolyline(*points);}void Java_java_awt_Toolkit_graDrawPolyline(JNIEnv* env, jclass clazz,  Graphics* gr, jintArray xPoints, jintArray yPoints, jint nPoints){  DBG( AWT_GRA, qqDebug("drawPolyline: %p, %p,%p  %d\n", gr, xPoints, yPoints, nPoints));  if ( !xPoints || !yPoints ) return;  QPainter *painter = (QPainter*)gr->painter;  QPointArray *points = jarray2Points(env, X, gr->x0, gr->y0,    xPoints, yPoints, nPoints);  painter->drawPolyline(*points);}void Java_java_awt_Toolkit_graFillPolygon ( JNIEnv* env, jclass clazz,  Graphics* gr, jintArray xPoints, jintArray yPoints, jint nPoints){  //XPoint   *p;  DBG( AWT_GRA, qqDebug("fillPolygon: %p, %p,%p  %d\n", gr, xPoints, yPoints, nPoints));  if ( !xPoints || !yPoints ) return;  QPainter *painter = (QPainter*)gr->painter;  QPointArray *points = jarray2Points(env, X, gr->x0, gr->y0,    xPoints, yPoints, nPoints);  painter->drawPolygon(*points);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -