Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/macosx/native_NOTIOS/sun/awt/CWrapper.m
38829 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 <JavaNativeFoundation/JavaNativeFoundation.h>26#import "ThreadUtilities.h"27#import "sun_lwawt_macosx_CWrapper_NSWindow.h"2829/*30* Class: sun_lwawt_macosx_CWrapper$NSWindow31* Method: makeKeyAndOrderFront32* Signature: (J)V33*/34JNIEXPORT void JNICALL35Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyAndOrderFront36(JNIEnv *env, jclass cls, jlong windowPtr)37{38JNF_COCOA_ENTER(env);3940NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);41[ThreadUtilities performOnMainThread:@selector(makeKeyAndOrderFront:)42on:window43withObject:nil44waitUntilDone:NO];4546JNF_COCOA_EXIT(env);47}4849/*50* Class: sun_lwawt_macosx_CWrapper$NSWindow51* Method: makeKeyWindow52* Signature: (J)V53*/54JNIEXPORT void JNICALL55Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyWindow56(JNIEnv *env, jclass cls, jlong windowPtr)57{58JNF_COCOA_ENTER(env);5960NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);61[ThreadUtilities performOnMainThread:@selector(makeKeyWindow)62on:window63withObject:nil64waitUntilDone:NO];6566JNF_COCOA_EXIT(env);67}6869/*70* Class: sun_lwawt_macosx_CWrapper$NSWindow71* Method: makeMainWindow72* Signature: (J)V73*/74JNIEXPORT void JNICALL75Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeMainWindow76(JNIEnv *env, jclass cls, jlong windowPtr)77{78JNF_COCOA_ENTER(env);7980NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);81[ThreadUtilities performOnMainThread:@selector(makeMainWindow)82on:window83withObject:nil84waitUntilDone:NO];8586JNF_COCOA_EXIT(env);87}8889/*90* Class: sun_lwawt_macosx_CWrapper$NSWindow91* Method: canBecomeMainWindow92* Signature: (J)V93*/94JNIEXPORT jboolean JNICALL95Java_sun_lwawt_macosx_CWrapper_00024NSWindow_canBecomeMainWindow96(JNIEnv *env, jclass cls, jlong windowPtr)97{98__block jboolean canBecomeMainWindow = JNI_FALSE;99100JNF_COCOA_ENTER(env);101102NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);103[ThreadUtilities performOnMainThreadWaiting:YES block:^(){104canBecomeMainWindow = [window canBecomeMainWindow];105}];106107JNF_COCOA_EXIT(env);108109return canBecomeMainWindow;110}111112/*113* Class: sun_lwawt_macosx_CWrapper$NSWindow114* Method: isKeyWindow115* Signature: (J)Z116*/117JNIEXPORT jboolean JNICALL118Java_sun_lwawt_macosx_CWrapper_00024NSWindow_isKeyWindow119(JNIEnv *env, jclass cls, jlong windowPtr)120{121__block jboolean isKeyWindow = JNI_FALSE;122123JNF_COCOA_ENTER(env);124125NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);126[ThreadUtilities performOnMainThreadWaiting:YES block:^(){127isKeyWindow = [window isKeyWindow];128}];129130JNF_COCOA_EXIT(env);131132return isKeyWindow;133}134135/*136* Class: sun_lwawt_macosx_CWrapper$NSWindow137* Method: orderFront138* Signature: (J)V139*/140JNIEXPORT void JNICALL141Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFront142(JNIEnv *env, jclass cls, jlong windowPtr)143{144JNF_COCOA_ENTER(env);145146NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);147[ThreadUtilities performOnMainThread:@selector(orderFront:)148on:window149withObject:window150waitUntilDone:NO];151152JNF_COCOA_EXIT(env);153}154155/*156* Class: sun_lwawt_macosx_CWrapper$NSWindow157* Method: orderOut158* Signature: (J)V159*/160JNIEXPORT void JNICALL161Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderOut162(JNIEnv *env, jclass cls, jlong windowPtr)163{164JNF_COCOA_ENTER(env);165166NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);167[ThreadUtilities performOnMainThread:@selector(orderOut:)168on:window169withObject:window170waitUntilDone:NO];171172JNF_COCOA_EXIT(env);173}174175/*176* Class: sun_lwawt_macosx_CWrapper$NSWindow177* Method: close178* Signature: (J)V179*/180JNIEXPORT void JNICALL181Java_sun_lwawt_macosx_CWrapper_00024NSWindow_close182(JNIEnv *env, jclass cls, jlong windowPtr)183{184JNF_COCOA_ENTER(env);185NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);186[ThreadUtilities performOnMainThreadWaiting:NO block:^(){187[window close];188}];189JNF_COCOA_EXIT(env);190}191192/*193* Class: sun_lwawt_macosx_CWrapper$NSWindow194* Method: orderFrontRegardless195* Signature: (J)V196*/197JNIEXPORT void JNICALL198Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFrontRegardless199(JNIEnv *env, jclass cls, jlong windowPtr)200{201JNF_COCOA_ENTER(env);202203NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);204[ThreadUtilities performOnMainThread:@selector(orderFrontRegardless)205on:window206withObject:nil207waitUntilDone:NO];208209JNF_COCOA_EXIT(env);210}211212/*213* Class: sun_lwawt_macosx_CWrapper$NSWindow214* Method: orderWindow215* Signature: (JIJ)V216*/217JNIEXPORT void JNICALL218Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderWindow219(JNIEnv *env, jclass cls, jlong windowPtr, jint order, jlong relativeToPtr)220{221JNF_COCOA_ENTER(env);222223NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);224NSWindow *relativeTo = (NSWindow *)jlong_to_ptr(relativeToPtr);225[ThreadUtilities performOnMainThreadWaiting:NO block:^(){226[window orderWindow:(NSWindowOrderingMode)order relativeTo:[relativeTo windowNumber]];227}];228229JNF_COCOA_EXIT(env);230}231232// Used for CWrapper.NSWindow.setLevel() (and level() which isn't implemented yet)233static NSInteger LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_MAX_WINDOW_LEVELS];234static void initLevels()235{236static dispatch_once_t pred;237238dispatch_once(&pred, ^{239LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSNormalWindowLevel] = NSNormalWindowLevel;240LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSFloatingWindowLevel] = NSFloatingWindowLevel;241LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSPopUpMenuWindowLevel] = NSPopUpMenuWindowLevel;242});243}244245/*246* Class: sun_lwawt_macosx_CWrapper$NSWindow247* Method: setLevel248* Signature: (JI)V249*/250JNIEXPORT void JNICALL251Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setLevel252(JNIEnv *env, jclass cls, jlong windowPtr, jint level)253{254JNF_COCOA_ENTER(env);255256if (level >= 0 && level < sun_lwawt_macosx_CWrapper_NSWindow_MAX_WINDOW_LEVELS) {257initLevels();258259NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);260[ThreadUtilities performOnMainThreadWaiting:NO block:^(){261[window setLevel: LEVELS[level]];262}];263} else {264[JNFException raise:env as:kIllegalArgumentException reason:"unknown level"];265}266267JNF_COCOA_EXIT(env);268}269270/*271* Class: sun_lwawt_macosx_CWrapper$NSWindow272* Method: addChildWindow273* Signature: (JJI)V274*/275JNIEXPORT void JNICALL276Java_sun_lwawt_macosx_CWrapper_00024NSWindow_addChildWindow277(JNIEnv *env, jclass cls, jlong parentPtr, jlong childPtr, jint order)278{279JNF_COCOA_ENTER(env);280281NSWindow *parent = (NSWindow *)jlong_to_ptr(parentPtr);282NSWindow *child = (NSWindow *)jlong_to_ptr(childPtr);283[ThreadUtilities performOnMainThreadWaiting:NO block:^(){284[parent addChildWindow:child ordered:order];285}];286287JNF_COCOA_EXIT(env);288}289290/*291* Class: sun_lwawt_macosx_CWrapper$NSWindow292* Method: removeChildWindow293* Signature: (JJ)V294*/295JNIEXPORT void JNICALL296Java_sun_lwawt_macosx_CWrapper_00024NSWindow_removeChildWindow297(JNIEnv *env, jclass cls, jlong parentPtr, jlong childPtr)298{299JNF_COCOA_ENTER(env);300301NSWindow *parent = (NSWindow *)jlong_to_ptr(parentPtr);302NSWindow *child = (NSWindow *)jlong_to_ptr(childPtr);303[ThreadUtilities performOnMainThread:@selector(removeChildWindow:)304on:parent305withObject:child306waitUntilDone:NO];307308JNF_COCOA_EXIT(env);309}310311/*312* Class: sun_lwawt_macosx_CWrapper$NSWindow313* Method: setAlphaValue314* Signature: (JF)V315*/316JNIEXPORT void JNICALL317Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setAlphaValue318(JNIEnv *env, jclass cls, jlong windowPtr, jfloat alpha)319{320JNF_COCOA_ENTER(env);321322NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);323[ThreadUtilities performOnMainThreadWaiting:NO block:^(){324[window setAlphaValue:(CGFloat)alpha];325}];326327JNF_COCOA_EXIT(env);328}329330/*331* Class: sun_lwawt_macosx_CWrapper$NSWindow332* Method: setOpaque333* Signature: (Z)V334*/335JNIEXPORT void JNICALL336Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setOpaque337(JNIEnv *env, jclass cls, jlong windowPtr, jboolean opaque)338{339JNF_COCOA_ENTER(env);340341NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);342[ThreadUtilities performOnMainThreadWaiting:NO block:^(){343[window setOpaque:(BOOL)opaque];344}];345346JNF_COCOA_EXIT(env);347}348349/*350* Class: sun_lwawt_macosx_CWrapper$NSWindow351* Method: setBackgroundColor352* Signature: (J)V353*/354JNIEXPORT void JNICALL355Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setBackgroundColor356(JNIEnv *env, jclass cls, jlong windowPtr, jint rgb)357{358JNF_COCOA_ENTER(env);359360NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);361CGFloat alpha = (((rgb >> 24) & 0xff) / 255.0);362CGFloat red = (((rgb >> 16) & 0xff) / 255.0);363CGFloat green = (((rgb >> 8) & 0xff) / 255.0);364CGFloat blue = (((rgb >> 0) & 0xff) / 255.0);365NSColor *color = [NSColor colorWithCalibratedRed:red green:green blue:blue366alpha:alpha];367[ThreadUtilities performOnMainThreadWaiting:NO block:^(){368[window setBackgroundColor:color];369}];370371JNF_COCOA_EXIT(env);372}373374/*375* Class: sun_lwawt_macosx_CWrapper$NSWindow376* Method: miniaturize377* Signature: (J)V378*/379JNIEXPORT void JNICALL380Java_sun_lwawt_macosx_CWrapper_00024NSWindow_miniaturize381(JNIEnv *env, jclass cls, jlong windowPtr)382{383JNF_COCOA_ENTER(env);384385NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);386[ThreadUtilities performOnMainThread:@selector(miniaturize:)387on:window388withObject:nil389waitUntilDone:NO];390391JNF_COCOA_EXIT(env);392}393394/*395* Class: sun_lwawt_macosx_CWrapper$NSWindow396* Method: deminiaturize397* Signature: (J)V398*/399JNIEXPORT void JNICALL400Java_sun_lwawt_macosx_CWrapper_00024NSWindow_deminiaturize401(JNIEnv *env, jclass cls, jlong windowPtr)402{403JNF_COCOA_ENTER(env);404405NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);406[ThreadUtilities performOnMainThread:@selector(deminiaturize:)407on:window408withObject:nil409waitUntilDone:NO];410411JNF_COCOA_EXIT(env);412}413414/*415* Class: sun_lwawt_macosx_CWrapper$NSWindow416* Method: isZoomed417* Signature: (J)Z418*/419JNIEXPORT jboolean JNICALL420Java_sun_lwawt_macosx_CWrapper_00024NSWindow_isZoomed421(JNIEnv *env, jclass cls, jlong windowPtr)422{423__block jboolean isZoomed = JNI_FALSE;424425JNF_COCOA_ENTER(env);426427NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);428[ThreadUtilities performOnMainThreadWaiting:YES block:^(){429isZoomed = [window isZoomed];430}];431432JNF_COCOA_EXIT(env);433434return isZoomed;435}436437/*438* Class: sun_lwawt_macosx_CWrapper$NSWindow439* Method: zoom440* Signature: (J)V441*/442JNIEXPORT void JNICALL443Java_sun_lwawt_macosx_CWrapper_00024NSWindow_zoom444(JNIEnv *env, jclass cls, jlong windowPtr)445{446JNF_COCOA_ENTER(env);447448NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);449[ThreadUtilities performOnMainThread:@selector(zoom:)450on:window451withObject:nil452waitUntilDone:NO];453454JNF_COCOA_EXIT(env);455}456457/*458* Class: sun_lwawt_macosx_CWrapper$NSWindow459* Method: makeFirstResponder460* Signature: (JJ)V461*/462JNIEXPORT void JNICALL463Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeFirstResponder464(JNIEnv *env, jclass cls, jlong windowPtr, jlong responderPtr)465{466JNF_COCOA_ENTER(env);467468NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);469NSResponder *responder = (NSResponder *)jlong_to_ptr(responderPtr);470[ThreadUtilities performOnMainThread:@selector(makeFirstResponder:)471on:window472withObject:responder473waitUntilDone:NO];474475JNF_COCOA_EXIT(env);476}477478/*479* Class: sun_lwawt_macosx_CWrapper$NSView480* Method: addSubview481* Signature: (JJ)V482*/483JNIEXPORT void JNICALL484Java_sun_lwawt_macosx_CWrapper_00024NSView_addSubview485(JNIEnv *env, jclass cls, jlong viewPtr, jlong subviewPtr)486{487JNF_COCOA_ENTER(env);488489NSView *view = (NSView *)jlong_to_ptr(viewPtr);490NSView *subview = (NSView *)jlong_to_ptr(subviewPtr);491[ThreadUtilities performOnMainThreadWaiting:YES block:^(){492[view addSubview:subview];493}];494495JNF_COCOA_EXIT(env);496}497498/*499* Class: sun_lwawt_macosx_CWrapper$NSView500* Method: removeFromSuperview501* Signature: (J)V502*/503JNIEXPORT void JNICALL504Java_sun_lwawt_macosx_CWrapper_00024NSView_removeFromSuperview505(JNIEnv *env, jclass cls, jlong viewPtr)506{507JNF_COCOA_ENTER(env);508509NSView *view = (NSView *)jlong_to_ptr(viewPtr);510[ThreadUtilities performOnMainThread:@selector(removeFromSuperview)511on:view512withObject:nil513waitUntilDone:NO];514515JNF_COCOA_EXIT(env);516}517518/*519* Class: sun_lwawt_macosx_CWrapper$NSView520* Method: setFrame521* Signature: (JIIII)V522*/523JNIEXPORT void JNICALL524Java_sun_lwawt_macosx_CWrapper_00024NSView_setFrame525(JNIEnv *env, jclass cls, jlong viewPtr, jint x, jint y, jint w, jint h)526{527JNF_COCOA_ENTER(env);528529NSView *view = (NSView *)jlong_to_ptr(viewPtr);530[ThreadUtilities performOnMainThreadWaiting:NO block:^(){531[view setFrame:NSMakeRect(x, y, w, h)];532}];533534JNF_COCOA_EXIT(env);535}536537/*538* Class: sun_lwawt_macosx_CWrapper$NSView539* Method: window540* Signature: (J)J541*/542JNIEXPORT jlong JNICALL543Java_sun_lwawt_macosx_CWrapper_00024NSView_window544(JNIEnv *env, jclass cls, jlong viewPtr)545{546__block jlong windowPtr = 0L;547548JNF_COCOA_ENTER(env);549550NSView *view = (NSView *)jlong_to_ptr(viewPtr);551[ThreadUtilities performOnMainThreadWaiting:YES block:^(){552windowPtr = ptr_to_jlong([view window]);553}];554555JNF_COCOA_EXIT(env);556557return windowPtr;558}559560/*561* Class: sun_lwawt_macosx_CWrapper$NSView562* Method: setHidden563* Signature: (JZ)V564*/565JNIEXPORT void JNICALL566Java_sun_lwawt_macosx_CWrapper_00024NSView_setHidden567(JNIEnv *env, jclass cls, jlong viewPtr, jboolean toHide)568{569JNF_COCOA_ENTER(env);570571NSView *view = (NSView *)jlong_to_ptr(viewPtr);572[ThreadUtilities performOnMainThreadWaiting:NO block:^(){573[view setHidden:(BOOL)toHide];574}];575576JNF_COCOA_EXIT(env);577}578579/*580* Class: sun_lwawt_macosx_CWrapper$NSView581* Method: setToolTip582* Signature: (JLjava/lang/String;)V583*/584JNIEXPORT void JNICALL585Java_sun_lwawt_macosx_CWrapper_00024NSView_setToolTip586(JNIEnv *env, jclass cls, jlong viewPtr, jstring msg)587{588589JNF_COCOA_ENTER(env);590591NSView *view = (NSView *)jlong_to_ptr(viewPtr);592NSString* s = JNFJavaToNSString(env, msg);593[ThreadUtilities performOnMainThreadWaiting:NO block:^(){594[view setToolTip: s];595}];596597JNF_COCOA_EXIT(env);598}599600601