summaryrefslogtreecommitdiff
path: root/src/main_linux.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@mailbox.org>2026-01-08 17:40:15 +0100
committerAldrik Ramaekers <aldrik@mailbox.org>2026-01-08 17:40:15 +0100
commit0d70098dd5b704f2953c63f0c827b46b11935b81 (patch)
tree05efcc8cfac52672b147c2a32a66f87a05f881e7 /src/main_linux.cpp
parent9b87e0d3123bbc533c2e4d452b16fe82de0e5cd4 (diff)
setup window
Diffstat (limited to 'src/main_linux.cpp')
-rw-r--r--src/main_linux.cpp69
1 files changed, 55 insertions, 14 deletions
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();