KNIEXPORT KNI_RETURNTYPE_BOOLEAN KNIDECL(KNITest_isInstanceOf) { jboolean result; KNI_StartHandles(2); KNI_DeclareHandle(srcObj); KNI_DeclareHandle(srcClass); KNI_GetParameterAsObject(1, srcObj); KNI_GetParameterAsObject(2, srcClass); result = KNI_IsInstanceOf(srcObj, srcClass); KNI_EndHandles(); KNI_ReturnBoolean(result); }
void JSR239_getWindowContents(JSR239_Pixmap *dst, jobject srcGraphicsHandle, jint srcWidth, jint srcHeight, jint deltaHeight) { QPixmap* pixmap; void* src; KNI_StartHandles(1); KNI_DeclareHandle(GraphicsClassHandle); #ifdef DEBUG printf("JSR239_getWindowContents >>\n"); #endif KNI_FindClass("javax/microedition/lcdui/Graphics", GraphicsClassHandle); if (!KNI_IsInstanceOf(graphicsHandle, GraphicsClassHandle)) { #ifdef DEBUG printf("JSR239_getWindowContents only implemented for graphicsHandle " "instanceof Graphics!\n"); #endif } else { pixmap = getGraphicsBuffer(graphicsHandle); #ifdef DEBUG printf("JSR239_getWindowContents: pixmap=%p\n", pixmap); printf(" pixmap Bpp = %d\n", pixmap->depth()/8); printf(" pixmap width = %d\n", pixmap->width()); printf(" pixmap height = %d\n", pixmap->height()); printf(" dst Bpp = %d\n", dst->pixelBytes); printf(" dst width = %d\n", dst->width); printf(" dst height = %d\n", dst->height); #endif src = (void*)pixmap->scanLine(0); /* IMPL_NOTE: get clip sizes into account. */ copyFromScreenBuffer(dst, src, srcWidth, srcHeight, deltaHeight); } #ifdef DEBUG printf("JSR239_getWindowContents <<\n"); #endif KNI_EndHandles(); }
/* Copy engine buffer back to MIDP */ void JSR239_putWindowContents(jobject graphicsHandle, jint delta_height, JSR239_Pixmap *src, jint flipY) { void* s; void* d; KNI_StartHandles(1); KNI_DeclareHandle(GraphicsClassHandle); #ifdef DEBUG printf("JSR239_putWindowContents >>\n"); #endif KNI_FindClass("javax/microedition/lcdui/Graphics", GraphicsClassHandle); if (!KNI_IsInstanceOf(graphicsHandle, GraphicsClassHandle)) { #ifdef DEBUG printf("JSR239_putWindowContents only implemented for graphicsHandle " "instanceof Graphics!\n"); #endif } else { gxj_screen_buffer sbuf; gxj_screen_buffer* gimg; // Obtain the dimensions of the destination. jint dest_width = lcdlf_get_screen_width(); jint dest_height = lcdlf_get_screen_height(); jint min_height = 0; gimg = GXJ_GET_GRAPHICS_SCREEN_BUFFER(graphicsHandle, &sbuf); if (gimg != NULL) { dest_width = gimg->width; dest_height= gimg->height; } #ifdef DEBUG printf("JSR239_putWindowContents:\n"); printf(" src Bpp = %d\n", src->pixelBytes); printf(" src width = %d\n", src->width); printf(" src height = %d\n", src->height); printf(" min height = %d\n", min_height); #endif /* IMPL_NOTE: get clip sizes into account. */ copyToScreenBuffer(src, delta_height, flipY); /* src->screen_buffer is an output of copyToScreenBuffer function. */ s = (void*)src->screen_buffer; d = (void*)getGraphicsBuffer(graphicsHandle); min_height = (dest_height > src->height) ? src->height : dest_height; if ((src->width != dest_width) || (sizeof(gxj_pixel_type) != 2)) { #ifdef DEBUG printf("JSR239: offscreen buffer data is incorrect.\n"); #endif } else { /* Source data must be in 16bit 565 format. */ JSR239_memcpy(d, s, dest_width * min_height * sizeof(gxj_pixel_type)); } } #ifdef DEBUG printf("JSR239_putWindowContents <<\n"); #endif KNI_EndHandles(); }
void JSR239_putWindowContents(jobject graphicsHandle, jint delta_height, JSR239_Pixmap *src, jint clipX, jint clipY, jint clipWidth, jint clipHeight, jint flipY) { void* s; void* d; QPixmap* pixmap; KNI_StartHandles(1); KNI_DeclareHandle(GraphicsClassHandle); #ifdef DEBUG printf("JSR239_putWindowContents >>\n"); #endif KNI_FindClass("javax/microedition/lcdui/Graphics", GraphicsClassHandle); if (!KNI_IsInstanceOf(graphicsHandle, GraphicsClassHandle)) { #ifdef DEBUG printf("JSR239_putWindowContents only implemented for graphicsHandle " "instanceof Graphics!\n"); #endif } else { const jint bytes_for_depth = 2; const jint bits_per_byte = 8; jint min_height; pixmap = getGraphicsBuffer(graphicsHandle); min_height = (pixmap->height() > src->height) ? src->height : pixmap->height(); #ifdef DEBUG printf("JSR239_putWindowContent: pixmap=%p\n", pixmap); printf(" pixmap Bpp = %d\n", pixmap->depth()/bits_per_byte); printf(" pixmap width = %d\n", pixmap->width()); printf(" pixmap height = %d\n", pixmap->height()); printf(" src Bpp = %d\n", src->pixelBytes); printf(" src width = %d\n", src->width); printf(" src height = %d\n", src->height); printf(" min height = %d\n", min_height); #endif /* IMPL_NOTE: get clip sizes into account. */ copyToScreenBuffer(src, delta_height, clipX, clipY, clipWidth, clipHeight, clipWidth, clipHeight, flipY); /* src->screen_buffer is an output of copyToScreenBuffer function. */ s = (void*)src->screen_buffer; d = (void*)pixmap->scanLine(0); if ((pixmap->width() != src->width) || (pixmap->depth() != bits_per_byte * bytes_for_depth)) { #ifdef DEBUG printf("JSR239: offscreen buffer data is incorrect.\n"); #endif } else { /* Source data must be in 16bit 565 format. */ JSR239_memcpy( d, s, pixmap->width() * min_height * bytes_for_depth); } } #ifdef DEBUG printf("JSR239_putWindowContents <<\n"); #endif KNI_EndHandles(); }
/** * Copies the contents of fromMsg to the contents of toMsg. Both must be * instances of LinkMessage. The toLink object must be an instance of Link. * It's filled in if the contents of fromMsg are a Link. Returns KNI_TRUE if * successful, otherwise KNI_FALSE. */ static jboolean copy(jobject fromMsg, jobject toMsg, jobject toLink) { jboolean retval; KNI_StartHandles(6); KNI_DeclareHandle(byteArrayClass); KNI_DeclareHandle(stringClass); KNI_DeclareHandle(linkClass); KNI_DeclareHandle(fromContents); KNI_DeclareHandle(newString); KNI_DeclareHandle(newByteArray); KNI_FindClass("[B", byteArrayClass); KNI_FindClass("java/lang/String", stringClass); KNI_FindClass("com/sun/midp/links/Link", linkClass); getContents(fromMsg, fromContents); if (KNI_IsInstanceOf(fromContents, byteArrayClass)) { /* do a byte array copy */ jint fromOffset; jint fromLength; getRange(fromMsg, &fromOffset, &fromLength); SNI_NewArray(SNI_BYTE_ARRAY, fromLength, newByteArray); if (KNI_IsNullHandle(newByteArray)) { retval = KNI_FALSE; } else { KNI_GetRawArrayRegion(fromContents, fromOffset, fromLength, SNI_GetRawArrayPointer(newByteArray)); setContents(toMsg, newByteArray); setRange(toMsg, 0, fromLength); retval = KNI_TRUE; } } else if (KNI_IsInstanceOf(fromContents, stringClass)) { /* do a string copy */ jchar *buf; jsize slen = KNI_GetStringLength(fromContents); SNI_NewArray(SNI_BYTE_ARRAY, slen*sizeof(jchar), newByteArray); if (KNI_IsNullHandle(newByteArray)) { retval = KNI_FALSE; } else { buf = SNI_GetRawArrayPointer(newByteArray); KNI_GetStringRegion(fromContents, 0, slen, buf); KNI_NewString(buf, slen, newString); setContents(toMsg, newString); retval = KNI_TRUE; } } else if (KNI_IsInstanceOf(fromContents, linkClass)) { /* copy the link */ rendezvous *rp = getNativePointer(fromContents); setNativePointer(toLink, rp); rp_incref(rp); setContents(toMsg, toLink); retval = KNI_TRUE; } else { retval = KNI_FALSE; } KNI_EndHandles(); return retval; }
/* Copy engine buffer back to MIDP */ void JSR239_putWindowContents(jobject graphicsHandle, jint delta_height, JSR239_Pixmap *src, jint clipX, jint clipY, jint clipWidth, jint clipHeight, jint flipY) { void* s; void* d; KNI_StartHandles(1); KNI_DeclareHandle(GraphicsClassHandle); #ifdef DEBUG printf("JSR239_putWindowContents >>\n"); #endif KNI_FindClass("javax/microedition/lcdui/Graphics", GraphicsClassHandle); if (!KNI_IsInstanceOf(graphicsHandle, GraphicsClassHandle)) { #ifdef DEBUG printf("JSR239_putWindowContents only implemented for graphicsHandle " "instanceof Graphics!\n"); #endif } else { gxj_screen_buffer sbuf; gxj_screen_buffer* gimg; // Obtain the dimensions of the destination. // Revisit: multiple displays support. Obtain Id of display render surfane is // bound to. Consider recalculations when display got changed. int displayId = lcdlf_get_current_hardwareId(); jint dest_width = lcdlf_get_screen_width(displayId); jint dest_height = lcdlf_get_screen_height(displayId); jint min_height = 0; gxj_pixel_type* srcPtr; gxj_pixel_type* dstPtr; gimg = GXJ_GET_GRAPHICS_SCREEN_BUFFER(graphicsHandle, &sbuf); if (gimg != NULL) { dest_width = gimg->width; dest_height= gimg->height; } /* src->screen_buffer is an output of copyToScreenBuffer function. */ s = (void*)src->screen_buffer; d = (void*)getGraphicsBuffer(graphicsHandle); min_height = (dest_height > src->height) ? src->height : dest_height; #ifdef DEBUG printf("JSR239_putWindowContents:\n"); printf(" src = %d\n", src->pixels); printf(" src Bpp = %d\n", src->pixelBytes); printf(" src width = %d\n", src->width); printf(" src height = %d\n", src->height); printf(" min height = %d\n", min_height); printf(" dst = %d\n", d); printf(" dst width = %d\n", clipWidth); printf(" dst height = %d\n", clipHeight); #endif srcPtr = (gxj_pixel_type *)s; dstPtr = (gxj_pixel_type *)d; if ((dest_width * min_height <= src->width * src->height) && (sizeof(gxj_pixel_type) == 2)) { /* Source data must be in 16bit 565 format. */ JSR239_memcpy(s, d, dest_width * min_height * sizeof(gxj_pixel_type)); /* IMPL_NOTE: get clip sizes into account. */ copyToScreenBuffer(src, delta_height, clipX, clipY, clipWidth, clipHeight, dest_width, dest_height, flipY); /* Source data must be in 16bit 565 format. */ JSR239_memcpy(d, s, dest_width * min_height * sizeof(gxj_pixel_type)); } else { #ifdef DEBUG printf("JSR239: offscreen buffer data is incorrect.\n"); #endif } } #ifdef DEBUG printf("JSR239_putWindowContents <<\n"); #endif KNI_EndHandles(); }