< prev index next >
src/java.desktop/windows/native/libawt/windows/awt_Cursor.cpp
Print this page
*** 371,397 ****
HBITMAP hMask = ::CreateBitmap(nW, nH, 1, 1, (BYTE *)andMaskPtr);
::GdiFlush();
int *cols = SAFE_SIZE_NEW_ARRAY2(int, nW, nH);
! jint *intRasterDataPtr = NULL;
HBITMAP hColor = NULL;
try {
! intRasterDataPtr =
! (jint *)env->GetPrimitiveArrayCritical(intRasterData, 0);
hColor = create_BMP(NULL, (int *)intRasterDataPtr, nSS, nW, nH);
memcpy(cols, intRasterDataPtr, nW*nH*sizeof(int));
} catch (...) {
! if (intRasterDataPtr != NULL) {
! env->ReleasePrimitiveArrayCritical(intRasterData,
! intRasterDataPtr, 0);
! }
throw;
}
!
! env->ReleasePrimitiveArrayCritical(intRasterData, intRasterDataPtr, 0);
! intRasterDataPtr = NULL;
HCURSOR hCursor = NULL;
if (hMask && hColor) {
ICONINFO icnInfo;
--- 371,395 ----
HBITMAP hMask = ::CreateBitmap(nW, nH, 1, 1, (BYTE *)andMaskPtr);
::GdiFlush();
int *cols = SAFE_SIZE_NEW_ARRAY2(int, nW, nH);
! /* Copy the raster data because GDI may fail on some Java heap
! * allocated memory.
! */
! length = env->GetArrayLength(intRasterData);
! jint *intRasterDataPtr = new jint[length];
HBITMAP hColor = NULL;
try {
! env->GetIntArrayRegion(intRasterData, 0, length, intRasterDataPtr);
hColor = create_BMP(NULL, (int *)intRasterDataPtr, nSS, nW, nH);
memcpy(cols, intRasterDataPtr, nW*nH*sizeof(int));
} catch (...) {
! delete[] intRasterDataPtr;
throw;
}
! delete[] intRasterDataPtr;
HCURSOR hCursor = NULL;
if (hMask && hColor) {
ICONINFO icnInfo;
< prev index next >