222 { 223 awtMenuItem->MeasureItem(hDC, measureInfo); 224 } 225 226 int AwtMenu::CountItem(jobject target) 227 { 228 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); 229 jint nCount = env->CallIntMethod(target, AwtMenu::countItemsMID); 230 DASSERT(!safe_ExceptionOccurred(env)); 231 return nCount; 232 } 233 234 AwtMenuItem* AwtMenu::GetItem(jobject target, jint index) 235 { 236 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); 237 if (env->EnsureLocalCapacity(2) < 0) { 238 return NULL; 239 } 240 jobject menuItem = env->CallObjectMethod(target, AwtMenu::getItemMID, 241 index); 242 DASSERT(!safe_ExceptionOccurred(env)); 243 244 jobject wMenuItemPeer = GetPeerForTarget(env, menuItem); 245 246 PDATA pData; 247 AwtMenuItem* awtMenuItem = NULL; 248 249 JNI_CHECK_PEER_GOTO(wMenuItemPeer, done); 250 awtMenuItem = (AwtMenuItem*)pData; 251 252 done: 253 env->DeleteLocalRef(menuItem); 254 env->DeleteLocalRef(wMenuItemPeer); 255 256 return awtMenuItem; 257 } 258 259 void AwtMenu::DrawItems(DRAWITEMSTRUCT& drawInfo) 260 { 261 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); 262 if (env->EnsureLocalCapacity(1) < 0) { 263 return; 264 } 265 /* target is a java.awt.Menu */ 266 jobject target = GetTarget(env); 267 268 int nCount = CountItem(target); 269 for (int i = 0; i < nCount; i++) { 270 AwtMenuItem* awtMenuItem = GetItem(target, i); 271 if (awtMenuItem != NULL) { 272 SendDrawItem(awtMenuItem, drawInfo); 273 } 274 } 275 env->DeleteLocalRef(target); 276 } 277 278 void AwtMenu::DrawItem(DRAWITEMSTRUCT& drawInfo) 279 { 280 DASSERT(drawInfo.CtlType == ODT_MENU); 281 282 if (drawInfo.itemID == GetID()) { 283 DrawSelf(drawInfo); 284 return; 285 } 286 DrawItems(drawInfo); 287 } 288 289 void AwtMenu::MeasureItems(HDC hDC, MEASUREITEMSTRUCT& measureInfo) 290 { 291 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); 292 if (env->EnsureLocalCapacity(1) < 0) { 293 return; 294 } 295 /* target is a java.awt.Menu */ 296 jobject target = GetTarget(env); 297 int nCount = CountItem(target); 298 for (int i = 0; i < nCount; i++) { 299 AwtMenuItem* awtMenuItem = GetItem(target, i); 300 if (awtMenuItem != NULL) { 301 SendMeasureItem(awtMenuItem, hDC, measureInfo); 302 } 303 } 304 env->DeleteLocalRef(target); 305 } 306 307 void AwtMenu::MeasureItem(HDC hDC, MEASUREITEMSTRUCT& measureInfo) 308 { 309 DASSERT(measureInfo.CtlType == ODT_MENU); 310 311 if (measureInfo.itemID == GetID()) { 312 MeasureSelf(hDC, measureInfo); 313 return; 314 } 315 316 MeasureItems(hDC, measureInfo); 317 } 318 | 222 { 223 awtMenuItem->MeasureItem(hDC, measureInfo); 224 } 225 226 int AwtMenu::CountItem(jobject target) 227 { 228 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); 229 jint nCount = env->CallIntMethod(target, AwtMenu::countItemsMID); 230 DASSERT(!safe_ExceptionOccurred(env)); 231 return nCount; 232 } 233 234 AwtMenuItem* AwtMenu::GetItem(jobject target, jint index) 235 { 236 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); 237 if (env->EnsureLocalCapacity(2) < 0) { 238 return NULL; 239 } 240 jobject menuItem = env->CallObjectMethod(target, AwtMenu::getItemMID, 241 index); 242 if (!menuItem) return NULL; // menu item was removed concurrently 243 DASSERT(!safe_ExceptionOccurred(env)); 244 245 jobject wMenuItemPeer = GetPeerForTarget(env, menuItem); 246 247 PDATA pData; 248 AwtMenuItem* awtMenuItem = NULL; 249 250 JNI_CHECK_PEER_GOTO(wMenuItemPeer, done); 251 awtMenuItem = (AwtMenuItem*)pData; 252 253 done: 254 env->DeleteLocalRef(menuItem); 255 env->DeleteLocalRef(wMenuItemPeer); 256 257 return awtMenuItem; 258 } 259 260 void AwtMenu::DrawItems(DRAWITEMSTRUCT& drawInfo) 261 { 262 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); 263 if (env->EnsureLocalCapacity(1) < 0) { 264 return; 265 } 266 /* target is a java.awt.Menu */ 267 jobject target = GetTarget(env); 268 if(!target || env->ExceptionCheck()) return; 269 int nCount = CountItem(target); 270 for (int i = 0; i < nCount && !env->ExceptionCheck(); i++) { 271 AwtMenuItem* awtMenuItem = GetItem(target, i); 272 if (awtMenuItem != NULL) { 273 SendDrawItem(awtMenuItem, drawInfo); 274 } 275 } 276 env->DeleteLocalRef(target); 277 } 278 279 void AwtMenu::DrawItem(DRAWITEMSTRUCT& drawInfo) 280 { 281 DASSERT(drawInfo.CtlType == ODT_MENU); 282 283 if (drawInfo.itemID == GetID()) { 284 DrawSelf(drawInfo); 285 return; 286 } 287 DrawItems(drawInfo); 288 } 289 290 void AwtMenu::MeasureItems(HDC hDC, MEASUREITEMSTRUCT& measureInfo) 291 { 292 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); 293 if (env->EnsureLocalCapacity(1) < 0) { 294 return; 295 } 296 /* target is a java.awt.Menu */ 297 jobject target = GetTarget(env); 298 if(!target || env->ExceptionCheck()) return; 299 int nCount = CountItem(target); 300 for (int i = 0; i < nCount && !env->ExceptionCheck(); i++) { 301 AwtMenuItem* awtMenuItem = GetItem(target, i); 302 if (awtMenuItem != NULL) { 303 SendMeasureItem(awtMenuItem, hDC, measureInfo); 304 } 305 } 306 env->DeleteLocalRef(target); 307 } 308 309 void AwtMenu::MeasureItem(HDC hDC, MEASUREITEMSTRUCT& measureInfo) 310 { 311 DASSERT(measureInfo.CtlType == ODT_MENU); 312 313 if (measureInfo.itemID == GetID()) { 314 MeasureSelf(hDC, measureInfo); 315 return; 316 } 317 318 MeasureItems(hDC, measureInfo); 319 } 320 |