#include "imgui_context.hpp" #include #include #include namespace bookmouse { ImguiContext::ImguiContext(GlContext& glContext, SdlContext& sdlContext, SdlMainWindow& mainWindow) : m_mainWindow(mainWindow) { IMGUI_CHECKVERSION(); ImGui::CreateContext(); setIOFlag(ImGuiConfigFlags_NavEnableKeyboard); setIOFlag(ImGuiConfigFlags_NavEnableGamepad); ImGui::StyleColorsDark(); // ImGui::StyleColorsLight(); auto& style = ImGui::GetStyle(); style.WindowRounding = 0.0f;// <- Set this on init or use ImGui::PushStyleVar() style.ChildRounding = 0.0f; style.FrameRounding = 0.0f; style.GrabRounding = 0.0f; style.PopupRounding = 0.0f; style.ScrollbarRounding = 0.0f; ImGui_ImplSDL2_InitForOpenGL(mainWindow.window(), glContext.context()); ImGui_ImplOpenGL3_Init(sdlContext.glslVersion()); } ImguiContext::~ImguiContext() { ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplSDL2_Shutdown(); ImGui::DestroyContext(); } void ImguiContext::setIOFlag(ImGuiConfigFlags_ flag) const { ImGui::GetIO().ConfigFlags |= flag; } const ImGuiIO& ImguiContext::getIO() const { return ImGui::GetIO(); } ImGuiIO& ImguiContext::getIO() { return ImGui::GetIO(); } bool ImguiContext::processEvent(SDL_Event& event) const { return ImGui_ImplSDL2_ProcessEvent(&event); } void ImguiContext::startFrame() const { ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplSDL2_NewFrame(); ImGui::NewFrame(); } void ImguiContext::render() const { ImGui::Render(); const auto& imguiIO = getIO(); const auto width = static_cast(imguiIO.DisplaySize.x); const auto height = static_cast(imguiIO.DisplaySize.y); glViewport(0, 0, width, height); constexpr ImVec4 clearColor{0.45f, 0.55f, 0.60f, 1.00f}; glClearColor(clearColor.x * clearColor.w, clearColor.y * clearColor.w, clearColor.z * clearColor.w, clearColor.w); glClear(GL_COLOR_BUFFER_BIT); ImGui::Render(); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); SDL_GL_SwapWindow(m_mainWindow.window()); } } // namespace bookmouse