Path: blob/master/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m
41152 views
/*1* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425#import "JNIUtilities.h"2627#import "ThreadUtilities.h"28#import "sun_lwawt_macosx_CWrapper_NSWindow.h"2930/*31* Class: sun_lwawt_macosx_CWrapper$NSWindow32* Method: makeKeyAndOrderFront33* Signature: (J)V34*/35JNIEXPORT void JNICALL36Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyAndOrderFront37(JNIEnv *env, jclass cls, jlong windowPtr)38{39JNI_COCOA_ENTER(env);4041NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);42[ThreadUtilities performOnMainThread:@selector(makeKeyAndOrderFront:)43on:window44withObject:nil45waitUntilDone:NO];4647JNI_COCOA_EXIT(env);48}4950/*51* Class: sun_lwawt_macosx_CWrapper$NSWindow52* Method: makeKeyWindow53* Signature: (J)V54*/55JNIEXPORT void JNICALL56Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyWindow57(JNIEnv *env, jclass cls, jlong windowPtr)58{59JNI_COCOA_ENTER(env);6061NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);62[ThreadUtilities performOnMainThread:@selector(makeKeyWindow)63on:window64withObject:nil65waitUntilDone:NO];6667JNI_COCOA_EXIT(env);68}6970/*71* Class: sun_lwawt_macosx_CWrapper$NSWindow72* Method: makeMainWindow73* Signature: (J)V74*/75JNIEXPORT void JNICALL76Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeMainWindow77(JNIEnv *env, jclass cls, jlong windowPtr)78{79JNI_COCOA_ENTER(env);8081NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);82[ThreadUtilities performOnMainThread:@selector(makeMainWindow)83on:window84withObject:nil85waitUntilDone:NO];8687JNI_COCOA_EXIT(env);88}8990/*91* Class: sun_lwawt_macosx_CWrapper$NSWindow92* Method: canBecomeMainWindow93* Signature: (J)V94*/95JNIEXPORT jboolean JNICALL96Java_sun_lwawt_macosx_CWrapper_00024NSWindow_canBecomeMainWindow97(JNIEnv *env, jclass cls, jlong windowPtr)98{99__block jboolean canBecomeMainWindow = JNI_FALSE;100101JNI_COCOA_ENTER(env);102103NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);104[ThreadUtilities performOnMainThreadWaiting:YES block:^(){105canBecomeMainWindow = [window canBecomeMainWindow];106}];107108JNI_COCOA_EXIT(env);109110return canBecomeMainWindow;111}112113/*114* Class: sun_lwawt_macosx_CWrapper$NSWindow115* Method: isKeyWindow116* Signature: (J)Z117*/118JNIEXPORT jboolean JNICALL119Java_sun_lwawt_macosx_CWrapper_00024NSWindow_isKeyWindow120(JNIEnv *env, jclass cls, jlong windowPtr)121{122__block jboolean isKeyWindow = JNI_FALSE;123124JNI_COCOA_ENTER(env);125126NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);127[ThreadUtilities performOnMainThreadWaiting:YES block:^(){128isKeyWindow = [window isKeyWindow];129}];130131JNI_COCOA_EXIT(env);132133return isKeyWindow;134}135136/*137* Class: sun_lwawt_macosx_CWrapper$NSWindow138* Method: orderFront139* Signature: (J)V140*/141JNIEXPORT void JNICALL142Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFront143(JNIEnv *env, jclass cls, jlong windowPtr)144{145JNI_COCOA_ENTER(env);146147NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);148[ThreadUtilities performOnMainThread:@selector(orderFront:)149on:window150withObject:window151waitUntilDone:NO];152153JNI_COCOA_EXIT(env);154}155156/*157* Class: sun_lwawt_macosx_CWrapper$NSWindow158* Method: orderOut159* Signature: (J)V160*/161JNIEXPORT void JNICALL162Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderOut163(JNIEnv *env, jclass cls, jlong windowPtr)164{165JNI_COCOA_ENTER(env);166167NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);168[ThreadUtilities performOnMainThread:@selector(orderOut:)169on:window170withObject:window171waitUntilDone:NO];172173JNI_COCOA_EXIT(env);174}175176/*177* Class: sun_lwawt_macosx_CWrapper$NSWindow178* Method: close179* Signature: (J)V180*/181JNIEXPORT void JNICALL182Java_sun_lwawt_macosx_CWrapper_00024NSWindow_close183(JNIEnv *env, jclass cls, jlong windowPtr)184{185JNI_COCOA_ENTER(env);186NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);187[ThreadUtilities performOnMainThreadWaiting:NO block:^(){188[window close];189}];190JNI_COCOA_EXIT(env);191}192193/*194* Class: sun_lwawt_macosx_CWrapper$NSWindow195* Method: orderFrontRegardless196* Signature: (J)V197*/198JNIEXPORT void JNICALL199Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFrontRegardless200(JNIEnv *env, jclass cls, jlong windowPtr)201{202JNI_COCOA_ENTER(env);203204NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);205[ThreadUtilities performOnMainThread:@selector(orderFrontRegardless)206on:window207withObject:nil208waitUntilDone:NO];209210JNI_COCOA_EXIT(env);211}212213/*214* Class: sun_lwawt_macosx_CWrapper$NSWindow215* Method: orderWindow216* Signature: (JIJ)V217*/218JNIEXPORT void JNICALL219Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderWindow220(JNIEnv *env, jclass cls, jlong windowPtr, jint order, jlong relativeToPtr)221{222JNI_COCOA_ENTER(env);223224NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);225NSWindow *relativeTo = (NSWindow *)jlong_to_ptr(relativeToPtr);226[ThreadUtilities performOnMainThreadWaiting:NO block:^(){227[window orderWindow:(NSWindowOrderingMode)order relativeTo:[relativeTo windowNumber]];228}];229230JNI_COCOA_EXIT(env);231}232233// Used for CWrapper.NSWindow.setLevel() (and level() which isn't implemented yet)234static NSInteger LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_MAX_WINDOW_LEVELS];235static void initLevels()236{237static dispatch_once_t pred;238239dispatch_once(&pred, ^{240LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSNormalWindowLevel] = NSNormalWindowLevel;241LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSFloatingWindowLevel] = NSFloatingWindowLevel;242LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSPopUpMenuWindowLevel] = NSPopUpMenuWindowLevel;243});244}245246/*247* Class: sun_lwawt_macosx_CWrapper$NSWindow248* Method: setLevel249* Signature: (JI)V250*/251JNIEXPORT void JNICALL252Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setLevel253(JNIEnv *env, jclass cls, jlong windowPtr, jint level)254{255JNI_COCOA_ENTER(env);256257if (level >= 0 && level < sun_lwawt_macosx_CWrapper_NSWindow_MAX_WINDOW_LEVELS) {258initLevels();259260NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);261[ThreadUtilities performOnMainThreadWaiting:NO block:^(){262[window setLevel: LEVELS[level]];263}];264} else {265JNU_ThrowIllegalArgumentException(env, "unknown level");266}267268JNI_COCOA_EXIT(env);269}270271/*272* Class: sun_lwawt_macosx_CWrapper$NSWindow273* Method: addChildWindow274* Signature: (JJI)V275*/276JNIEXPORT void JNICALL277Java_sun_lwawt_macosx_CWrapper_00024NSWindow_addChildWindow278(JNIEnv *env, jclass cls, jlong parentPtr, jlong childPtr, jint order)279{280JNI_COCOA_ENTER(env);281282NSWindow *parent = (NSWindow *)jlong_to_ptr(parentPtr);283NSWindow *child = (NSWindow *)jlong_to_ptr(childPtr);284[ThreadUtilities performOnMainThreadWaiting:NO block:^(){285[parent addChildWindow:child ordered:order];286}];287288JNI_COCOA_EXIT(env);289}290291/*292* Class: sun_lwawt_macosx_CWrapper$NSWindow293* Method: removeChildWindow294* Signature: (JJ)V295*/296JNIEXPORT void JNICALL297Java_sun_lwawt_macosx_CWrapper_00024NSWindow_removeChildWindow298(JNIEnv *env, jclass cls, jlong parentPtr, jlong childPtr)299{300JNI_COCOA_ENTER(env);301302NSWindow *parent = (NSWindow *)jlong_to_ptr(parentPtr);303NSWindow *child = (NSWindow *)jlong_to_ptr(childPtr);304[ThreadUtilities performOnMainThread:@selector(removeChildWindow:)305on:parent306withObject:child307waitUntilDone:NO];308309JNI_COCOA_EXIT(env);310}311312/*313* Class: sun_lwawt_macosx_CWrapper$NSWindow314* Method: setAlphaValue315* Signature: (JF)V316*/317JNIEXPORT void JNICALL318Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setAlphaValue319(JNIEnv *env, jclass cls, jlong windowPtr, jfloat alpha)320{321JNI_COCOA_ENTER(env);322323NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);324[ThreadUtilities performOnMainThreadWaiting:NO block:^(){325[window setAlphaValue:(CGFloat)alpha];326}];327328JNI_COCOA_EXIT(env);329}330331/*332* Class: sun_lwawt_macosx_CWrapper$NSWindow333* Method: setOpaque334* Signature: (Z)V335*/336JNIEXPORT void JNICALL337Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setOpaque338(JNIEnv *env, jclass cls, jlong windowPtr, jboolean opaque)339{340JNI_COCOA_ENTER(env);341342NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);343[ThreadUtilities performOnMainThreadWaiting:NO block:^(){344[window setOpaque:(BOOL)opaque];345}];346347JNI_COCOA_EXIT(env);348}349350/*351* Class: sun_lwawt_macosx_CWrapper$NSWindow352* Method: setBackgroundColor353* Signature: (J)V354*/355JNIEXPORT void JNICALL356Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setBackgroundColor357(JNIEnv *env, jclass cls, jlong windowPtr, jint rgb)358{359JNI_COCOA_ENTER(env);360361NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);362CGFloat alpha = (((rgb >> 24) & 0xff) / 255.0);363CGFloat red = (((rgb >> 16) & 0xff) / 255.0);364CGFloat green = (((rgb >> 8) & 0xff) / 255.0);365CGFloat blue = (((rgb >> 0) & 0xff) / 255.0);366NSColor *color = [NSColor colorWithCalibratedRed:red green:green blue:blue367alpha:alpha];368[ThreadUtilities performOnMainThreadWaiting:NO block:^(){369[window setBackgroundColor:color];370}];371372JNI_COCOA_EXIT(env);373}374375/*376* Class: sun_lwawt_macosx_CWrapper$NSWindow377* Method: miniaturize378* Signature: (J)V379*/380JNIEXPORT void JNICALL381Java_sun_lwawt_macosx_CWrapper_00024NSWindow_miniaturize382(JNIEnv *env, jclass cls, jlong windowPtr)383{384JNI_COCOA_ENTER(env);385386NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);387[ThreadUtilities performOnMainThread:@selector(miniaturize:)388on:window389withObject:nil390waitUntilDone:NO];391392JNI_COCOA_EXIT(env);393}394395/*396* Class: sun_lwawt_macosx_CWrapper$NSWindow397* Method: deminiaturize398* Signature: (J)V399*/400JNIEXPORT void JNICALL401Java_sun_lwawt_macosx_CWrapper_00024NSWindow_deminiaturize402(JNIEnv *env, jclass cls, jlong windowPtr)403{404JNI_COCOA_ENTER(env);405406NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);407[ThreadUtilities performOnMainThread:@selector(deminiaturize:)408on:window409withObject:nil410waitUntilDone:NO];411412JNI_COCOA_EXIT(env);413}414415/*416* Class: sun_lwawt_macosx_CWrapper$NSWindow417* Method: isZoomed418* Signature: (J)Z419*/420JNIEXPORT jboolean JNICALL421Java_sun_lwawt_macosx_CWrapper_00024NSWindow_isZoomed422(JNIEnv *env, jclass cls, jlong windowPtr)423{424__block jboolean isZoomed = JNI_FALSE;425426JNI_COCOA_ENTER(env);427428NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);429[ThreadUtilities performOnMainThreadWaiting:YES block:^(){430isZoomed = [window isZoomed];431}];432433JNI_COCOA_EXIT(env);434435return isZoomed;436}437438/*439* Class: sun_lwawt_macosx_CWrapper$NSWindow440* Method: zoom441* Signature: (J)V442*/443JNIEXPORT void JNICALL444Java_sun_lwawt_macosx_CWrapper_00024NSWindow_zoom445(JNIEnv *env, jclass cls, jlong windowPtr)446{447JNI_COCOA_ENTER(env);448449NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);450[ThreadUtilities performOnMainThread:@selector(zoom:)451on:window452withObject:nil453waitUntilDone:NO];454455JNI_COCOA_EXIT(env);456}457458/*459* Class: sun_lwawt_macosx_CWrapper$NSWindow460* Method: makeFirstResponder461* Signature: (JJ)V462*/463JNIEXPORT void JNICALL464Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeFirstResponder465(JNIEnv *env, jclass cls, jlong windowPtr, jlong responderPtr)466{467JNI_COCOA_ENTER(env);468469NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);470NSResponder *responder = (NSResponder *)jlong_to_ptr(responderPtr);471[ThreadUtilities performOnMainThread:@selector(makeFirstResponder:)472on:window473withObject:responder474waitUntilDone:NO];475476JNI_COCOA_EXIT(env);477}478479/*480* Class: sun_lwawt_macosx_CWrapper$NSView481* Method: addSubview482* Signature: (JJ)V483*/484JNIEXPORT void JNICALL485Java_sun_lwawt_macosx_CWrapper_00024NSView_addSubview486(JNIEnv *env, jclass cls, jlong viewPtr, jlong subviewPtr)487{488JNI_COCOA_ENTER(env);489490NSView *view = (NSView *)jlong_to_ptr(viewPtr);491NSView *subview = (NSView *)jlong_to_ptr(subviewPtr);492[ThreadUtilities performOnMainThreadWaiting:YES block:^(){493[view addSubview:subview];494}];495496JNI_COCOA_EXIT(env);497}498499/*500* Class: sun_lwawt_macosx_CWrapper$NSView501* Method: removeFromSuperview502* Signature: (J)V503*/504JNIEXPORT void JNICALL505Java_sun_lwawt_macosx_CWrapper_00024NSView_removeFromSuperview506(JNIEnv *env, jclass cls, jlong viewPtr)507{508JNI_COCOA_ENTER(env);509510NSView *view = (NSView *)jlong_to_ptr(viewPtr);511[ThreadUtilities performOnMainThread:@selector(removeFromSuperview)512on:view513withObject:nil514waitUntilDone:NO];515516JNI_COCOA_EXIT(env);517}518519/*520* Class: sun_lwawt_macosx_CWrapper$NSView521* Method: setFrame522* Signature: (JIIII)V523*/524JNIEXPORT void JNICALL525Java_sun_lwawt_macosx_CWrapper_00024NSView_setFrame526(JNIEnv *env, jclass cls, jlong viewPtr, jint x, jint y, jint w, jint h)527{528JNI_COCOA_ENTER(env);529530NSView *view = (NSView *)jlong_to_ptr(viewPtr);531[ThreadUtilities performOnMainThreadWaiting:NO block:^(){532[view setFrame:NSMakeRect(x, y, w, h)];533}];534535JNI_COCOA_EXIT(env);536}537538/*539* Class: sun_lwawt_macosx_CWrapper$NSView540* Method: window541* Signature: (J)J542*/543JNIEXPORT jlong JNICALL544Java_sun_lwawt_macosx_CWrapper_00024NSView_window545(JNIEnv *env, jclass cls, jlong viewPtr)546{547__block jlong windowPtr = 0L;548549JNI_COCOA_ENTER(env);550551NSView *view = (NSView *)jlong_to_ptr(viewPtr);552[ThreadUtilities performOnMainThreadWaiting:YES block:^(){553windowPtr = ptr_to_jlong([view window]);554}];555556JNI_COCOA_EXIT(env);557558return windowPtr;559}560561/*562* Class: sun_lwawt_macosx_CWrapper$NSView563* Method: setHidden564* Signature: (JZ)V565*/566JNIEXPORT void JNICALL567Java_sun_lwawt_macosx_CWrapper_00024NSView_setHidden568(JNIEnv *env, jclass cls, jlong viewPtr, jboolean toHide)569{570JNI_COCOA_ENTER(env);571572NSView *view = (NSView *)jlong_to_ptr(viewPtr);573[ThreadUtilities performOnMainThreadWaiting:NO block:^(){574[view setHidden:(BOOL)toHide];575}];576577JNI_COCOA_EXIT(env);578}579580/*581* Class: sun_lwawt_macosx_CWrapper$NSView582* Method: setToolTip583* Signature: (JLjava/lang/String;)V584*/585JNIEXPORT void JNICALL586Java_sun_lwawt_macosx_CWrapper_00024NSView_setToolTip587(JNIEnv *env, jclass cls, jlong viewPtr, jstring msg)588{589590JNI_COCOA_ENTER(env);591592NSView *view = (NSView *)jlong_to_ptr(viewPtr);593NSString* s = JavaStringToNSString(env, msg);594[ThreadUtilities performOnMainThreadWaiting:NO block:^(){595[view setToolTip: s];596}];597598JNI_COCOA_EXIT(env);599}600601602