/* Create a new AwtScrollPane object and window. */ AwtScrollPane* AwtScrollPane::Create(jobject self, jobject parent) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); jobject target = NULL; AwtScrollPane* c = NULL; try { if (env->EnsureLocalCapacity(1) < 0) { return NULL; } PDATA pData; AwtComponent* awtParent; JNI_CHECK_PEER_GOTO(parent, done); awtParent = (AwtComponent*)pData; JNI_CHECK_NULL_GOTO(awtParent, "null awtParent", done); target = env->GetObjectField(self, AwtObject::targetID); JNI_CHECK_NULL_GOTO(target, "null target", done); c = new AwtScrollPane(); { DWORD style = WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; jint scrollbarDisplayPolicy = env->GetIntField(target, scrollbarDisplayPolicyID); if (scrollbarDisplayPolicy == java_awt_ScrollPane_SCROLLBARS_ALWAYS) { style |= WS_HSCROLL | WS_VSCROLL; } DWORD exStyle = WS_EX_CLIENTEDGE; if (GetRTL()) { exStyle |= WS_EX_RIGHT | WS_EX_LEFTSCROLLBAR; if (GetRTLReadingOrder()) exStyle |= WS_EX_RTLREADING; } jint x = env->GetIntField(target, AwtComponent::xID); jint y = env->GetIntField(target, AwtComponent::yID); jint width = env->GetIntField(target, AwtComponent::widthID); jint height = env->GetIntField(target, AwtComponent::heightID); c->CreateHWnd(env, L"", style, exStyle, x, y, width, height, awtParent->GetHWnd(), reinterpret_cast<HMENU>(static_cast<INT_PTR>( awtParent->CreateControlID())), ::GetSysColor(COLOR_WINDOWTEXT), ::GetSysColor(COLOR_WINDOW), self); } } catch (...) { env->DeleteLocalRef(target); throw; } done: env->DeleteLocalRef(target); return c; }
AwtCheckbox* AwtCheckbox::Create(jobject peer, jobject parent) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); jstring label = NULL; jobject target = NULL; AwtCheckbox *checkbox = NULL; try { if (env->EnsureLocalCapacity(2) < 0) { return NULL; } AwtComponent* awtParent; JNI_CHECK_NULL_GOTO(parent, "null parent", done); awtParent = (AwtComponent*)JNI_GET_PDATA(parent); JNI_CHECK_NULL_GOTO(awtParent, "null awtParent", done); target = env->GetObjectField(peer, AwtObject::targetID); JNI_CHECK_NULL_GOTO(target, "null target", done); checkbox = new AwtCheckbox(); { DWORD style = WS_CHILD | WS_CLIPSIBLINGS | BS_OWNERDRAW; LPCWSTR defaultLabelStr = L""; LPCWSTR labelStr = defaultLabelStr; DWORD exStyle = 0; if (GetRTL()) { exStyle |= WS_EX_RIGHT; if (GetRTLReadingOrder()) exStyle |= WS_EX_RTLREADING; } label = (jstring)env->GetObjectField(target, AwtCheckbox::labelID); if (label != NULL) { labelStr = JNU_GetStringPlatformChars(env, label, 0); } if (labelStr != 0) { jint x = env->GetIntField(target, AwtComponent::xID); jint y = env->GetIntField(target, AwtComponent::yID); jint width = env->GetIntField(target, AwtComponent::widthID); jint height = env->GetIntField(target, AwtComponent::heightID); checkbox->CreateHWnd(env, labelStr, style, exStyle, x, y, width, height, awtParent->GetHWnd(), reinterpret_cast<HMENU>(static_cast<INT_PTR>( awtParent->CreateControlID())), ::GetSysColor(COLOR_WINDOWTEXT), ::GetSysColor(COLOR_BTNFACE), peer); if (labelStr != defaultLabelStr) { JNU_ReleaseStringPlatformChars(env, label, labelStr); } } else { throw std::bad_alloc(); } } } catch (...) { env->DeleteLocalRef(label); env->DeleteLocalRef(target); throw; } done: env->DeleteLocalRef(label); env->DeleteLocalRef(target); return checkbox; }