mirror of
https://github.com/obsqrbtz/clrsync.git
synced 2026-04-09 12:37:41 +03:00
150 lines
4.0 KiB
C++
150 lines
4.0 KiB
C++
#include <string>
|
|
|
|
#include "GLFW/glfw3.h"
|
|
#include "gui/settings_window.hpp"
|
|
#include "imgui_impl_glfw.h"
|
|
#include "imgui_impl_opengl3.h"
|
|
|
|
#include "imgui_helpers.hpp"
|
|
|
|
#include "imgui_internal.h"
|
|
|
|
GLFWwindow * init_glfw()
|
|
{
|
|
if (!glfwInit()) return nullptr;
|
|
|
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
|
|
glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE);
|
|
|
|
GLFWwindow* w = glfwCreateWindow(1280, 720, "clrsync", nullptr, nullptr);
|
|
if (!w) return nullptr;
|
|
|
|
glfwMakeContextCurrent(w);
|
|
glfwSwapInterval(1);
|
|
return w;
|
|
}
|
|
|
|
void init_imgui(GLFWwindow* window, const std::string& ini_path)
|
|
{
|
|
IMGUI_CHECKVERSION();
|
|
ImGui::CreateContext();
|
|
|
|
ImGuiIO& io = ImGui::GetIO();
|
|
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
|
|
io.IniFilename = ini_path.c_str();
|
|
|
|
ImGui::StyleColorsDark();
|
|
ImGui_ImplGlfw_InitForOpenGL(window, true);
|
|
ImGui_ImplOpenGL3_Init("#version 130");
|
|
}
|
|
|
|
void begin_frame()
|
|
{
|
|
ImGui_ImplOpenGL3_NewFrame();
|
|
ImGui_ImplGlfw_NewFrame();
|
|
ImGui::NewFrame();
|
|
}
|
|
|
|
void render_menu_bar(about_window* about, settings_window* settings)
|
|
{
|
|
if (ImGui::BeginMainMenuBar())
|
|
{
|
|
if (ImGui::BeginMenu("File"))
|
|
{
|
|
if (ImGui::MenuItem("Settings"))
|
|
{
|
|
if (settings)
|
|
settings->show();
|
|
}
|
|
ImGui::Separator();
|
|
if (ImGui::MenuItem("Exit"))
|
|
{
|
|
// Will be handled by checking window should close
|
|
glfwSetWindowShouldClose(glfwGetCurrentContext(), GLFW_TRUE);
|
|
}
|
|
ImGui::EndMenu();
|
|
}
|
|
|
|
if (ImGui::BeginMenu("Help"))
|
|
{
|
|
if (ImGui::MenuItem("About"))
|
|
{
|
|
if (about)
|
|
about->show();
|
|
}
|
|
ImGui::EndMenu();
|
|
}
|
|
ImGui::EndMainMenuBar();
|
|
}
|
|
}
|
|
|
|
void setup_main_dockspace(bool& first_time)
|
|
{
|
|
const ImGuiViewport* viewport = ImGui::GetMainViewport();
|
|
ImGui::SetNextWindowPos(viewport->Pos);
|
|
ImGui::SetNextWindowSize(viewport->Size);
|
|
ImGui::SetNextWindowViewport(viewport->ID);
|
|
|
|
constexpr ImGuiWindowFlags flags =
|
|
// ImGuiWindowFlags_NoTitleBar |
|
|
ImGuiWindowFlags_NoCollapse |
|
|
ImGuiWindowFlags_NoResize |
|
|
ImGuiWindowFlags_NoMove |
|
|
ImGuiWindowFlags_NoBringToFrontOnFocus |
|
|
ImGuiWindowFlags_NoNavFocus;
|
|
|
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 1.0f);
|
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 1.0f);
|
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0,0));
|
|
ImGui::Begin("MainDockSpace", nullptr, flags);
|
|
ImGui::PopStyleVar(3);
|
|
|
|
ImGuiID dockspace_id = ImGui::GetID("MainDockSpace");
|
|
|
|
if (first_time)
|
|
{
|
|
first_time = false;
|
|
|
|
ImGui::DockBuilderRemoveNode(dockspace_id);
|
|
ImGui::DockBuilderAddNode(dockspace_id, ImGuiDockNodeFlags_DockSpace);
|
|
ImGui::DockBuilderSetNodeSize(dockspace_id, viewport->Size);
|
|
|
|
ImGuiID left, right;
|
|
ImGui::DockBuilderSplitNode(dockspace_id, ImGuiDir_Left, 0.45f, &left, &right);
|
|
|
|
ImGuiID right_top, right_bottom;
|
|
ImGui::DockBuilderSplitNode(right, ImGuiDir_Up, 0.6f, &right_top, &right_bottom);
|
|
|
|
ImGui::DockBuilderDockWindow("Templates", left);
|
|
ImGui::DockBuilderDockWindow("Color Schemes", right_top);
|
|
ImGui::DockBuilderDockWindow("Color Preview", right_bottom);
|
|
|
|
ImGui::DockBuilderFinish(dockspace_id);
|
|
}
|
|
|
|
ImGui::DockSpace(dockspace_id, ImVec2{0,0});
|
|
ImGui::End();
|
|
}
|
|
|
|
void end_frame(GLFWwindow* window)
|
|
{
|
|
ImGui::Render();
|
|
int w, h;
|
|
glfwGetFramebufferSize(window, &w, &h);
|
|
glViewport(0, 0, w, h);
|
|
glClearColor(0.1f, 0.1f, 0.1f, 0.f);
|
|
glClear(GL_COLOR_BUFFER_BIT);
|
|
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
|
|
|
|
glfwSwapBuffers(window);
|
|
}
|
|
|
|
void shutdown(GLFWwindow* window)
|
|
{
|
|
ImGui_ImplOpenGL3_Shutdown();
|
|
ImGui_ImplGlfw_Shutdown();
|
|
ImGui::DestroyContext();
|
|
glfwDestroyWindow(window);
|
|
glfwTerminate();
|
|
} |