src/macosx/native/sun/awt/AWTView.m

Print this page




1226 
1227 @end // AWTView
1228 
1229 /*
1230  * Class:     sun_lwawt_macosx_CPlatformView
1231  * Method:    nativeCreateView
1232  * Signature: (IIII)J
1233  */
1234 JNIEXPORT jlong JNICALL
1235 Java_sun_lwawt_macosx_CPlatformView_nativeCreateView
1236 (JNIEnv *env, jobject obj, jint originX, jint originY, jint width, jint height, jlong windowLayerPtr)
1237 {
1238     __block AWTView *newView = nil;
1239 
1240 JNF_COCOA_ENTER(env);
1241 
1242     NSRect rect = NSMakeRect(originX, originY, width, height);
1243     jobject cPlatformView = (*env)->NewGlobalRef(env, obj);
1244 
1245     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
1246         AWT_ASSERT_APPKIT_THREAD;
1247                                            
1248         CALayer *windowLayer = jlong_to_ptr(windowLayerPtr);
1249         AWTView *view = [[AWTView alloc] initWithRect:rect
1250                                          platformView:cPlatformView
1251                                          windowLayer:windowLayer];
1252         CFRetain(view);
1253         [view release]; // GC
1254         newView = view;
1255     }];
1256 
1257 JNF_COCOA_EXIT(env);
1258 
1259     return ptr_to_jlong(newView);
1260 }
1261 
1262 /*
1263  * Class:     sun_lwawt_macosx_CPlatformView
1264  * Method:    nativeSetAutoResizable
1265  * Signature: (JZ)V;
1266  */
1267 
1268 JNIEXPORT void JNICALL
1269 Java_sun_lwawt_macosx_CPlatformView_nativeSetAutoResizable
1270 (JNIEnv *env, jclass cls, jlong viewPtr, jboolean toResize)
1271 {
1272 JNF_COCOA_ENTER(env);
1273     
1274     NSView *view = (NSView *)jlong_to_ptr(viewPtr);    
1275 
1276    [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
1277        AWT_ASSERT_APPKIT_THREAD;
1278        
1279        if (toResize) {
1280            [view setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable];
1281        } else {
1282            [view setAutoresizingMask: NSViewMinYMargin | NSViewMaxXMargin];
1283        }
1284        
1285        if ([view superview] != nil) {
1286            [[view superview] setAutoresizesSubviews:(BOOL)toResize];
1287        }
1288        
1289     }];
1290 JNF_COCOA_EXIT(env);
1291 }
1292 
1293 /*
1294  * Class:     sun_lwawt_macosx_CPlatformView
1295  * Method:    nativeGetNSViewDisplayID
1296  * Signature: (J)I;
1297  */
1298 
1299 JNIEXPORT jint JNICALL
1300 Java_sun_lwawt_macosx_CPlatformView_nativeGetNSViewDisplayID
1301 (JNIEnv *env, jclass cls, jlong viewPtr)
1302 {
1303     __block jint ret; //CGDirectDisplayID
1304     
1305 JNF_COCOA_ENTER(env);
1306     
1307     NSView *view = (NSView *)jlong_to_ptr(viewPtr);    
1308     NSWindow *window = [view window];
1309     
1310     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
1311             AWT_ASSERT_APPKIT_THREAD;
1312         
1313             ret = (jint)[[AWTWindow getNSWindowDisplayID_AppKitThread: window] intValue];
1314     }];
1315     
1316 JNF_COCOA_EXIT(env);
1317     
1318     return ret;
1319 }
1320 
1321 /*
1322  * Class:     sun_lwawt_macosx_CPlatformView
1323  * Method:    nativeGetLocationOnScreen
1324  * Signature: (J)Ljava/awt/Rectangle;
1325  */
1326 
1327 JNIEXPORT jobject JNICALL
1328 Java_sun_lwawt_macosx_CPlatformView_nativeGetLocationOnScreen
1329 (JNIEnv *env, jclass cls, jlong viewPtr)
1330 {
1331     jobject jRect = NULL;
1332     
1333 JNF_COCOA_ENTER(env);
1334     
1335     __block NSRect rect = NSZeroRect;
1336     
1337     NSView *view = (NSView *)jlong_to_ptr(viewPtr);    
1338     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
1339         AWT_ASSERT_APPKIT_THREAD;
1340         
1341         NSRect viewBounds = [view bounds];
1342         NSRect frameInWindow = [view convertRect:viewBounds toView:nil];
1343         rect = [[view window] convertRectToScreen:frameInWindow];
1344         NSRect screenRect = [[NSScreen mainScreen] frame];
1345         //Convert coordinates to top-left corner origin
1346         rect.origin.y = screenRect.size.height - rect.origin.y - viewBounds.size.height;
1347     }];
1348     jRect = NSToJavaRect(env, rect);
1349     
1350 JNF_COCOA_EXIT(env);
1351     
1352     return jRect;
1353 }
1354 
1355 /*
1356  * Class:     sun_lwawt_macosx_CPlatformView
1357  * Method:    nativeIsViewUnderMouse
1358  * Signature: (J)Z;
1359  */
1360 
1361 JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_CPlatformView_nativeIsViewUnderMouse
1362 (JNIEnv *env, jclass clazz, jlong viewPtr)
1363 {
1364     __block jboolean underMouse = JNI_FALSE;
1365     
1366 JNF_COCOA_ENTER(env);
1367     
1368     NSView *nsView = OBJC(viewPtr);
1369    [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
1370        AWT_ASSERT_APPKIT_THREAD;
1371        
1372        NSPoint ptWindowCoords = [[nsView window] mouseLocationOutsideOfEventStream];
1373        NSPoint ptViewCoords = [nsView convertPoint:ptWindowCoords fromView:nil];
1374        underMouse = [nsView hitTest:ptViewCoords] != nil;
1375     }];
1376     
1377 JNF_COCOA_EXIT(env);
1378     
1379     return underMouse;
1380 }
1381 
1382 


1226 
1227 @end // AWTView
1228 
1229 /*
1230  * Class:     sun_lwawt_macosx_CPlatformView
1231  * Method:    nativeCreateView
1232  * Signature: (IIII)J
1233  */
1234 JNIEXPORT jlong JNICALL
1235 Java_sun_lwawt_macosx_CPlatformView_nativeCreateView
1236 (JNIEnv *env, jobject obj, jint originX, jint originY, jint width, jint height, jlong windowLayerPtr)
1237 {
1238     __block AWTView *newView = nil;
1239 
1240 JNF_COCOA_ENTER(env);
1241 
1242     NSRect rect = NSMakeRect(originX, originY, width, height);
1243     jobject cPlatformView = (*env)->NewGlobalRef(env, obj);
1244 
1245     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){

1246 
1247         CALayer *windowLayer = jlong_to_ptr(windowLayerPtr);
1248         AWTView *view = [[AWTView alloc] initWithRect:rect
1249                                          platformView:cPlatformView
1250                                          windowLayer:windowLayer];
1251         CFRetain(view);
1252         [view release]; // GC
1253         newView = view;
1254     }];
1255 
1256 JNF_COCOA_EXIT(env);
1257 
1258     return ptr_to_jlong(newView);
1259 }
1260 
1261 /*
1262  * Class:     sun_lwawt_macosx_CPlatformView
1263  * Method:    nativeSetAutoResizable
1264  * Signature: (JZ)V;
1265  */
1266 
1267 JNIEXPORT void JNICALL
1268 Java_sun_lwawt_macosx_CPlatformView_nativeSetAutoResizable
1269 (JNIEnv *env, jclass cls, jlong viewPtr, jboolean toResize)
1270 {
1271 JNF_COCOA_ENTER(env);
1272     
1273     NSView *view = (NSView *)jlong_to_ptr(viewPtr);    
1274 
1275    [ThreadUtilities performOnMainThreadWaiting:NO block:^(){

1276 
1277        if (toResize) {
1278            [view setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable];
1279        } else {
1280            [view setAutoresizingMask: NSViewMinYMargin | NSViewMaxXMargin];
1281        }
1282        
1283        if ([view superview] != nil) {
1284            [[view superview] setAutoresizesSubviews:(BOOL)toResize];
1285        }
1286        
1287     }];
1288 JNF_COCOA_EXIT(env);
1289 }
1290 
1291 /*
1292  * Class:     sun_lwawt_macosx_CPlatformView
1293  * Method:    nativeGetNSViewDisplayID
1294  * Signature: (J)I;
1295  */
1296 
1297 JNIEXPORT jint JNICALL
1298 Java_sun_lwawt_macosx_CPlatformView_nativeGetNSViewDisplayID
1299 (JNIEnv *env, jclass cls, jlong viewPtr)
1300 {
1301     __block jint ret; //CGDirectDisplayID
1302     
1303 JNF_COCOA_ENTER(env);
1304     
1305     NSView *view = (NSView *)jlong_to_ptr(viewPtr);    
1306     NSWindow *window = [view window];
1307     
1308     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){

1309 
1310             ret = (jint)[[AWTWindow getNSWindowDisplayID_AppKitThread: window] intValue];
1311     }];
1312     
1313 JNF_COCOA_EXIT(env);
1314     
1315     return ret;
1316 }
1317 
1318 /*
1319  * Class:     sun_lwawt_macosx_CPlatformView
1320  * Method:    nativeGetLocationOnScreen
1321  * Signature: (J)Ljava/awt/Rectangle;
1322  */
1323 
1324 JNIEXPORT jobject JNICALL
1325 Java_sun_lwawt_macosx_CPlatformView_nativeGetLocationOnScreen
1326 (JNIEnv *env, jclass cls, jlong viewPtr)
1327 {
1328     jobject jRect = NULL;
1329     
1330 JNF_COCOA_ENTER(env);
1331     
1332     __block NSRect rect = NSZeroRect;
1333     
1334     NSView *view = (NSView *)jlong_to_ptr(viewPtr);    
1335     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){

1336 
1337         NSRect viewBounds = [view bounds];
1338         NSRect frameInWindow = [view convertRect:viewBounds toView:nil];
1339         rect = [[view window] convertRectToScreen:frameInWindow];
1340         NSRect screenRect = [[NSScreen mainScreen] frame];
1341         //Convert coordinates to top-left corner origin
1342         rect.origin.y = screenRect.size.height - rect.origin.y - viewBounds.size.height;
1343     }];
1344     jRect = NSToJavaRect(env, rect);
1345     
1346 JNF_COCOA_EXIT(env);
1347     
1348     return jRect;
1349 }
1350 
1351 /*
1352  * Class:     sun_lwawt_macosx_CPlatformView
1353  * Method:    nativeIsViewUnderMouse
1354  * Signature: (J)Z;
1355  */
1356 
1357 JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_CPlatformView_nativeIsViewUnderMouse
1358 (JNIEnv *env, jclass clazz, jlong viewPtr)
1359 {
1360     __block jboolean underMouse = JNI_FALSE;
1361     
1362 JNF_COCOA_ENTER(env);
1363     
1364     NSView *nsView = OBJC(viewPtr);
1365    [ThreadUtilities performOnMainThreadWaiting:YES block:^(){       


1366        NSPoint ptWindowCoords = [[nsView window] mouseLocationOutsideOfEventStream];
1367        NSPoint ptViewCoords = [nsView convertPoint:ptWindowCoords fromView:nil];
1368        underMouse = [nsView hitTest:ptViewCoords] != nil;
1369     }];
1370     
1371 JNF_COCOA_EXIT(env);
1372     
1373     return underMouse;
1374 }
1375 
1376