294 return generalPath; 295 } 296 297 /* 298 * Class: sun_font_CStrike 299 * Method: getGlyphImagePtrsNative 300 * Signature: (JJ[J[II)V 301 */ 302 JNIEXPORT void JNICALL 303 Java_sun_font_CStrike_getGlyphImagePtrsNative 304 (JNIEnv *env, jclass clazz, 305 jlong awtStrikePtr, jlongArray glyphInfoLongArray, 306 jintArray glyphCodes, jint len) 307 { 308 JNF_COCOA_ENTER(env); 309 310 AWTStrike *awtStrike = (AWTStrike *)jlong_to_ptr(awtStrikePtr); 311 312 jlong *glyphInfos = 313 (*env)->GetPrimitiveArrayCritical(env, glyphInfoLongArray, NULL); 314 if (glyphInfos != NULL) { 315 jint *rawGlyphCodes = 316 (*env)->GetPrimitiveArrayCritical(env, glyphCodes, NULL); 317 318 if (rawGlyphCodes != NULL) { 319 CGGlyphImages_GetGlyphImagePtrs(glyphInfos, awtStrike, 320 rawGlyphCodes, len); 321 322 (*env)->ReleasePrimitiveArrayCritical(env, glyphCodes, 323 rawGlyphCodes, JNI_ABORT); 324 } 325 // Do not use JNI_COMMIT, as that will not free the buffer copy 326 // when +ProtectJavaHeap is on. 327 (*env)->ReleasePrimitiveArrayCritical(env, glyphInfoLongArray, 328 glyphInfos, 0); 329 } 330 331 JNF_COCOA_EXIT(env); 332 } 333 334 /* 335 * Class: sun_font_CStrike 336 * Method: createNativeStrikePtr 337 * Signature: (J[D[DII)J 338 */ 339 JNIEXPORT jlong JNICALL Java_sun_font_CStrike_createNativeStrikePtr 340 (JNIEnv *env, jclass clazz, jlong nativeFontPtr, jdoubleArray glyphTxArray, jdoubleArray invDevTxArray, jint aaStyle, jint fmHint) 341 { 342 AWTStrike *awtStrike = nil; 343 JNF_COCOA_ENTER(env); 344 345 AWTFont *awtFont = (AWTFont *)jlong_to_ptr(nativeFontPtr); 346 JRSFontRenderingStyle style = JRSFontGetRenderingStyleForHints(fmHint, aaStyle); 347 348 CGAffineTransform glyphTx = GetTxFromDoubles(env, glyphTxArray); 349 CGAffineTransform invDevTx = GetTxFromDoubles(env, invDevTxArray); | 294 return generalPath; 295 } 296 297 /* 298 * Class: sun_font_CStrike 299 * Method: getGlyphImagePtrsNative 300 * Signature: (JJ[J[II)V 301 */ 302 JNIEXPORT void JNICALL 303 Java_sun_font_CStrike_getGlyphImagePtrsNative 304 (JNIEnv *env, jclass clazz, 305 jlong awtStrikePtr, jlongArray glyphInfoLongArray, 306 jintArray glyphCodes, jint len) 307 { 308 JNF_COCOA_ENTER(env); 309 310 AWTStrike *awtStrike = (AWTStrike *)jlong_to_ptr(awtStrikePtr); 311 312 jlong *glyphInfos = 313 (*env)->GetPrimitiveArrayCritical(env, glyphInfoLongArray, NULL); 314 315 jint *rawGlyphCodes = 316 (*env)->GetPrimitiveArrayCritical(env, glyphCodes, NULL); 317 @try { 318 if (rawGlyphCodes != NULL && glyphInfos != NULL) { 319 CGGlyphImages_GetGlyphImagePtrs(glyphInfos, awtStrike, 320 rawGlyphCodes, len); 321 } 322 } 323 @finally { 324 if (rawGlyphCodes != NULL) { 325 (*env)->ReleasePrimitiveArrayCritical(env, glyphCodes, 326 rawGlyphCodes, JNI_ABORT); 327 } 328 if (glyphInfos != NULL) { 329 // Do not use JNI_COMMIT, as that will not free the buffer copy 330 // when +ProtectJavaHeap is on. 331 (*env)->ReleasePrimitiveArrayCritical(env, glyphInfoLongArray, 332 glyphInfos, 0); 333 } 334 } 335 336 JNF_COCOA_EXIT(env); 337 } 338 339 /* 340 * Class: sun_font_CStrike 341 * Method: createNativeStrikePtr 342 * Signature: (J[D[DII)J 343 */ 344 JNIEXPORT jlong JNICALL Java_sun_font_CStrike_createNativeStrikePtr 345 (JNIEnv *env, jclass clazz, jlong nativeFontPtr, jdoubleArray glyphTxArray, jdoubleArray invDevTxArray, jint aaStyle, jint fmHint) 346 { 347 AWTStrike *awtStrike = nil; 348 JNF_COCOA_ENTER(env); 349 350 AWTFont *awtFont = (AWTFont *)jlong_to_ptr(nativeFontPtr); 351 JRSFontRenderingStyle style = JRSFontGetRenderingStyleForHints(fmHint, aaStyle); 352 353 CGAffineTransform glyphTx = GetTxFromDoubles(env, glyphTxArray); 354 CGAffineTransform invDevTx = GetTxFromDoubles(env, invDevTxArray); |