JNIEXPORT jobjectArray JNICALL Java_com_badlogic_gdx_controllers_desktop_ois_Ois_getJoystickNames(JNIEnv* env, jobject object, jlong inputManagerPtr) { //@line:75 OIS::InputManager* inputManager = (OIS::InputManager*)inputManagerPtr; OIS::DeviceList map = inputManager->listFreeDevices(); int joystickCount = inputManager->getNumberOfDevices(OIS::OISJoyStick); jobjectArray names = (jobjectArray)env->NewObjectArray(joystickCount, env->FindClass("java/lang/String"), env->NewStringUTF("")); int index = 0; for (OIS::DeviceList::iterator i = map.begin(); i != map.end(); ++i) { if (i->first != OIS::OISJoyStick) continue; env->SetObjectArrayElement(names, index++, env->NewStringUTF(i->second.c_str())); } return names; }
void doStartup() { ParamList pl; #if defined OIS_WIN32_PLATFORM //Create a capture window for Input Grabbing hWnd = CreateDialog( 0, MAKEINTRESOURCE(IDD_DIALOG1), 0,(DLGPROC)DlgProc); if( hWnd == NULL ) { std::cout << "Failed to create Win32 Window Dialog!" << std::endl; exit(1); } ShowWindow(hWnd, SW_SHOW); std::ostringstream wnd; wnd << (size_t)hWnd; pl.insert(std::make_pair( std::string("WINDOW"), wnd.str() )); //Default mode is foreground exclusive..but, we want to show mouse - so nonexclusive // pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND" ))); // pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE"))); #elif defined OIS_LINUX_PLATFORM //Connects to default X window if( !(xDisp = XOpenDisplay(0)) ) OIS_EXCEPT(E_General, "Error opening X!"); //Create a window xWin = XCreateSimpleWindow(xDisp,DefaultRootWindow(xDisp), 0,0, 100,100, 0, 0, 0); //bind our connection to that window XMapWindow(xDisp, xWin); //Select what events we want to listen to locally XSelectInput(xDisp, xWin, StructureNotifyMask); XEvent evtent; do { XNextEvent(xDisp, &evtent); } while(evtent.type != MapNotify); std::ostringstream wnd; wnd << xWin; pl.insert(std::make_pair(std::string("WINDOW"), wnd.str())); //For this demo, show mouse and do not grab (confine to window) // pl.insert(std::make_pair(std::string("x11_mouse_grab"), std::string("false"))); // pl.insert(std::make_pair(std::string("x11_mouse_hide"), std::string("false"))); #elif defined OIS_APPLE_PLATFORM // create the window rect in global coords ::Rect windowRect; windowRect.left = 0; windowRect.top = 0; windowRect.right = 300; windowRect.bottom = 300; // set the default attributes for the window WindowAttributes windowAttrs = kWindowStandardDocumentAttributes | kWindowStandardHandlerAttribute | kWindowInWindowMenuAttribute | kWindowHideOnFullScreenAttribute; // Create the window CreateNewWindow(kDocumentWindowClass, windowAttrs, &windowRect, &mWin); // Color the window background black SetThemeWindowBackground (mWin, kThemeBrushBlack, true); // Set the title of our window CFStringRef titleRef = CFStringCreateWithCString( kCFAllocatorDefault, "OIS Input", kCFStringEncodingASCII ); SetWindowTitleWithCFString( mWin, titleRef ); // Center our window on the screen RepositionWindow( mWin, NULL, kWindowCenterOnMainScreen ); // Install the event handler for the window InstallStandardEventHandler(GetWindowEventTarget(mWin)); // This will give our window focus, and not lock it to the terminal ProcessSerialNumber psn = { 0, kCurrentProcess }; TransformProcessType( &psn, kProcessTransformToForegroundApplication ); SetFrontProcess(&psn); // Display and select our window ShowWindow(mWin); SelectWindow(mWin); std::ostringstream wnd; wnd << (unsigned int)mWin; //cast to int so it gets encoded correctly (else it gets stored as a hex string) std::cout << "WindowRef: " << mWin << " WindowRef as int: " << wnd.str() << "\n"; pl.insert(std::make_pair(std::string("WINDOW"), wnd.str())); #endif // dont grab the input #ifndef WIN32 pl.insert(OIS::ParamList::value_type("x11_mouse_hide", "false")); pl.insert(OIS::ParamList::value_type("XAutoRepeatOn", "false")); pl.insert(OIS::ParamList::value_type("x11_mouse_grab", "false")); pl.insert(OIS::ParamList::value_type("x11_keyboard_grab", "false")); #else pl.insert(OIS::ParamList::value_type("w32_mouse", "DISCL_FOREGROUND")); pl.insert(OIS::ParamList::value_type("w32_mouse", "DISCL_NONEXCLUSIVE")); pl.insert(OIS::ParamList::value_type("w32_keyboard", "DISCL_FOREGROUND")); pl.insert(OIS::ParamList::value_type("w32_keyboard", "DISCL_NONEXCLUSIVE")); #endif // LINUX //This never returns null.. it will raise an exception on errors g_InputManager = InputManager::createInputSystem(pl); // print out some info unsigned int v = g_InputManager->getVersionNumber(); printf("OIS Version: %d.%d.%d\n", v>>16, (v>>8) & 0x000000FF, v & 0x000000FF); printf("+ Release Name: %s\n", g_InputManager->getVersionName().c_str()); printf("+ Manager: %s\n", g_InputManager->inputSystemName().c_str()); printf("+ Total Keyboards: %d\n", g_InputManager->getNumberOfDevices(OISKeyboard)); printf("+ Total Mice: %d\n", g_InputManager->getNumberOfDevices(OISMouse)); printf("+ Total JoySticks: %d\n", g_InputManager->getNumberOfDevices(OISJoyStick)); // List free devices printf("Free Devices:\n"); OIS::DeviceList list = g_InputManager->listFreeDevices(); const char *mOISDeviceType[6] = {"Unknown Device", "Keyboard", "Mouse", "JoyStick", "Tablet", "Other Device"}; for(OIS::DeviceList::iterator i = list.begin(); i != list.end(); ++i ) printf("* Device: %s, Vendor: %s\n", mOISDeviceType[i->first], i->second.c_str()); new OISB::System(); OISB::System::getSingleton().initialize(g_InputManager); }