int app::exec(bool aQuitWhenLastWindowClosed) { try { surface_manager().layout_surfaces(); surface_manager().invalidate_surfaces(); iQuitWhenLastWindowClosed = aQuitWhenLastWindowClosed; while (!iQuitResultCode.is_initialized()) process_events(*iContext); return *iQuitResultCode; } catch (std::exception& e) { halt(); std::cerr << "neogfx::app::exec: terminating with exception: " << e.what() << std::endl; iSurfaceManager->display_error_message(iName.empty() ? "Abnormal Program Termination" : "Abnormal Program Termination - " + iName, std::string("neogfx::app::exec: terminating with exception: ") + e.what()); std::exit(EXIT_FAILURE); } catch (...) { halt(); std::cerr << "neogfx::app::exec: terminating with unknown exception" << std::endl; iSurfaceManager->display_error_message(iName.empty() ? "Abnormal Program Termination" : "Abnormal Program Termination - " + iName, "neogfx::app::exec: terminating with unknown exception"); std::exit(EXIT_FAILURE); } }
void sdl_window::do_activate_default_context() const { for (std::size_t i = 0; i != surface_manager().surface_count(); ++i) if (!surface_manager().surface(i).destroyed()) { surface_manager().surface(i).native_surface().activate_context(); context_activation_stack().pop_back(); break; } }
i_style& app::change_style(const std::string& aStyleName) { style_list::iterator existingStyle = iStyles.find(aStyleName); if (existingStyle == iStyles.end()) throw style_not_found(); if (iCurrentStyle != existingStyle) { iCurrentStyle = existingStyle; current_style_changed.trigger(); surface_manager().layout_surfaces(); surface_manager().invalidate_surfaces(); } return iCurrentStyle->second; }
bool app::do_process_events() { bool lastWindowClosed = false; bool didSome = surface_manager().process_events(lastWindowClosed); if (lastWindowClosed && iQuitWhenLastWindowClosed) { if (!iQuitResultCode.is_initialized()) iQuitResultCode = 0; } return didSome; }
i_style& app::register_style(const i_style& aStyle) { if (iStyles.find(aStyle.name()) != iStyles.end()) throw style_exists(); style_list::iterator newStyle = iStyles.insert(std::make_pair(aStyle.name(), style(aStyle.name(), aStyle))).first; if (iCurrentStyle == iStyles.end()) { iCurrentStyle = newStyle; surface_manager().invalidate_surfaces(); } return newStyle->second; }