From 0d70098dd5b704f2953c63f0c827b46b11935b81 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Thu, 8 Jan 2026 17:40:15 +0100 Subject: setup window --- src/main_linux.cpp | 69 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 55 insertions(+), 14 deletions(-) (limited to 'src/main_linux.cpp') diff --git a/src/main_linux.cpp b/src/main_linux.cpp index 1d05aff..e605659 100644 --- a/src/main_linux.cpp +++ b/src/main_linux.cpp @@ -33,27 +33,47 @@ #pragma comment(lib, "legacy_stdio_definitions") #endif +static GLFWwindow* window = 0; +static bool redo_window = 0; + +void ui::recreate_window_for_main_views() +{ + redo_window = 1; +} + static void glfw_error_callback(int error, const char* description) { fprintf(stderr, "GLFW Error %d: %s\n", error, description); } -// Main code -int main(int argc, char** argv) +static void _create_window(bool is_setup_window) { - glfwSetErrorCallback(glfw_error_callback); - if (!glfwInit()) - return 1; + if (window) { + ImGui_ImplOpenGL2_Shutdown(); + ImGui_ImplGlfw_Shutdown(); + ImGui::DestroyContext(); + glfwDestroyWindow(window); + } - // Create window with graphics context float main_scale = ImGui_ImplGlfw_GetContentScaleForMonitor(glfwGetPrimaryMonitor()); // Valid on GLFW 3.3+ only - GLFWwindow* window = glfwCreateWindow((int)(1280 * main_scale), (int)(800 * main_scale), "OpenBooks", nullptr, nullptr); + int windowWidth = (int)(1280 * main_scale); + int windowHeight = (int)(800 * main_scale); + + if (is_setup_window) { + glfwWindowHint(GLFW_RESIZABLE, false); + windowWidth = (int)(800 * main_scale); + windowHeight = (int)(500 * main_scale); + } + else { + glfwWindowHint(GLFW_RESIZABLE, true); + } + + window = glfwCreateWindow(windowWidth, windowHeight, "OpenBooks", nullptr, nullptr); if (window == nullptr) - return 1; + return; glfwMakeContextCurrent(window); glfwSwapInterval(1); // Enable vsync - // Setup Dear ImGui context IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGuiIO& io = ImGui::GetIO(); (void)io; @@ -77,19 +97,35 @@ int main(int argc, char** argv) io.Fonts->AddFontFromFileTTF("/home/aldrik/Projects/open-books/build/Roboto-Regular.ttf"); ui::fontBold = io.Fonts->AddFontFromFileTTF("/home/aldrik/Projects/open-books/build/Roboto-Bold.ttf"); ui::fontBig = io.Fonts->AddFontFromFileTTF("/home/aldrik/Projects/open-books/build/Roboto-Bold.ttf", 30); - - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); +} - timer_lib_initialize(); - administration_writer::create(); +// Main code +int main(int argc, char** argv) +{ + glfwSetErrorCallback(glfw_error_callback); + if (!glfwInit()) + return 1; if (argc < 2) { administration::create_default(""); + _create_window(true); } else { - administration_reader::open_existing(argv[1]); + if (administration_reader::open_existing(argv[1])) { + _create_window(false); + ui::set_state(ui::main_state::UI_INVOICES); + } + else { + _create_window(true); + } } + + ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); + + timer_lib_initialize(); + administration_writer::create(); + while (!glfwWindowShouldClose(window)) { glfwPollEvents(); @@ -118,6 +154,11 @@ int main(int argc, char** argv) glfwMakeContextCurrent(window); glfwSwapBuffers(window); + + if (redo_window) { + _create_window(false); + redo_window = 0; + } } administration_writer::save_activities_blocking(); -- cgit v1.2.3-70-g09d2