diff --git a/src/doompanning.cc b/src/doompanning.cc index 604355a..64520f4 100644 --- a/src/doompanning.cc +++ b/src/doompanning.cc @@ -1,6 +1,7 @@ #include #include +#include #include #include #include @@ -23,6 +24,7 @@ #include "dp_util.hpp" #if DoomBytesPerPixel == 3 +// FIXME: don't use, it's buggy static const u32 DoomSdlTexturePixelFormat = SDL_PIXELFORMAT_RGB888; #elif DoomBytesPerPixel == 4 static const u32 DoomSdlTexturePixelFormat = SDL_PIXELFORMAT_ARGB8888; @@ -30,7 +32,6 @@ static const u32 DoomSdlTexturePixelFormat = SDL_PIXELFORMAT_ARGB8888; #error Unhandled DoomBytesPerPixel value. Which SDL_PIXELFORMAT to use? #endif - void dp_sdl_fatal(const char *const msg) { log_fatal("%s: %s", msg, SDL_GetError()); @@ -206,14 +207,14 @@ void check_on_dooms(ControllerContext &ctx) } } - // FIXME: We can miss Endoom state updates when nng has to drop message due + // FIXME: We can miss Endoom state updates when nng has to drop messages due // to queue size limits. If this happens for an externally started doom it // will never be removed from ctx.dooms (waitpid() does not work because the // doom is not our child). Use DoomState::tLastActive and a fixed timeout // value to timeout dooms and erase them from ctx.dooms. } -#define DP_DO_DEBUG_DRAWING +//#define DP_DO_DEBUG_DRAWING #ifdef DP_DO_DEBUG_DRAWING #include "debug_draw.cc" #endif @@ -437,12 +438,17 @@ ControllerActions run_ui(ControllerContext &ctx) #endif static bool show_app_metrics = false; static bool show_app_debug_log = false; + static bool show_app_about = false; + static bool show_log_window = true; + static bool show_userguide = false; if (show_app_metrics) ImGui::ShowMetricsWindow(&show_app_metrics); if (show_app_debug_log) ImGui::ShowDebugLogWindow(&show_app_debug_log); + if (show_app_about) + ImGui::ShowAboutWindow(&show_app_about); const ImGuiViewport* main_viewport = ImGui::GetMainViewport(); @@ -453,6 +459,17 @@ ControllerActions run_ui(ControllerContext &ctx) ctx.appLog.Draw("log"); } + if (show_userguide) + { + ImGui::SetNextWindowPos(ImVec2(main_viewport->WorkPos.x + 666, main_viewport->WorkPos.y + 420), ImGuiCond_FirstUseEver); + ImGui::SetNextWindowSize(ImVec2(500, 360), ImGuiCond_FirstUseEver); + if (ImGui::Begin("Dear ImGui User Guide", &show_userguide)) + { + ImGui::ShowUserGuide(); + ImGui::End(); + } + } + ImGui::SetNextWindowPos(ImVec2(main_viewport->WorkPos.x + 20, main_viewport->WorkPos.y + 20), ImGuiCond_FirstUseEver); ImGui::SetNextWindowSize(ImVec2(420, 340), ImGuiCond_FirstUseEver); ImGuiWindowFlags window_flags = ImGuiWindowFlags_MenuBar; @@ -476,18 +493,25 @@ ControllerActions run_ui(ControllerContext &ctx) { if (ImGui::BeginMenu("Menu")) { - ImGui::MenuItem("Log Window", nullptr, &show_log_window); ImGui::MenuItem("Quit", "Ctrl+Q", &ctx.quit, true); ImGui::EndMenu(); } if (ImGui::BeginMenu("Tools")) { + ImGui::MenuItem("Log Window", nullptr, &show_log_window); ImGui::MenuItem("Dear ImGui Metrics/Debugger", NULL, &show_app_metrics, has_debug_tools); ImGui::MenuItem("Dear ImGui Debug Log", NULL, &show_app_debug_log, has_debug_tools); ImGui::EndMenu(); } + if (ImGui::BeginMenu("Help")) + { + ImGui::MenuItem("Dear ImGui User Guide", NULL, &show_userguide); + ImGui::MenuItem("About Dear ImGui", NULL, &show_app_about); + ImGui::EndMenu(); + } + ImGui::EndMenuBar(); } @@ -683,12 +707,15 @@ int main(int argc, char *argv[]) dp_sdl_fatal("SDL_CreateRenderer"); IMGUI_CHECKVERSION(); - ImGui::CreateContext(); + auto imgui = ImGui::CreateContext(); ImGui::GetIO().IniFilename = "doompanning_ui.ini"; ImGui::StyleColorsDark(); ImGui_ImplSDL2_InitForSDLRenderer(window, renderer); ImGui_ImplSDLRenderer_Init(renderer); + //ImGuiSettingsHandler dpSettingsHandler; + //imgui->SettingsHandlers.push_back(dpSettingsHandler); + //dp_nng_init_limits(1, 1, 1); // int ncpu_max, int pool_thread_limit_max, int resolv_thread_limit //nng_set_ncpu_max(ncpu_max); //nng_set_pool_thread_limit_max(pool_thread_limit_max);