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 |