/* * Class: sun_awt_windows_WChoicePeer * Method: addItems * Signature: ([Ljava/lang/String;I)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WChoicePeer_addItems(JNIEnv *env, jobject self, jobjectArray items, jint index) { TRY; JNI_CHECK_NULL_RETURN(items, "null items"); PDATA pData; jsize i; JNI_CHECK_PEER_RETURN(self); AwtChoice* c = (AwtChoice*)pData; int itemCount = env->GetArrayLength(items); if (itemCount > 0) { c->SendMessage(WM_SETREDRAW, (WPARAM)FALSE, 0); for (i=0; i<itemCount; i++) { jstring item = (jstring)env->GetObjectArrayElement(items, i); JNI_CHECK_NULL_RETURN(item, "null item"); c->SendMessage(CB_INSERTSTRING, index+i, JavaStringBuffer(env, item)); env->DeleteLocalRef(item); } c->SendMessage(WM_SETREDRAW, (WPARAM)TRUE, 0); InvalidateRect(c->GetHWnd(), NULL, TRUE); c->ResetDropDownHeight(); c->VerifyState(); } CATCH_BAD_ALLOC; }
/* * Class: java_awt_AWTEvent * Method: nativeSetSource * Signature: (Ljava/awt/peer/ComponentPeer;)V */ JNIEXPORT void JNICALL Java_java_awt_AWTEvent_nativeSetSource (JNIEnv *env, jobject self, jobject newSource) { TRY; JNI_CHECK_NULL_RETURN(self, "null AWTEvent"); MSG *pMsg; jbyteArray bdata = (jbyteArray) env->GetObjectField(self, AwtAWTEvent::bdataID); if (bdata != NULL) { jboolean dummy; PDATA pData; JNI_CHECK_PEER_RETURN(newSource); AwtComponent *p = (AwtComponent *)pData; HWND hwnd = p->GetHWnd(); pMsg = (MSG *)env->GetPrimitiveArrayCritical(bdata, &dummy); if (pMsg == NULL) { throw std::bad_alloc(); } pMsg->hwnd = hwnd; env->ReleasePrimitiveArrayCritical(bdata, (void *)pMsg, 0); } CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WComponentPeer * Method: handleEvent * Signature: (Lsun/awt/windows/WComponentPeer;Ljava/awt/AWTEvent;)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WInputMethod_handleNativeIMEEvent(JNIEnv *env, jobject self, jobject peer, jobject event) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(peer); AwtComponent* p = (AwtComponent *)pData; JNI_CHECK_NULL_RETURN(event, "null AWTEvent"); if (env->EnsureLocalCapacity(1) < 0) { return; } jbyteArray bdata = (jbyteArray)(env)->GetObjectField(event, AwtAWTEvent::bdataID); if (bdata == 0) { return; } MSG msg; (env)->GetByteArrayRegion(bdata, 0, sizeof(MSG), (jbyte *)&msg); (env)->DeleteLocalRef(bdata); BOOL isConsumed = (BOOL)(env)->GetBooleanField(event, AwtAWTEvent::consumedID); int id = (env)->GetIntField(event, AwtAWTEvent::idID); DASSERT(!safe_ExceptionOccurred(env)); if (isConsumed || p==NULL) return; if (id >= java_awt_event_InputMethodEvent_INPUT_METHOD_FIRST && id <= java_awt_event_InputMethodEvent_INPUT_METHOD_LAST) { long modifiers = p->GetJavaModifiers(); if (msg.message==WM_CHAR || msg.message==WM_SYSCHAR) { WCHAR unicodeChar = L'\0'; unicodeChar = (WCHAR)msg.wParam; p->SendKeyEvent(java_awt_event_KeyEvent_KEY_TYPED, 0, //to be fixed nowMillis(), java_awt_event_KeyEvent_CHAR_UNDEFINED, unicodeChar, modifiers, java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0, &msg); } else { MSG* pCopiedMsg = new MSG; *pCopiedMsg = msg; p->SendMessage(WM_AWT_HANDLE_EVENT, (WPARAM) FALSE, (LPARAM) pCopiedMsg); } (env)->SetBooleanField(event, AwtAWTEvent::consumedID, JNI_TRUE); } CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WMenuItemPeer * Method: create * Signature: (Lsun/awt/windows/WMenuPeer;)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WMenuItemPeer_create(JNIEnv *env, jobject self, jobject menu) { TRY; JNI_CHECK_NULL_RETURN(menu, "null Menu"); AwtToolkit::CreateComponent(self, menu, (AwtToolkit::ComponentFactory) AwtMenuItem::Create); PDATA pData; JNI_CHECK_PEER_CREATION_RETURN(self); CATCH_BAD_ALLOC; }
JNIEXPORT void JNICALL Java_sun_awt_windows_WCustomCursor_createCursorIndirect( JNIEnv *env, jobject self, jintArray intRasterData, jbyteArray andMask, jint nSS, jint nW, jint nH, jint xHotSpot, jint yHotSpot) { TRY; JNI_CHECK_NULL_RETURN(intRasterData, "intRasterData argument"); if (nW != ::GetSystemMetrics(SM_CXCURSOR) || nH != ::GetSystemMetrics(SM_CYCURSOR)) { JNU_ThrowArrayIndexOutOfBoundsException(env, "bad width and/or height"); return; } jsize length = env->GetArrayLength(andMask); jbyte *andMaskPtr = new jbyte[length]; // safe because sizeof(jbyte)==1 env->GetByteArrayRegion(andMask, 0, length, andMaskPtr); 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; memset(&icnInfo, 0, sizeof(ICONINFO)); icnInfo.hbmMask = hMask; icnInfo.hbmColor = hColor; icnInfo.fIcon = FALSE; icnInfo.xHotspot = xHotSpot; icnInfo.yHotspot = yHotSpot; hCursor = ::CreateIconIndirect(&icnInfo); destroy_BMP(hColor); destroy_BMP(hMask); } DASSERT(hCursor); AwtCursor::setPData(self, ptr_to_jlong(new AwtCursor(env, hCursor, self, xHotSpot, yHotSpot, nW, nH, nSS, cols, (BYTE *)andMaskPtr))); CATCH_BAD_ALLOC; }