From 25e13f4b6ffa53ec8c4d6c2292d1fb98c138de0d Mon Sep 17 00:00:00 2001 From: Lava Block <the@lava-block.com> Date: Sun, 11 Oct 2020 14:32:59 +0200 Subject: [PATCH] remove lava::file dependency in lava::frame --- CMakeLists.txt | 1 - liblava/app/app.cpp | 100 +++++++++++++++++++++++++++++++++++ liblava/app/app.hpp | 8 +++ liblava/core/types.hpp | 1 + liblava/file/file_system.hpp | 2 - liblava/frame/frame.cpp | 11 ---- liblava/frame/frame.hpp | 1 - liblava/frame/window.cpp | 90 ------------------------------- liblava/frame/window.hpp | 8 --- 9 files changed, 109 insertions(+), 113 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a32145ae..9ec52c81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -270,7 +270,6 @@ message("<<< glfw") target_link_libraries(lava.frame lava::base - lava::file glfw ${GLFW_LIBRARIES} ) diff --git a/liblava/app/app.cpp b/liblava/app/app.cpp index e81aa235..04ceb020 100644 --- a/liblava/app/app.cpp +++ b/liblava/app/app.cpp @@ -94,6 +94,15 @@ namespace lava { if (!frame::ready()) return false; + log()->debug("physfs {}", str(to_string(file_system::get_version()))); + + if (!file_system::instance().initialize(str(get_cmd_line()[0]), get_config().org, get_config().app, get_config().ext)) { + log()->error("init file system"); + return false; + } + + file_system::instance().mount_res(); + handle_config(); auto& cmd_line = get_cmd_line(); @@ -145,6 +154,8 @@ namespace lava { config_file.save(); config_file.remove(&config_callback); + + file_system::instance().terminate(); }); add_run_once([&]() { @@ -401,4 +412,93 @@ namespace lava { window.set_icon(icon.data, icon.size); } + void to_json(json& j, window::state const& w) { + j = json{ { _x_, w.x }, { _y_, w.y }, { _width_, w.width }, { _height_, w.height }, { _fullscreen_, w.fullscreen }, { _floating_, w.floating }, { _resizable_, w.resizable }, { _decorated_, w.decorated }, { _maximized_, w.maximized }, { _monitor_, w.monitor } }; + } + + void from_json(json const& j, window::state& w) { + if (j.count(_x_)) + w.x = j.at(_x_).get<int>(); + if (j.count(_y_)) + w.y = j.at(_y_).get<int>(); + if (j.count(_width_)) + w.width = j.at(_width_).get<int>(); + if (j.count(_height_)) + w.height = j.at(_height_).get<int>(); + if (j.count(_fullscreen_)) + w.fullscreen = j.at(_fullscreen_).get<bool>(); + if (j.count(_floating_)) + w.floating = j.at(_floating_).get<bool>(); + if (j.count(_resizable_)) + w.resizable = j.at(_resizable_).get<bool>(); + if (j.count(_decorated_)) + w.decorated = j.at(_decorated_).get<bool>(); + if (j.count(_maximized_)) + w.maximized = j.at(_maximized_).get<bool>(); + if (j.count(_monitor_)) + w.monitor = j.at(_monitor_).get<int>(); + } + } // namespace lava + +bool lava::window_file() { + return file_system::exists(_window_file_); +} + +lava::window::state::optional lava::load_window_state(name save_name) { + if (!window_file()) + return {}; + + window::state window_state; + if (!load_window_file(window_state, save_name)) + return {}; + + return window_state; +} + +bool lava::load_window_file(window::state& state, name save_name) { + scope_data data; + if (!load_file_data(_window_file_, data)) + return false; + + auto j = json::parse(data.ptr, data.ptr + data.size); + + if (!j.count(save_name)) + return false; + + log()->trace("load window {}", str(j.dump())); + + state = j[save_name]; + return true; +} + +void lava::save_window_file(window::ref window) { + window::state state = window.get_state(); + auto index = window.get_save_name(); + + json j; + + scope_data data; + if (load_file_data(_window_file_, data)) { + j = json::parse(data.ptr, data.ptr + data.size); + + json d; + d[index] = state; + + j.merge_patch(d); + } else { + j[index] = state; + } + + file file(str(_window_file_), true); + if (!file.opened()) { + log()->error("save window {}", str(j.dump())); + return; + } + + auto jString = j.dump(4); + + file.write(jString.data(), jString.size()); + + log()->trace("save window {}", str(j.dump())); +} diff --git a/liblava/app/app.hpp b/liblava/app/app.hpp index 201458d4..d47b3c55 100644 --- a/liblava/app/app.hpp +++ b/liblava/app/app.hpp @@ -105,4 +105,12 @@ namespace lava { id block_command; }; + bool window_file(); + + window::state::optional load_window_state(name save_name = _default_); + + bool load_window_file(window::state& state, name save_name); + + void save_window_file(window::ref window); + } // namespace lava diff --git a/liblava/core/types.hpp b/liblava/core/types.hpp index 1a82ea56..e5e3e174 100644 --- a/liblava/core/types.hpp +++ b/liblava/core/types.hpp @@ -87,6 +87,7 @@ namespace lava { constexpr name _lava_ = "lava"; constexpr name _liblava_ = "liblava"; + constexpr name _zip_ = "zip"; inline name str(string_ref value) { return value.c_str(); diff --git a/liblava/file/file_system.hpp b/liblava/file/file_system.hpp index 5e5a8032..319b80ef 100644 --- a/liblava/file/file_system.hpp +++ b/liblava/file/file_system.hpp @@ -9,8 +9,6 @@ namespace lava { - constexpr name _zip_ = "zip"; - namespace fs = std::filesystem; struct file_system : no_copy_no_move { diff --git a/liblava/frame/frame.cpp b/liblava/frame/frame.cpp index b7b373de..d893ed17 100644 --- a/liblava/frame/frame.cpp +++ b/liblava/frame/frame.cpp @@ -161,15 +161,6 @@ namespace lava { return false; } - log()->debug("physfs {}", str(to_string(file_system::get_version()))); - - if (!file_system::instance().initialize(str(cmd_line[0]), config.org, config.app, config.ext)) { - log()->error("init file system"); - return false; - } - - file_system::instance().mount_res(); - frame_initialized = true; log()->info("---"); @@ -192,8 +183,6 @@ namespace lava { log()->flush(); spdlog::drop_all(); - file_system::instance().terminate(); - frame_initialized = false; } diff --git a/liblava/frame/frame.hpp b/liblava/frame/frame.hpp index d8f2f64f..de04cb7f 100644 --- a/liblava/frame/frame.hpp +++ b/liblava/frame/frame.hpp @@ -7,7 +7,6 @@ #include <argh.h> #include <liblava/base/device.hpp> #include <liblava/base/instance.hpp> -#include <liblava/file.hpp> namespace lava { diff --git a/liblava/frame/window.cpp b/liblava/frame/window.cpp index dd663010..d5cfa86c 100644 --- a/liblava/frame/window.cpp +++ b/liblava/frame/window.cpp @@ -4,7 +4,6 @@ #include <liblava/base/device.hpp> #include <liblava/base/instance.hpp> -#include <liblava/file.hpp> #include <liblava/frame/window.hpp> #define GLFW_INCLUDE_NONE @@ -403,97 +402,8 @@ namespace lava { glfwSetWindowPos(handle, (mode->width - width) / 2, (mode->height - height) / 2); } - void to_json(json& j, window::state const& w) { - j = json{ { _x_, w.x }, { _y_, w.y }, { _width_, w.width }, { _height_, w.height }, { _fullscreen_, w.fullscreen }, { _floating_, w.floating }, { _resizable_, w.resizable }, { _decorated_, w.decorated }, { _maximized_, w.maximized }, { _monitor_, w.monitor } }; - } - - void from_json(json const& j, window::state& w) { - if (j.count(_x_)) - w.x = j.at(_x_).get<int>(); - if (j.count(_y_)) - w.y = j.at(_y_).get<int>(); - if (j.count(_width_)) - w.width = j.at(_width_).get<int>(); - if (j.count(_height_)) - w.height = j.at(_height_).get<int>(); - if (j.count(_fullscreen_)) - w.fullscreen = j.at(_fullscreen_).get<bool>(); - if (j.count(_floating_)) - w.floating = j.at(_floating_).get<bool>(); - if (j.count(_resizable_)) - w.resizable = j.at(_resizable_).get<bool>(); - if (j.count(_decorated_)) - w.decorated = j.at(_decorated_).get<bool>(); - if (j.count(_maximized_)) - w.maximized = j.at(_maximized_).get<bool>(); - if (j.count(_monitor_)) - w.monitor = j.at(_monitor_).get<int>(); - } - } // namespace lava -bool lava::window_file() { - return file_system::exists(_window_file_); -} - -lava::window::state::optional lava::load_window_state(name save_name) { - if (!window_file()) - return {}; - - window::state window_state; - if (!load_window_file(window_state, save_name)) - return {}; - - return window_state; -} - -bool lava::load_window_file(window::state& state, name save_name) { - scope_data data; - if (!load_file_data(_window_file_, data)) - return false; - - auto j = json::parse(data.ptr, data.ptr + data.size); - - if (!j.count(save_name)) - return false; - - log()->trace("load window {}", str(j.dump())); - - state = j[save_name]; - return true; -} - -void lava::save_window_file(window::ref window) { - window::state state = window.get_state(); - auto index = window.get_save_name(); - - json j; - - scope_data data; - if (load_file_data(_window_file_, data)) { - j = json::parse(data.ptr, data.ptr + data.size); - - json d; - d[index] = state; - - j.merge_patch(d); - } else { - j[index] = state; - } - - file file(str(_window_file_), true); - if (!file.opened()) { - log()->error("save window {}", str(j.dump())); - return; - } - - auto jString = j.dump(4); - - file.write(jString.data(), jString.size()); - - log()->trace("save window {}", str(j.dump())); -} - VkSurfaceKHR lava::create_surface(GLFWwindow* window) { VkSurfaceKHR surface = 0; if (failed(glfwCreateWindowSurface(instance::get(), window, memory::alloc(), &surface))) diff --git a/liblava/frame/window.hpp b/liblava/frame/window.hpp index 3d9cf680..2cb703a2 100644 --- a/liblava/frame/window.hpp +++ b/liblava/frame/window.hpp @@ -205,14 +205,6 @@ namespace lava { ui32 height = 0; }; - bool window_file(); - - window::state::optional load_window_state(name save_name = _default_); - - bool load_window_file(window::state& state, name save_name); - - void save_window_file(window::ref window); - VkSurfaceKHR create_surface(GLFWwindow* window); } // namespace lava -- GitLab