1 /* 2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #import "CWrapper.h" 27 28 #import <JavaNativeFoundation/JavaNativeFoundation.h> 29 30 #import "AWTWindow.h" 31 #import "LWCToolkit.h" 32 #import "GeomUtilities.h" 33 #import "ThreadUtilities.h" 34 35 #import "sun_lwawt_macosx_CWrapper_NSWindow.h" 36 37 /* 38 * Class: sun_lwawt_macosx_CWrapper$NSObject 39 * Method: release 40 * Signature: (J)V 41 */ 42 JNIEXPORT void JNICALL 43 Java_sun_lwawt_macosx_CWrapper_00024NSObject_release 44 (JNIEnv *env, jclass cls, jlong objectPtr) 45 { 46 JNF_COCOA_ENTER(env); 47 48 id obj = (id)jlong_to_ptr(objectPtr); 49 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ 50 CFRelease(obj); 51 }]; 52 53 JNF_COCOA_EXIT(env); 54 } 55 56 57 /* 58 * Class: sun_lwawt_macosx_CWrapper$NSWindow 59 * Method: makeKeyAndOrderFront 60 * Signature: (J)V 61 */ 62 JNIEXPORT void JNICALL 63 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyAndOrderFront 64 (JNIEnv *env, jclass cls, jlong windowPtr) 65 { 66 JNF_COCOA_ENTER(env); 67 68 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 69 [JNFRunLoop performOnMainThread:@selector(makeKeyAndOrderFront:) 70 on:window 71 withObject:nil 72 waitUntilDone:NO]; 73 74 [JNFRunLoop performOnMainThread:@selector(synthesizeMouseEnteredExitedEvents) 75 on:window 76 withObject:nil 77 waitUntilDone:NO]; 78 79 JNF_COCOA_EXIT(env); 80 } 81 82 /* 83 * Class: sun_lwawt_macosx_CWrapper$NSWindow 84 * Method: makeKeyWindow 85 * Signature: (J)V 86 */ 87 JNIEXPORT void JNICALL 88 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyWindow 89 (JNIEnv *env, jclass cls, jlong windowPtr) 90 { 91 JNF_COCOA_ENTER(env); 92 93 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 94 [JNFRunLoop performOnMainThread:@selector(makeKeyWindow) 95 on:window 96 withObject:nil 97 waitUntilDone:NO]; 98 99 JNF_COCOA_EXIT(env); 100 } 101 102 /* 103 * Class: sun_lwawt_macosx_CWrapper$NSWindow 104 * Method: makeMainWindow 105 * Signature: (J)V 106 */ 107 JNIEXPORT void JNICALL 108 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeMainWindow 109 (JNIEnv *env, jclass cls, jlong windowPtr) 110 { 111 JNF_COCOA_ENTER(env); 112 113 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 114 [JNFRunLoop performOnMainThread:@selector(makeMainWindow) 115 on:window 116 withObject:nil 117 waitUntilDone:NO]; 118 119 JNF_COCOA_EXIT(env); 120 } 121 122 /* 123 * Class: sun_lwawt_macosx_CWrapper$NSWindow 124 * Method: canBecomeMainWindow 125 * Signature: (J)V 126 */ 127 JNIEXPORT jboolean JNICALL 128 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_canBecomeMainWindow 129 (JNIEnv *env, jclass cls, jlong windowPtr) 130 { 131 __block jboolean canBecomeMainWindow = JNI_FALSE; 132 133 JNF_COCOA_ENTER(env); 134 135 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 136 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ 137 canBecomeMainWindow = [window canBecomeMainWindow]; 138 }]; 139 140 JNF_COCOA_EXIT(env); 141 142 return canBecomeMainWindow; 143 } 144 145 /* 146 * Class: sun_lwawt_macosx_CWrapper$NSWindow 147 * Method: isKeyWindow 148 * Signature: (J)Z 149 */ 150 JNIEXPORT jboolean JNICALL 151 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_isKeyWindow 152 (JNIEnv *env, jclass cls, jlong windowPtr) 153 { 154 __block jboolean isKeyWindow = JNI_FALSE; 155 156 JNF_COCOA_ENTER(env); 157 158 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 159 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ 160 isKeyWindow = [window isKeyWindow]; 161 }]; 162 163 JNF_COCOA_EXIT(env); 164 165 return isKeyWindow; 166 } 167 168 /* 169 * Class: sun_lwawt_macosx_CWrapper$NSWindow 170 * Method: orderFront 171 * Signature: (J)V 172 */ 173 JNIEXPORT void JNICALL 174 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFront 175 (JNIEnv *env, jclass cls, jlong windowPtr) 176 { 177 JNF_COCOA_ENTER(env); 178 179 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 180 [JNFRunLoop performOnMainThread:@selector(orderFront:) 181 on:window 182 withObject:window 183 waitUntilDone:NO]; 184 185 [JNFRunLoop performOnMainThread:@selector(synthesizeMouseEnteredExitedEvents) 186 on:window 187 withObject:nil 188 waitUntilDone:NO]; 189 190 JNF_COCOA_EXIT(env); 191 } 192 193 /* 194 * Class: sun_lwawt_macosx_CWrapper$NSWindow 195 * Method: orderOut 196 * Signature: (J)V 197 */ 198 JNIEXPORT void JNICALL 199 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderOut 200 (JNIEnv *env, jclass cls, jlong windowPtr) 201 { 202 JNF_COCOA_ENTER(env); 203 204 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 205 [JNFRunLoop performOnMainThread:@selector(orderOut:) 206 on:window 207 withObject:window 208 waitUntilDone:NO]; 209 210 [JNFRunLoop performOnMainThread:@selector(synthesizeMouseEnteredExitedEvents) 211 on:window 212 withObject:nil 213 waitUntilDone:NO]; 214 215 JNF_COCOA_EXIT(env); 216 } 217 218 /* 219 * Class: sun_lwawt_macosx_CWrapper$NSWindow 220 * Method: orderFrontRegardless 221 * Signature: (J)V 222 */ 223 JNIEXPORT void JNICALL 224 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFrontRegardless 225 (JNIEnv *env, jclass cls, jlong windowPtr) 226 { 227 JNF_COCOA_ENTER(env); 228 229 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 230 [JNFRunLoop performOnMainThread:@selector(orderFrontRegardless) 231 on:window 232 withObject:nil 233 waitUntilDone:NO]; 234 235 [JNFRunLoop performOnMainThread:@selector(synthesizeMouseEnteredExitedEvents) 236 on:window 237 withObject:nil 238 waitUntilDone:NO]; 239 240 JNF_COCOA_EXIT(env); 241 } 242 243 /* 244 * Class: sun_lwawt_macosx_CWrapper$NSWindow 245 * Method: orderWindow 246 * Signature: (JIJ)V 247 */ 248 JNIEXPORT void JNICALL 249 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderWindow 250 (JNIEnv *env, jclass cls, jlong windowPtr, jint order, jlong relativeToPtr) 251 { 252 JNF_COCOA_ENTER(env); 253 254 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 255 NSWindow *relativeTo = (NSWindow *)jlong_to_ptr(relativeToPtr); 256 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ 257 [window orderWindow:(NSWindowOrderingMode)order relativeTo:[relativeTo windowNumber]]; 258 }]; 259 260 JNF_COCOA_EXIT(env); 261 } 262 263 // Used for CWrapper.NSWindow.setLevel() (and level() which isn't implemented yet) 264 static NSInteger LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_MAX_WINDOW_LEVELS]; 265 static void initLevels() 266 { 267 static dispatch_once_t pred; 268 269 dispatch_once(&pred, ^{ 270 LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSNormalWindowLevel] = NSNormalWindowLevel; 271 LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSFloatingWindowLevel] = NSFloatingWindowLevel; 272 }); 273 } 274 275 /* 276 * Class: sun_lwawt_macosx_CWrapper$NSWindow 277 * Method: setLevel 278 * Signature: (JI)V 279 */ 280 JNIEXPORT void JNICALL 281 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setLevel 282 (JNIEnv *env, jclass cls, jlong windowPtr, jint level) 283 { 284 JNF_COCOA_ENTER(env); 285 286 if (level >= 0 && level < sun_lwawt_macosx_CWrapper_NSWindow_MAX_WINDOW_LEVELS) { 287 initLevels(); 288 289 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 290 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ 291 [window setLevel: LEVELS[level]]; 292 }]; 293 } else { 294 [JNFException raise:env as:kIllegalArgumentException reason:"unknown level"]; 295 } 296 297 JNF_COCOA_EXIT(env); 298 } 299 300 /* 301 * Class: sun_lwawt_macosx_CWrapper$NSWindow 302 * Method: addChildWindow 303 * Signature: (JJI)V 304 */ 305 JNIEXPORT void JNICALL 306 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_addChildWindow 307 (JNIEnv *env, jclass cls, jlong parentPtr, jlong childPtr, jint order) 308 { 309 JNF_COCOA_ENTER(env); 310 311 NSWindow *parent = (NSWindow *)jlong_to_ptr(parentPtr); 312 NSWindow *child = (NSWindow *)jlong_to_ptr(childPtr); 313 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ 314 [parent addChildWindow:child ordered:order]; 315 }]; 316 317 JNF_COCOA_EXIT(env); 318 } 319 320 /* 321 * Class: sun_lwawt_macosx_CWrapper$NSWindow 322 * Method: removeChildWindow 323 * Signature: (JJ)V 324 */ 325 JNIEXPORT void JNICALL 326 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_removeChildWindow 327 (JNIEnv *env, jclass cls, jlong parentPtr, jlong childPtr) 328 { 329 JNF_COCOA_ENTER(env); 330 331 AWTWindow *parent = (AWTWindow *)jlong_to_ptr(parentPtr); 332 AWTWindow *child = (AWTWindow *)jlong_to_ptr(childPtr); 333 [JNFRunLoop performOnMainThread:@selector(removeChildWindow:) 334 on:parent 335 withObject:child 336 waitUntilDone:NO]; 337 338 JNF_COCOA_EXIT(env); 339 } 340 341 /* 342 * Class: sun_lwawt_macosx_CWrapper$NSWindow 343 * Method: setFrame 344 * Signature: (JIIIIZ)V 345 */ 346 JNIEXPORT void JNICALL 347 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setFrame 348 (JNIEnv *env, jclass cls, jlong windowPtr, jint x, jint y, jint w, jint h, jboolean display) 349 { 350 JNF_COCOA_ENTER(env); 351 352 AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr); 353 NSRect frame = NSMakeRect(x, y, w, h); 354 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ 355 [window setFrame:frame display:display]; 356 [window synthesizeMouseEnteredExitedEvents]; 357 }]; 358 359 JNF_COCOA_EXIT(env); 360 } 361 362 /* 363 * Class: sun_lwawt_macosx_CWrapper$NSWindow 364 * Method: setAlphaValue 365 * Signature: (JF)V 366 */ 367 JNIEXPORT void JNICALL 368 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setAlphaValue 369 (JNIEnv *env, jclass cls, jlong windowPtr, jfloat alpha) 370 { 371 JNF_COCOA_ENTER(env); 372 373 AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr); 374 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ 375 [window setAlphaValue:(CGFloat)alpha]; 376 }]; 377 378 JNF_COCOA_EXIT(env); 379 } 380 381 /* 382 * Class: sun_lwawt_macosx_CWrapper$NSWindow 383 * Method: setOpaque 384 * Signature: (Z)V 385 */ 386 JNIEXPORT void JNICALL 387 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setOpaque 388 (JNIEnv *env, jclass cls, jlong windowPtr, jboolean opaque) 389 { 390 JNF_COCOA_ENTER(env); 391 392 AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr); 393 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ 394 [window setOpaque:(BOOL)opaque]; 395 }]; 396 397 JNF_COCOA_EXIT(env); 398 } 399 400 /* 401 * Class: sun_lwawt_macosx_CWrapper$NSWindow 402 * Method: setBackgroundColor 403 * Signature: (J)V 404 */ 405 JNIEXPORT void JNICALL 406 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setBackgroundColor 407 (JNIEnv *env, jclass cls, jlong windowPtr, jlong colorPtr) 408 { 409 JNF_COCOA_ENTER(env); 410 411 AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr); 412 NSColor *color = (NSColor *)jlong_to_ptr(colorPtr); 413 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ 414 [window setBackgroundColor:color]; 415 }]; 416 417 JNF_COCOA_EXIT(env); 418 } 419 420 /* 421 * Class: sun_lwawt_macosx_CWrapper$NSWindow 422 * Method: screen 423 * Signature: (J)J 424 */ 425 JNIEXPORT jlong JNICALL 426 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_screen 427 (JNIEnv *env, jclass cls, jlong windowPtr) 428 { 429 __block jlong screenPtr = 0L; 430 431 JNF_COCOA_ENTER(env); 432 433 AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr); 434 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ 435 const NSScreen *screen = [window screen]; 436 CFRetain(screen); // GC 437 screenPtr = ptr_to_jlong(screen); 438 }]; 439 440 JNF_COCOA_EXIT(env); 441 442 return screenPtr; 443 } 444 445 /* 446 * Method: miniaturize 447 * Signature: (J)V 448 */ 449 JNIEXPORT void JNICALL 450 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_miniaturize 451 (JNIEnv *env, jclass cls, jlong windowPtr) 452 { 453 JNF_COCOA_ENTER(env); 454 455 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 456 [JNFRunLoop performOnMainThread:@selector(miniaturize:) 457 on:window 458 withObject:nil 459 waitUntilDone:NO]; 460 461 JNF_COCOA_EXIT(env); 462 } 463 464 /* 465 * Class: sun_lwawt_macosx_CWrapper$NSWindow 466 * Method: deminiaturize 467 * Signature: (J)V 468 */ 469 JNIEXPORT void JNICALL 470 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_deminiaturize 471 (JNIEnv *env, jclass cls, jlong windowPtr) 472 { 473 JNF_COCOA_ENTER(env); 474 475 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 476 [JNFRunLoop performOnMainThread:@selector(deminiaturize:) 477 on:window 478 withObject:nil 479 waitUntilDone:NO]; 480 481 JNF_COCOA_EXIT(env); 482 } 483 484 /* 485 * Class: sun_lwawt_macosx_CWrapper$NSWindow 486 * Method: zoom 487 * Signature: (J)V 488 */ 489 JNIEXPORT void JNICALL 490 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_zoom 491 (JNIEnv *env, jclass cls, jlong windowPtr) 492 { 493 JNF_COCOA_ENTER(env); 494 495 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 496 [JNFRunLoop performOnMainThread:@selector(zoom:) 497 on:window 498 withObject:nil 499 waitUntilDone:NO]; 500 501 [JNFRunLoop performOnMainThread:@selector(synthesizeMouseEnteredExitedEvents) 502 on:window 503 withObject:nil 504 waitUntilDone:NO]; 505 506 JNF_COCOA_EXIT(env); 507 } 508 509 /* 510 * Class: sun_lwawt_macosx_CWrapper$NSWindow 511 * Method: makeFirstResponder 512 * Signature: (JJ)V 513 */ 514 JNIEXPORT void JNICALL 515 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeFirstResponder 516 (JNIEnv *env, jclass cls, jlong windowPtr, jlong responderPtr) 517 { 518 JNF_COCOA_ENTER(env); 519 520 NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); 521 NSResponder *responder = (NSResponder *)jlong_to_ptr(responderPtr); 522 [JNFRunLoop performOnMainThread:@selector(makeFirstResponder:) 523 on:window 524 withObject:responder 525 waitUntilDone:NO]; 526 527 JNF_COCOA_EXIT(env); 528 } 529 530 /* 531 * Class: sun_lwawt_macosx_CWrapper$NSView 532 * Method: addSubview 533 * Signature: (JJ)V 534 */ 535 JNIEXPORT void JNICALL 536 Java_sun_lwawt_macosx_CWrapper_00024NSView_addSubview 537 (JNIEnv *env, jclass cls, jlong viewPtr, jlong subviewPtr) 538 { 539 JNF_COCOA_ENTER(env); 540 541 NSView *view = (NSView *)jlong_to_ptr(viewPtr); 542 NSView *subview = (NSView *)jlong_to_ptr(subviewPtr); 543 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ 544 [view addSubview:subview]; 545 }]; 546 547 JNF_COCOA_EXIT(env); 548 } 549 550 /* 551 * Class: sun_lwawt_macosx_CWrapper$NSView 552 * Method: removeFromSuperview 553 * Signature: (J)V 554 */ 555 JNIEXPORT void JNICALL 556 Java_sun_lwawt_macosx_CWrapper_00024NSView_removeFromSuperview 557 (JNIEnv *env, jclass cls, jlong viewPtr) 558 { 559 JNF_COCOA_ENTER(env); 560 561 NSView *view = (NSView *)jlong_to_ptr(viewPtr); 562 [JNFRunLoop performOnMainThread:@selector(removeFromSuperview) 563 on:view 564 withObject:nil 565 waitUntilDone:NO]; 566 567 JNF_COCOA_EXIT(env); 568 } 569 570 /* 571 * Class: sun_lwawt_macosx_CWrapper$NSView 572 * Method: setFrame 573 * Signature: (JIIII)V 574 */ 575 JNIEXPORT void JNICALL 576 Java_sun_lwawt_macosx_CWrapper_00024NSView_setFrame 577 (JNIEnv *env, jclass cls, jlong viewPtr, jint x, jint y, jint w, jint h) 578 { 579 JNF_COCOA_ENTER(env); 580 581 NSView *view = (NSView *)jlong_to_ptr(viewPtr); 582 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ 583 [view setFrame:NSMakeRect(x, y, w, h)]; 584 }]; 585 586 JNF_COCOA_EXIT(env); 587 } 588 589 /* 590 * Class: sun_lwawt_macosx_CWrapper$NSView 591 * Method: frame 592 * Signature: (J)Ljava/awt/Rectangle; 593 */ 594 JNIEXPORT jobject JNICALL 595 Java_sun_lwawt_macosx_CWrapper_00024NSView_frame 596 (JNIEnv *env, jclass cls, jlong viewPtr) 597 { 598 jobject jRect = NULL; 599 600 JNF_COCOA_ENTER(env); 601 602 __block NSRect rect = NSZeroRect; 603 604 NSView *view = (NSView *)jlong_to_ptr(viewPtr); 605 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ 606 rect = [view frame]; 607 }]; 608 609 jRect = NSToJavaRect(env, rect); 610 611 JNF_COCOA_EXIT(env); 612 613 return jRect; 614 } 615 616 /* 617 * Class: sun_lwawt_macosx_CWrapper$NSView 618 * Method: enterFullScreenMode 619 * Signature: (J)V 620 */ 621 JNIEXPORT void JNICALL 622 Java_sun_lwawt_macosx_CWrapper_00024NSView_enterFullScreenMode 623 (JNIEnv *env, jclass cls, jlong viewPtr) 624 { 625 JNF_COCOA_ENTER(env); 626 627 NSView *view = (NSView *)jlong_to_ptr(viewPtr); 628 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ 629 NSScreen *screen = [[view window] screen]; 630 NSDictionary *opts = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], NSFullScreenModeAllScreens, nil]; 631 [view enterFullScreenMode:screen withOptions:opts]; 632 }]; 633 634 JNF_COCOA_EXIT(env); 635 } 636 637 /* 638 * Class: sun_lwawt_macosx_CWrapper$NSView 639 * Method: exitFullScreenMode 640 * Signature: (J)V 641 */ 642 JNIEXPORT void JNICALL 643 Java_sun_lwawt_macosx_CWrapper_00024NSView_exitFullScreenMode 644 (JNIEnv *env, jclass cls, jlong viewPtr) 645 { 646 JNF_COCOA_ENTER(env); 647 648 NSView *view = (NSView *)jlong_to_ptr(viewPtr); 649 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ 650 [view exitFullScreenModeWithOptions:nil]; 651 }]; 652 653 JNF_COCOA_EXIT(env); 654 } 655 656 /* 657 * Class: sun_lwawt_macosx_CWrapper$NSView 658 * Method: window 659 * Signature: (J)J 660 */ 661 JNIEXPORT jlong JNICALL 662 Java_sun_lwawt_macosx_CWrapper_00024NSView_window 663 (JNIEnv *env, jclass cls, jlong viewPtr) 664 { 665 __block jlong windowPtr = 0L; 666 667 JNF_COCOA_ENTER(env); 668 669 NSView *view = (NSView *)jlong_to_ptr(viewPtr); 670 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ 671 windowPtr = ptr_to_jlong([view window]); 672 }]; 673 674 JNF_COCOA_EXIT(env); 675 676 return windowPtr; 677 } 678 679 /* 680 * Class: sun_lwawt_macosx_CWrapper$NSScreen 681 * Method: frame 682 * Signature: (J)Ljava/awt/Rectangle; 683 */ 684 JNIEXPORT jobject JNICALL 685 Java_sun_lwawt_macosx_CWrapper_00024NSScreen_frame 686 (JNIEnv *env, jclass cls, jlong screenPtr) 687 { 688 jobject jRect = NULL; 689 690 JNF_COCOA_ENTER(env); 691 692 __block NSRect rect = NSZeroRect; 693 694 NSScreen *screen = (NSScreen *)jlong_to_ptr(screenPtr); 695 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ 696 rect = [screen frame]; 697 }]; 698 699 jRect = NSToJavaRect(env, rect); 700 701 JNF_COCOA_EXIT(env); 702 703 return jRect; 704 } 705 706 /* 707 * Class: sun_lwawt_macosx_CWrapper_NSScreen 708 * Method: visibleFrame 709 * Signature: (J)Ljava/awt/geom/Rectangle2D; 710 */ 711 JNIEXPORT jobject JNICALL 712 Java_sun_lwawt_macosx_CWrapper_00024NSScreen_visibleFrame 713 (JNIEnv *env, jclass cls, jlong screenPtr) 714 { 715 jobject jRect = NULL; 716 717 JNF_COCOA_ENTER(env); 718 719 __block NSRect rect = NSZeroRect; 720 721 NSScreen *screen = (NSScreen *)jlong_to_ptr(screenPtr); 722 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ 723 rect = [screen visibleFrame]; 724 }]; 725 726 jRect = NSToJavaRect(env, rect); 727 728 JNF_COCOA_EXIT(env); 729 730 return jRect; 731 } 732 733 /* 734 * Class: sun_lwawt_macosx_CWrapper_NSScreen 735 * Method: screenByDisplayId 736 * Signature: (J)J 737 */ 738 JNIEXPORT jlong JNICALL 739 Java_sun_lwawt_macosx_CWrapper_00024NSScreen_screenByDisplayId 740 (JNIEnv *env, jclass cls, jint displayID) 741 { 742 __block jlong screenPtr = 0L; 743 744 JNF_COCOA_ENTER(env); 745 746 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ 747 NSArray *screens = [NSScreen screens]; 748 for (NSScreen *screen in screens) { 749 NSDictionary *screenInfo = [screen deviceDescription]; 750 NSNumber *screenID = [screenInfo objectForKey:@"NSScreenNumber"]; 751 if ([screenID intValue] == displayID){ 752 CFRetain(screen); // GC 753 screenPtr = ptr_to_jlong(screen); 754 break; 755 } 756 } 757 }]; 758 759 JNF_COCOA_EXIT(env); 760 761 return screenPtr; 762 } 763 764 /* 765 * Class: sun_lwawt_macosx_CWrapper$NSColor 766 * Method: clearColor 767 * Signature: ()J 768 */ 769 JNIEXPORT jlong JNICALL 770 Java_sun_lwawt_macosx_CWrapper_00024NSColor_clearColor 771 (JNIEnv *env, jclass cls) 772 { 773 __block jlong clearColorPtr = 0L; 774 775 JNF_COCOA_ENTER(env); 776 777 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ 778 clearColorPtr = ptr_to_jlong([NSColor clearColor]); 779 }]; 780 781 JNF_COCOA_EXIT(env); 782 783 return clearColorPtr; 784 } 785