374 375 HCURSOR hCursor = NULL; 376 377 if (hMask && hColor) { 378 ICONINFO icnInfo; 379 memset(&icnInfo, 0, sizeof(ICONINFO)); 380 icnInfo.hbmMask = hMask; 381 icnInfo.hbmColor = hColor; 382 icnInfo.fIcon = FALSE; 383 icnInfo.xHotspot = xHotSpot; 384 icnInfo.yHotspot = yHotSpot; 385 386 hCursor = ::CreateIconIndirect(&icnInfo); 387 388 destroy_BMP(hColor); 389 destroy_BMP(hMask); 390 } 391 392 DASSERT(hCursor); 393 394 try { 395 AwtCursor::setPData(self, ptr_to_jlong(new AwtCursor(env, hCursor, self, xHotSpot, 396 yHotSpot, nW, nH, nSS, cols, 397 (BYTE *)andMaskPtr))); 398 } catch (...) { 399 if (cols) { 400 delete[] cols; 401 } 402 throw; 403 } 404 CATCH_BAD_ALLOC; 405 } 406 407 /* 408 * Class: sun_awt_windows_WCustomCursor 409 * Method: getCursorWidth 410 * Signature: ()I 411 */ 412 JNIEXPORT jint JNICALL 413 Java_sun_awt_windows_WCustomCursor_getCursorWidth(JNIEnv *, jclass) 414 { 415 TRY; 416 417 DTRACE_PRINTLN("WCustomCursor.getCursorWidth()"); 418 return (jint)::GetSystemMetrics(SM_CXCURSOR); 419 420 CATCH_BAD_ALLOC_RET(0); 421 } 422 423 /* 487 AwtComponent::GetTopLevelParentForWindow( 488 awtComponent->GetHWnd()))); 489 if (!blocked) { 490 awtComponent->setCursorCache(hCursor); 491 } 492 } 493 env->DeleteLocalRef(jpeer); 494 } 495 env->DeleteGlobalRef(jcomp); 496 } 497 498 if (!blocked) { 499 ::SetCursor(hCursor); // don't need WM_AWT_SETCURSOR 500 } 501 502 env->DeleteGlobalRef(((GlobalSetCursorStruct*)pStruct)->cursor); 503 } 504 505 /* 506 * Class: sun_awt_windows_WGlobalCursorManager 507 * Method: setCursor 508 * Signature: (Ljava/awt/Component;Ljava/awt/Cursor;)V 509 */ 510 JNIEXPORT void JNICALL 511 Java_sun_awt_windows_WGlobalCursorManager_setCursor(JNIEnv *env, jobject, 512 jobject, jobject cursor, jboolean u) 513 { 514 TRY; 515 516 if (cursor != NULL) { // fix for 4430302 - getCursor() returns NULL 517 GlobalSetCursorStruct data; 518 data.cursor = env->NewGlobalRef(cursor); 519 data.u = u; 520 AwtToolkit::GetInstance().InvokeFunction( 521 GlobalSetCursor, 522 (void *)&data); 523 } else { 524 JNU_ThrowNullPointerException(env, "NullPointerException"); 525 } 526 CATCH_BAD_ALLOC; 527 } 528 529 /* 530 * Class: sun_awt_windows_WGlobalCursorManager 531 * Method: findHeavyweight 532 * Signature: (II)Z 533 */ 534 JNIEXPORT jobject JNICALL 535 Java_sun_awt_windows_WGlobalCursorManager_findHeavyweightUnderCursor( 536 JNIEnv *env, jobject, jboolean useCache) 537 { 538 TRY; 539 540 if (env->EnsureLocalCapacity(1) < 0) { 541 return NULL; 542 } | 374 375 HCURSOR hCursor = NULL; 376 377 if (hMask && hColor) { 378 ICONINFO icnInfo; 379 memset(&icnInfo, 0, sizeof(ICONINFO)); 380 icnInfo.hbmMask = hMask; 381 icnInfo.hbmColor = hColor; 382 icnInfo.fIcon = FALSE; 383 icnInfo.xHotspot = xHotSpot; 384 icnInfo.yHotspot = yHotSpot; 385 386 hCursor = ::CreateIconIndirect(&icnInfo); 387 388 destroy_BMP(hColor); 389 destroy_BMP(hMask); 390 } 391 392 DASSERT(hCursor); 393 394 AwtCursor::setPData(self, ptr_to_jlong(new AwtCursor(env, hCursor, self, xHotSpot, 395 yHotSpot, nW, nH, nSS, cols, 396 (BYTE *)andMaskPtr))); 397 CATCH_BAD_ALLOC; 398 } 399 400 /* 401 * Class: sun_awt_windows_WCustomCursor 402 * Method: getCursorWidth 403 * Signature: ()I 404 */ 405 JNIEXPORT jint JNICALL 406 Java_sun_awt_windows_WCustomCursor_getCursorWidth(JNIEnv *, jclass) 407 { 408 TRY; 409 410 DTRACE_PRINTLN("WCustomCursor.getCursorWidth()"); 411 return (jint)::GetSystemMetrics(SM_CXCURSOR); 412 413 CATCH_BAD_ALLOC_RET(0); 414 } 415 416 /* 480 AwtComponent::GetTopLevelParentForWindow( 481 awtComponent->GetHWnd()))); 482 if (!blocked) { 483 awtComponent->setCursorCache(hCursor); 484 } 485 } 486 env->DeleteLocalRef(jpeer); 487 } 488 env->DeleteGlobalRef(jcomp); 489 } 490 491 if (!blocked) { 492 ::SetCursor(hCursor); // don't need WM_AWT_SETCURSOR 493 } 494 495 env->DeleteGlobalRef(((GlobalSetCursorStruct*)pStruct)->cursor); 496 } 497 498 /* 499 * Class: sun_awt_windows_WGlobalCursorManager 500 * Method: setCursorImpl 501 * Signature: (Ljava/awt/Component;Ljava/awt/Cursor;)V 502 */ 503 JNIEXPORT void JNICALL 504 Java_sun_awt_windows_WGlobalCursorManager_setCursorImpl(JNIEnv *env, jobject, 505 jobject, jobject cursor, jboolean u) 506 { 507 TRY; 508 509 if (cursor != NULL) { // fix for 4430302 - getCursor() returns NULL 510 GlobalSetCursorStruct data; 511 data.cursor = env->NewGlobalRef(cursor); 512 data.u = u; 513 AwtToolkit::GetInstance().InvokeFunction( 514 GlobalSetCursor, 515 (void *)&data); 516 } else { 517 JNU_ThrowNullPointerException(env, "NullPointerException"); 518 } 519 CATCH_BAD_ALLOC; 520 } 521 522 /* 523 * Class: sun_awt_windows_WGlobalCursorManager 524 * Method: setCursorDirect 525 * Signature: (Ljava/awt/Component;Ljava/awt/Cursor;)V 526 */ 527 JNIEXPORT void JNICALL 528 Java_sun_awt_windows_WGlobalCursorManager_setCursorDirect(JNIEnv *env, jobject, 529 jobject, jobject cursor, jboolean u) 530 { 531 TRY; 532 533 if (cursor != NULL) { 534 GlobalSetCursorStruct data; 535 data.cursor = env->NewGlobalRef(cursor); 536 data.u = u; 537 GlobalSetCursor((void *)&data); 538 } else { 539 JNU_ThrowNullPointerException(env, "NullPointerException"); 540 } 541 CATCH_BAD_ALLOC; 542 } 543 544 /* 545 * Class: sun_awt_windows_WGlobalCursorManager 546 * Method: findHeavyweight 547 * Signature: (II)Z 548 */ 549 JNIEXPORT jobject JNICALL 550 Java_sun_awt_windows_WGlobalCursorManager_findHeavyweightUnderCursor( 551 JNIEnv *env, jobject, jboolean useCache) 552 { 553 TRY; 554 555 if (env->EnsureLocalCapacity(1) < 0) { 556 return NULL; 557 } |