/* src/nanogui_helloworld.cpp -- C++ version of an helloworld example application */ #include #include #include #include #include #include #include using namespace nanogui; class HelloWorldApplication : public Screen { public: HelloWorldApplication() : Screen(Vector2i(400, 300), "NanoGUI Hello World") { inc_ref(); window = new Window(this, "Demo Window"); window->set_layout(new BoxLayout(Orientation::Vertical, Alignment::Middle, 20, 20)); resize_event(size()); new Label(window, "NanoGUI Demo", "sans-bold"); Button *b = new Button(window, "Say hello!"); b->set_callback([] { std::cout << "Well, 'ello there!" << std::endl; }); b->set_tooltip("Push me!"); perform_layout(); } virtual bool resize_event(const Vector2i &size) { window->set_fixed_size(size); window->set_size(size); window->center(); window->perform_layout(nvg_context()); return true; } virtual bool keyboard_event(int key, int scancode, int action, int modifiers) { if (Screen::keyboard_event(key, scancode, action, modifiers)) return true; if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) { set_visible(false); return true; } return false; } virtual void draw(NVGcontext *ctx) { /* Draw the user interface */ Screen::draw(ctx); } private: Window *window; }; int main(int /* argc */, char ** /* argv */) { try { nanogui::init(); /* scoped variables */ { ref app = new HelloWorldApplication(); app->dec_ref(); app->draw_all(); app->set_visible(true); nanogui::mainloop(1 / 60.f * 1000); } nanogui::shutdown(); } catch (const std::exception &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 << std::endl; #endif return -1; } catch (...) { std::cerr << "Caught an unknown error!" << std::endl; } return 0; }