From fb3441f5d3d4872dcec6653e8896c0400942cbf0 Mon Sep 17 00:00:00 2001 From: oxmox Date: Mon, 20 Feb 2023 22:50:17 +0100 Subject: [PATCH] toggle fullscreen, toggle ui, invert mouse panning --- src/doompanning.cc | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/doompanning.cc b/src/doompanning.cc index 3711c68..dbe575d 100644 --- a/src/doompanning.cc +++ b/src/doompanning.cc @@ -1,4 +1,5 @@ #include + #include #include #include @@ -46,7 +47,7 @@ struct DoomState // So easy to get this wrong and destroy the texture by accident. Cleanup is // now done in check_on_dooms() before erasing the state. Enabling this code // still works though. -#if 1 +#if 0 DoomState() = default; ~DoomState() { @@ -93,6 +94,8 @@ struct ControllerContext s32 offsetX = 0; s32 offsetY = 0; bool isMousePanning = false; + bool isFullscreen = false; + bool uiVisible = true; }; struct ControllerActions @@ -579,7 +582,7 @@ ControllerActions run_ui(ControllerContext &ctx) // Window contents ControllerActions result = {}; - static int doomsToSpawn = 1; + static int doomsToSpawn = 4; ImGui::PushItemWidth(ImGui::GetFontSize() * -16); // affects stuff like slider widths @@ -641,6 +644,7 @@ int doom_controller_loop(ControllerContext &ctx) if (io.KeyCtrl && ImGui::IsKeyDown(ImGuiKey_Q)) ctx.quit = true; + // keyboard zoom with - and =, reset with 0 if (ImGui::IsKeyDown(ImGuiKey_Equal)) ctx.scaleFactor += ScaleStep; if (ImGui::IsKeyDown(ImGuiKey_Minus)) @@ -648,6 +652,7 @@ int doom_controller_loop(ControllerContext &ctx) if (ImGui::IsKeyDown(ImGuiKey_0)) ctx.scaleFactor = 1.0; + // hjkl scrolling and reset with g if (ImGui::IsKeyDown(ImGuiKey_H)) ctx.offsetX -= PanStep; if (ImGui::IsKeyDown(ImGuiKey_J)) @@ -656,9 +661,19 @@ int doom_controller_loop(ControllerContext &ctx) ctx.offsetY -= PanStep; if (ImGui::IsKeyDown(ImGuiKey_L)) ctx.offsetX += PanStep; - if (ImGui::IsKeyDown(ImGuiKey_G)) ctx.offsetX = ctx.offsetY = 0; + + // fullscreen toggle + if (io.KeyAlt && ImGui::IsKeyPressed(ImGuiKey_Enter, false)) + { + u32 flag = (ctx.isFullscreen ? 0 : SDL_WINDOW_FULLSCREEN_DESKTOP); + SDL_SetWindowFullscreen(ctx.window, flag); + ctx.isFullscreen = !ctx.isFullscreen; + } + + if (ImGui::IsKeyPressed(ImGuiKey_F10, false)) + ctx.uiVisible = !ctx.uiVisible; } static ImVec2 panStartPos; @@ -682,8 +697,8 @@ int doom_controller_loop(ControllerContext &ctx) auto curPos = io.MousePos; auto dx = curPos.x - panStartPos.x; auto dy = curPos.y - panStartPos.y; - ctx.offsetX += dx; - ctx.offsetY += dy; + ctx.offsetX -= dx; + ctx.offsetY -= dy; panStartPos = curPos; } @@ -698,7 +713,9 @@ int doom_controller_loop(ControllerContext &ctx) ImGui_ImplSDL2_NewFrame(); ImGui::NewFrame(); - actions = run_ui(ctx); + actions = {}; + if (ctx.uiVisible) + actions = run_ui(ctx); // Rendering const auto [r, g, b, a] = imvec4_to_rgba(clear_color); @@ -744,7 +761,7 @@ int main(int argc, char *argv[]) #endif const auto windowFlags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_OPENGL; - auto window = SDL_CreateWindow("doompanning", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, windowFlags); + auto window = SDL_CreateWindow("doompanning", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 960, windowFlags); if (!window) dp_sdl_fatal("SDL_CreateWindow");