src/windows/native/sun/windows/awt_Cursor.cpp

Print this page




 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     }