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