void show_menu(string message) { using namespace nanogui; glfwSetInputMode(mGLFWWindow, GLFW_CURSOR, GLFW_CURSOR_NORMAL); glActiveTexture(GL_TEXTURE0); FormHelper *gui = new FormHelper(this); window = gui->addWindow({0,0}, "Main Menu"); gui->setFixedSize({125, 20}); gui->addGroup(message); gui->addVariable("Server address", hostname); gui->addVariable("Username", username); gui->addVariable("Password", password); gui->addButton("Connect", [&](){ if (username != "" && password != "" && hostname != "") { hide_menu(); setup_connection(); } }); window->center(); performLayout(mNVGContext); menu_state = true; }
int main(int /* argc */, char ** /* argv */) { glfwInit(); glfwSetTime(0); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_SAMPLES, 0); glfwWindowHint(GLFW_RED_BITS, 8); glfwWindowHint(GLFW_GREEN_BITS, 8); glfwWindowHint(GLFW_BLUE_BITS, 8); glfwWindowHint(GLFW_ALPHA_BITS, 8); glfwWindowHint(GLFW_STENCIL_BITS, 8); glfwWindowHint(GLFW_DEPTH_BITS, 24); glfwWindowHint(GLFW_RESIZABLE, GL_TRUE); // Create a GLFWwindow object GLFWwindow* window = glfwCreateWindow(800, 800, "example3", nullptr, nullptr); if (window == nullptr) { std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); int width, height; glfwGetFramebufferSize(window, &width, &height); glViewport(0, 0, width, height); glfwSwapInterval(0); glfwSwapBuffers(window); // Create a nanogui screen and pass the glfw pointer to initialize screen = new Screen(); screen->initialize(window, true); // Create nanogui gui bool enabled = true; FormHelper *gui = new FormHelper(screen); ref<Window> nanoguiWindow = gui->addWindow(Eigen::Vector2i(10, 10), "Form helper example"); gui->addGroup("Basic types"); gui->addVariable("bool", bvar)->setTooltip("Test tooltip."); gui->addVariable("string", strval); gui->addGroup("Validating fields"); gui->addVariable("int", ivar)->setSpinnable(true); gui->addVariable("float", fvar)->setTooltip("Test."); gui->addVariable("double", dvar)->setSpinnable(true); gui->addGroup("Complex types"); gui->addVariable("Enumeration", enumval, enabled)->setItems({ "Item 1", "Item 2", "Item 3" }); gui->addVariable("Color", colval); gui->addGroup("Other widgets"); gui->addButton("A button", []() { std::cout << "Button pressed." << std::endl; })->setTooltip("Testing a much longer tooltip, that will wrap around to new lines multiple times.");; screen->setVisible(true); screen->performLayout(); nanoguiWindow->center(); glfwSetCursorPosCallback(window, [](GLFWwindow *w, double x, double y) { screen->cursorPosCallbackEvent(x, y); } ); glfwSetMouseButtonCallback(window, [](GLFWwindow *w, int button, int action, int modifiers) { screen->mouseButtonCallbackEvent(button, action, modifiers); } ); glfwSetKeyCallback(window, [](GLFWwindow *w, int key, int scancode, int action, int mods) { screen->keyCallbackEvent(key, scancode, action, mods); } ); glfwSetCharCallback(window, [](GLFWwindow *w, unsigned int codepoint) { screen->charCallbackEvent(codepoint); } ); glfwSetDropCallback(window, [](GLFWwindow *w, int count, const char **filenames) { screen->dropCallbackEvent(count, filenames); } ); glfwSetScrollCallback(window, [](GLFWwindow *w, double x, double y) { screen->scrollCallbackEvent(x, y); } ); glfwSetFramebufferSizeCallback(window, [](GLFWwindow* w, int width, int height) { screen->resizeCallbackEvent(width, height); } ); // Game loop while (!glfwWindowShouldClose(window)) { // Check if any events have been activated (key pressed, mouse moved etc.) and call corresponding response functions glfwPollEvents(); glClearColor(0.2f, 0.25f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); // Draw nanogui screen->drawContents(); screen->drawWidgets(); glfwSwapBuffers(window); } // Terminate GLFW, clearing any resources allocated by GLFW. glfwTerminate(); return 0; }
int main(int /* argc */, char ** /* argv */) { SDL_Init(SDL_INIT_VIDEO); // Initialize SDL2 SDL_Window *window; // Declare a pointer to an SDL_Window SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,0); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1); int winWidth = 1024; int winHeight = 600; // Create an application window with the following settings: window = SDL_CreateWindow( "An SDL2 window", // const char* title SDL_WINDOWPOS_UNDEFINED, // int x: initial x position SDL_WINDOWPOS_UNDEFINED, // int y: initial y position winWidth, // int w: width, in pixels winHeight, // int h: height, in pixels SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN // Uint32 flags: window options, see docs ); // Check that the window was successfully made if(window==NULL){ // In the event that the window could not be made... std::cout << "Could not create window: " << SDL_GetError() << '\n'; SDL_Quit(); return 1; } auto context = SDL_GL_CreateContext(window); SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED ); Screen *screen = new Screen( window, Vector2i(winWidth, winHeight), "NanoGUI test"); bool enabled = true; FormHelper *gui = new FormHelper(screen); ref<Window> rwindow = gui->addWindow(Eigen::Vector2i(10, 10), "Form helper example"); gui->addGroup("Basic types"); gui->addVariable("bool", bvar); gui->addVariable("string", strval); gui->addGroup("Validating fields"); gui->addVariable("int", ivar); gui->addVariable("float", fvar); gui->addVariable("double", dvar); gui->addGroup("Complex types"); gui->addVariable("Enumeration", enumval, enabled) ->setItems({"Item 1", "Item 2", "Item 3"}); gui->addVariable("Color", colval); gui->addGroup("Other widgets"); gui->addButton("A button", [](){ std::cout << "Button pressed." << std::endl; }); screen->setVisible(true); screen->performLayout(); rwindow->center(); bool quit = false; try { //nanogui::init(); //Event handler SDL_Event e; //nanogui::ref<ExampleApplication> app = new ExampleApplication(); while( !quit ) { //Handle events on queue while( SDL_PollEvent( &e ) != 0 ) { //User requests quit if( e.type == SDL_QUIT ) { quit = true; } screen->onEvent( e ); } SDL_SetRenderDrawColor(renderer, 0xd3, 0xd3, 0xd3, 0xff ); SDL_RenderClear( renderer ); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); screen->drawAll(); // SDL_SetRenderDrawColor(renderer, 0xff, 0, 0, 0xff ); // SDL_Rect r{ 0, 0, 20, 30 }; // SDL_RenderFillRect( renderer, &r ); //Update screen SDL_GL_SwapWindow(window); } //nanogui::shutdown(); } catch (const std::runtime_error &e) { std::string error_msg = std::string("Caught a fatal error: ") + std::string(e.what()); #if defined(_WIN32) MessageBoxA(nullptr, error_msg.c_str(), NULL, MB_ICONERROR | MB_OK); #else std::cerr << error_msg << endl; #endif return -1; } return 0; }