< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/awt/ImageSurfaceData.m

Print this page
rev 54094 : 8257853: Remove dependencies on JNF's JNI utility functions in AWT and 2D code
rev 54096 : 8259651: [macOS] Replace JNF_COCOA_ENTER/EXIT macros
rev 54097 : 8259869: [macOS] Remove desktop module dependencies on JNF Reference APIs
rev 54098 : 8260616: Removing remaining JNF dependencies in the java.desktop module
8259729: Missed JNFInstanceOf -> IsInstanceOf conversion

*** 28,39 **** #import "java_awt_Transparency.h" #import "java_awt_image_BufferedImage.h" #import "sun_awt_image_BufImgSurfaceData.h" #import "sun_java2d_OSXOffScreenSurfaceData.h" ! #import "jni_util.h" ! #import <JavaNativeFoundation/JavaNativeFoundation.h> #import "BufImgSurfaceData.h" //#define DEBUG 1 #if defined DEBUG --- 28,39 ---- #import "java_awt_Transparency.h" #import "java_awt_image_BufferedImage.h" #import "sun_awt_image_BufImgSurfaceData.h" #import "sun_java2d_OSXOffScreenSurfaceData.h" ! #import "ThreadUtilities.h" ! #import "JNIUtilities.h" #import "BufImgSurfaceData.h" //#define DEBUG 1 #if defined DEBUG
*** 101,120 **** static jfieldID rgbID; static jfieldID mapSizeID; static jfieldID CMpDataID; static jfieldID allGrayID; ! ! static JNF_CLASS_CACHE(jc_OSXOffScreenSurfaceData, "sun/java2d/OSXOffScreenSurfaceData"); ! static JNF_MEMBER_CACHE(jm_syncFromCustom, jc_OSXOffScreenSurfaceData, "syncFromCustom", "()V"); ! static JNF_MEMBER_CACHE(jm_syncToCustom, jc_OSXOffScreenSurfaceData, "syncToCustom", "()V"); ! static JNF_CLASS_CACHE(jc_BufferedImage, "java/awt/image/BufferedImage"); ! static JNF_MEMBER_CACHE(jm_SurfaceData, jc_BufferedImage, "sData", "Lsun/java2d/SurfaceData;"); ! static JNF_CLASS_CACHE(jc_IndexColorModel, "java/awt/image/IndexColorModel"); ! static JNF_MEMBER_CACHE(jm_rgb, jc_IndexColorModel, "rgb", "[I"); ! static JNF_MEMBER_CACHE(jm_transparency, jc_IndexColorModel, "transparency", "I"); ! static JNF_MEMBER_CACHE(jm_transparent_index, jc_IndexColorModel, "transparent_index", "I"); CGColorSpaceRef gColorspaceRGB = NULL; CGColorSpaceRef gColorspaceGray = NULL; IMAGE_SURFACE_INLINE void PrintImageInfo(ImageSDOps* isdo) --- 101,113 ---- static jfieldID rgbID; static jfieldID mapSizeID; static jfieldID CMpDataID; static jfieldID allGrayID; ! static jclass jc_OSXOffScreenSurfaceData = NULL; ! #define GET_OSXOSD_CLASS() \ ! GET_CLASS(jc_OSXOffScreenSurfaceData, "sun/java2d/OSXOffScreenSurfaceData"); CGColorSpaceRef gColorspaceRGB = NULL; CGColorSpaceRef gColorspaceGray = NULL; IMAGE_SURFACE_INLINE void PrintImageInfo(ImageSDOps* isdo)
*** 190,200 **** IMAGE_SURFACE_INLINE void customPixelsFromJava(JNIEnv *env, ImageSDOps *isdo) { PRINT(" customPixelsFromJava") SurfaceDataOps *sdo = (SurfaceDataOps*)isdo; ! JNFCallVoidMethod(env, sdo->sdObject, jm_syncFromCustom); // AWT_THREADING Safe (known object) } IMAGE_SURFACE_INLINE void copyBits(jint w, jint h, jint javaPixelsBytesPerRow, Pixel8bit *pixelsSrc, jint dstPixelsBytesPerRow, Pixel8bit *pixelsDst) { PRINT(" copyBits") --- 183,197 ---- IMAGE_SURFACE_INLINE void customPixelsFromJava(JNIEnv *env, ImageSDOps *isdo) { PRINT(" customPixelsFromJava") SurfaceDataOps *sdo = (SurfaceDataOps*)isdo; ! GET_OSXOSD_CLASS(); ! DECLARE_METHOD(jm_syncFromCustom, jc_OSXOffScreenSurfaceData, "syncFromCustom", "()V"); ! ! (*env)->CallVoidMethod(env, sdo->sdObject, jm_syncFromCustom); // AWT_THREADING Safe (known object) ! CHECK_EXCEPTION(); } IMAGE_SURFACE_INLINE void copyBits(jint w, jint h, jint javaPixelsBytesPerRow, Pixel8bit *pixelsSrc, jint dstPixelsBytesPerRow, Pixel8bit *pixelsDst) { PRINT(" copyBits")
*** 421,431 **** IMAGE_SURFACE_INLINE void customPixelsToJava(JNIEnv *env, ImageSDOps *isdo) { PRINT(" customPixelsToJava") SurfaceDataOps *sdo = (SurfaceDataOps*)isdo; ! JNFCallVoidMethod(env, sdo->sdObject, jm_syncToCustom); // AWT_THREADING Safe (known object) } IMAGE_SURFACE_INLINE void removeAlphaPre_32bit(jint w, jint h, jint javaPixelsBytesPerRow, jint javaPixelBytes, Pixel32bit *pixelsSrc) { PRINT(" removeAlphaPre_32bit") --- 418,431 ---- IMAGE_SURFACE_INLINE void customPixelsToJava(JNIEnv *env, ImageSDOps *isdo) { PRINT(" customPixelsToJava") SurfaceDataOps *sdo = (SurfaceDataOps*)isdo; ! GET_OSXOSD_CLASS(); ! DECLARE_METHOD(jm_syncToCustom, jc_OSXOffScreenSurfaceData, "syncToCustom", "()V"); ! (*env)->CallVoidMethod(env, sdo->sdObject, jm_syncToCustom); // AWT_THREADING Safe (known object) ! CHECK_EXCEPTION(); } IMAGE_SURFACE_INLINE void removeAlphaPre_32bit(jint w, jint h, jint javaPixelsBytesPerRow, jint javaPixelBytes, Pixel32bit *pixelsSrc) { PRINT(" removeAlphaPre_32bit")
*** 1238,1248 **** { PRINT("xorSurfacePixels") jboolean handled = JNI_FALSE; ! JNF_COCOA_ENTER(env); ImageSDOps* srcIsdo = LockImagePixels(env, srcIsd); ImageSDOps* dstIsdo = LockImagePixels(env, dstIsd); if ((x < 0) || (y < 0) || (x+w > dstIsdo->width) || (y+h > dstIsdo->height) || (w > srcIsdo->width) || (h > srcIsdo->height)) { --- 1238,1248 ---- { PRINT("xorSurfacePixels") jboolean handled = JNI_FALSE; ! JNI_COCOA_ENTER(env); ImageSDOps* srcIsdo = LockImagePixels(env, srcIsd); ImageSDOps* dstIsdo = LockImagePixels(env, dstIsd); if ((x < 0) || (y < 0) || (x+w > dstIsdo->width) || (y+h > dstIsdo->height) || (w > srcIsdo->width) || (h > srcIsdo->height)) {
*** 1317,1336 **** } UnlockImagePixels(env, srcIsdo); UnlockImagePixels(env, dstIsdo); ! JNF_COCOA_EXIT(env); return handled; } IMAGE_SURFACE_INLINE jboolean clearSurfacePixels(JNIEnv *env, jobject bisd, jint w, jint h) { PRINT("clearSurfacePixels") jboolean handled = JNI_FALSE; ! JNF_COCOA_ENTER(env); ImageSDOps *isdo = LockImagePixels(env, bisd); if (isdo->type == java_awt_image_BufferedImage_TYPE_INT_ARGB_PRE) { --- 1317,1336 ---- } UnlockImagePixels(env, srcIsdo); UnlockImagePixels(env, dstIsdo); ! JNI_COCOA_EXIT(env); return handled; } IMAGE_SURFACE_INLINE jboolean clearSurfacePixels(JNIEnv *env, jobject bisd, jint w, jint h) { PRINT("clearSurfacePixels") jboolean handled = JNI_FALSE; ! JNI_COCOA_ENTER(env); ImageSDOps *isdo = LockImagePixels(env, bisd); if (isdo->type == java_awt_image_BufferedImage_TYPE_INT_ARGB_PRE) {
*** 1358,1368 **** handled = JNI_TRUE; } UnlockImagePixels(env, isdo); ! JNF_COCOA_EXIT(env); return handled; } static void ImageSD_startCGContext(JNIEnv *env, QuartzSDOps *qsdo, SDRenderType renderType) --- 1358,1368 ---- handled = JNI_TRUE; } UnlockImagePixels(env, isdo); ! JNI_COCOA_EXIT(env); return handled; } static void ImageSD_startCGContext(JNIEnv *env, QuartzSDOps *qsdo, SDRenderType renderType)
*** 1449,1459 **** { free(qsdo->graphicsStateInfo.batchedLines); qsdo->graphicsStateInfo.batchedLines = NULL; } ! JNFDeleteGlobalRef(env, qsdo->javaGraphicsStatesObjects); if (qsdo->cgRef != NULL) { CGContextRelease(qsdo->cgRef); qsdo->cgRef = NULL; --- 1449,1459 ---- { free(qsdo->graphicsStateInfo.batchedLines); qsdo->graphicsStateInfo.batchedLines = NULL; } ! (*env)->DeleteGlobalRef(env, qsdo->javaGraphicsStatesObjects); if (qsdo->cgRef != NULL) { CGContextRelease(qsdo->cgRef); qsdo->cgRef = NULL;
*** 1481,1496 **** free(isdo->lutData); isdo->indexedColorTable = NULL; } if (isdo->array != NULL) { ! JNFDeleteGlobalRef(env, isdo->array); isdo->array = NULL; } if (isdo->icm != NULL) { ! JNFDeleteGlobalRef(env, isdo->icm); isdo->icm = NULL; } if (isdo->nsRef) { [isdo->nsRef release]; --- 1481,1496 ---- free(isdo->lutData); isdo->indexedColorTable = NULL; } if (isdo->array != NULL) { ! (*env)->DeleteGlobalRef(env, isdo->array); isdo->array = NULL; } if (isdo->icm != NULL) { ! (*env)->DeleteGlobalRef(env, isdo->icm); isdo->icm = NULL; } if (isdo->nsRef) { [isdo->nsRef release];
*** 1620,1643 **** gColorspaceRGB = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); gColorspaceGray = CGColorSpaceCreateWithName(kCGColorSpaceGenericGray); //fprintf(stderr, "gColorspaceRGB=%p, gColorspaceGray=%p\n", gColorspaceRGB, gColorspaceGray); } JNIEXPORT jobject JNICALL Java_sun_java2d_OSXOffScreenSurfaceData_getSurfaceData (JNIEnv *env, jclass bisd, jobject bufImg) { PRINT("getSurfaceData") ! ! return JNFGetObjectField(env, bufImg, jm_SurfaceData); } JNIEXPORT void JNICALL Java_sun_java2d_OSXOffScreenSurfaceData_setSurfaceData (JNIEnv *env, jclass bisd, jobject bufImg, jobject sData) { PRINT("setSurfaceData") ! JNFSetObjectField(env, bufImg, jm_SurfaceData, sData); } static jint ImageSD_Lock(JNIEnv *env, SurfaceDataOps *ops, SurfaceDataRasInfo *pRasInfo, jint lockflags) { ImageSDOps *isdo = (ImageSDOps*)ops; --- 1620,1649 ---- gColorspaceRGB = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); gColorspaceGray = CGColorSpaceCreateWithName(kCGColorSpaceGenericGray); //fprintf(stderr, "gColorspaceRGB=%p, gColorspaceGray=%p\n", gColorspaceRGB, gColorspaceGray); } + static jclass jc_BufferedImage = NULL; + static jfieldID jm_SurfaceData = NULL; + JNIEXPORT jobject JNICALL Java_sun_java2d_OSXOffScreenSurfaceData_getSurfaceData (JNIEnv *env, jclass bisd, jobject bufImg) { PRINT("getSurfaceData") ! GET_CLASS_RETURN(jc_BufferedImage, "java/awt/image/BufferedImage", NULL); ! GET_FIELD_RETURN(jm_SurfaceData, jc_BufferedImage, "sData", "Lsun/java2d/SurfaceData;", NULL); ! return (*env)->GetObjectField(env, bufImg, jm_SurfaceData); } JNIEXPORT void JNICALL Java_sun_java2d_OSXOffScreenSurfaceData_setSurfaceData (JNIEnv *env, jclass bisd, jobject bufImg, jobject sData) { PRINT("setSurfaceData") ! GET_CLASS(jc_BufferedImage, "java/awt/image/BufferedImage"); ! GET_FIELD(jm_SurfaceData, jc_BufferedImage, "sData", "Lsun/java2d/SurfaceData;"); ! (*env)->SetObjectField(env, bufImg, jm_SurfaceData, sData); } static jint ImageSD_Lock(JNIEnv *env, SurfaceDataOps *ops, SurfaceDataRasInfo *pRasInfo, jint lockflags) { ImageSDOps *isdo = (ImageSDOps*)ops;
*** 1839,1855 **** } isdo->isSubImage = (offset%scanStride != 0) || (scanStride != (pixelStride*width)); // parameters specifying this image given to us from Java isdo->javaImageInfo = (jint*)((*env)->GetDirectBufferAddress(env, jImageInfo)); ! isdo->array = (array != NULL) ? JNFNewGlobalRef(env, array) : NULL; isdo->offset = offset; isdo->width = width; isdo->height = height; isdo->javaPixelBytes = pixelStride; isdo->javaPixelsBytesPerRow = scanStride; ! isdo->icm = (icm != NULL) ? JNFNewGlobalRef(env, icm) : NULL; isdo->type = type; if ((isdo->javaImageInfo[sun_java2d_OSXOffScreenSurfaceData_kImageStolenIndex] == 1) || (isdo->type == java_awt_image_BufferedImage_TYPE_CUSTOM)) { --- 1845,1861 ---- } isdo->isSubImage = (offset%scanStride != 0) || (scanStride != (pixelStride*width)); // parameters specifying this image given to us from Java isdo->javaImageInfo = (jint*)((*env)->GetDirectBufferAddress(env, jImageInfo)); ! isdo->array = (array != NULL) ? (*env)->NewGlobalRef(env, array) : NULL; isdo->offset = offset; isdo->width = width; isdo->height = height; isdo->javaPixelBytes = pixelStride; isdo->javaPixelsBytesPerRow = scanStride; ! isdo->icm = (icm != NULL) ? (*env)->NewGlobalRef(env, icm) : NULL; isdo->type = type; if ((isdo->javaImageInfo[sun_java2d_OSXOffScreenSurfaceData_kImageStolenIndex] == 1) || (isdo->type == java_awt_image_BufferedImage_TYPE_CUSTOM)) {
*** 1861,1879 **** isdo->indexedColorTable = NULL; isdo->lutData = NULL; isdo->lutDataSize = 0; if ((type == java_awt_image_BufferedImage_TYPE_BYTE_INDEXED) && ((*env)->IsSameObject(env, icm, NULL) == NO)) { ! jarray lutarray = JNFGetObjectField(env, icm, jm_rgb); isdo->lutDataSize = (*env)->GetArrayLength(env, lutarray); if (isdo->lutDataSize > 0) { ! jint transparency = JNFGetIntField(env, icm, jm_transparency); jint transparent_index = -1; if (transparency == java_awt_Transparency_BITMASK) { ! transparent_index = JNFGetIntField(env, icm, jm_transparent_index); } Pixel32bit* lutdata = (Pixel32bit*)((*env)->GetPrimitiveArrayCritical(env, lutarray, NULL)); if (lutdata != NULL) { --- 1867,1894 ---- isdo->indexedColorTable = NULL; isdo->lutData = NULL; isdo->lutDataSize = 0; if ((type == java_awt_image_BufferedImage_TYPE_BYTE_INDEXED) && ((*env)->IsSameObject(env, icm, NULL) == NO)) { ! static jclass jc_IndexColorModel = NULL; ! if (jc_IndexColorModel == NULL) { ! jc_IndexColorModel = (*env)->FindClass(env, "java/awt/image/IndexColorModel"); ! } ! CHECK_NULL(jc_IndexColorModel); ! DECLARE_FIELD(jm_rgb, jc_IndexColorModel, "rgb", "[I"); ! DECLARE_FIELD(jm_transparency, jc_IndexColorModel, "transparency", "I"); ! DECLARE_FIELD(jm_transparent_index, jc_IndexColorModel, "transparent_index", "I"); ! ! jarray lutarray = (*env)->GetObjectField(env, icm, jm_rgb); isdo->lutDataSize = (*env)->GetArrayLength(env, lutarray); if (isdo->lutDataSize > 0) { ! jint transparency = (*env)->GetIntField(env, icm, jm_transparency); jint transparent_index = -1; if (transparency == java_awt_Transparency_BITMASK) { ! transparent_index = (*env)->GetIntField(env, icm, jm_transparent_index); } Pixel32bit* lutdata = (Pixel32bit*)((*env)->GetPrimitiveArrayCritical(env, lutarray, NULL)); if (lutdata != NULL) {
*** 1944,1954 **** QuartzSDOps *qsdo = (QuartzSDOps*)isdo; qsdo->BeginSurface = ImageSD_startCGContext; qsdo->FinishSurface = ImageSD_finishCGContext; qsdo->javaGraphicsStates = (jint*)((*env)->GetDirectBufferAddress(env, jGraphicsState)); ! qsdo->javaGraphicsStatesObjects = JNFNewGlobalRef(env, jGraphicsStateObject); qsdo->graphicsStateInfo.batchedLines = NULL; qsdo->graphicsStateInfo.batchedLinesCount = 0; SurfaceDataOps *sdo = (SurfaceDataOps*)qsdo; --- 1959,1969 ---- QuartzSDOps *qsdo = (QuartzSDOps*)isdo; qsdo->BeginSurface = ImageSD_startCGContext; qsdo->FinishSurface = ImageSD_finishCGContext; qsdo->javaGraphicsStates = (jint*)((*env)->GetDirectBufferAddress(env, jGraphicsState)); ! qsdo->javaGraphicsStatesObjects = (*env)->NewGlobalRef(env, jGraphicsStateObject); qsdo->graphicsStateInfo.batchedLines = NULL; qsdo->graphicsStateInfo.batchedLinesCount = 0; SurfaceDataOps *sdo = (SurfaceDataOps*)qsdo;
< prev index next >