1
0
mirror of synced 2024-11-28 01:20:51 +01:00

feat: Added setting to remember and restore window position and size

Closes #1215
#944
This commit is contained in:
WerWolv 2023-07-31 11:17:37 +02:00
parent 4d6e6cf75a
commit 106e669512
3 changed files with 45 additions and 0 deletions

View File

@ -741,6 +741,8 @@ namespace hex {
} }
void Window::initGLFW() { void Window::initGLFW() {
bool restoreWindowPos = ContentRegistry::Settings::read("hex.builtin.setting.interface", "hex.builtin.setting.interface.restore_window_pos", false);
glfwSetErrorCallback([](int error, const char *desc) { glfwSetErrorCallback([](int error, const char *desc) {
if (error == GLFW_PLATFORM_ERROR) { if (error == GLFW_PLATFORM_ERROR) {
// Ignore error spam caused by Wayland not supporting moving or resizing // Ignore error spam caused by Wayland not supporting moving or resizing
@ -777,6 +779,11 @@ namespace hex {
glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE);
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
if (restoreWindowPos) {
int maximized = ContentRegistry::Settings::read("hex.builtin.setting.interface", "hex.builtin.setting.interface.window.maximized", GLFW_FALSE);
glfwWindowHint(GLFW_MAXIMIZED, maximized);
}
// Create window // Create window
this->m_windowTitle = "ImHex"; this->m_windowTitle = "ImHex";
this->m_window = glfwCreateWindow(1280_scaled, 720_scaled, this->m_windowTitle.c_str(), nullptr, nullptr); this->m_window = glfwCreateWindow(1280_scaled, 720_scaled, this->m_windowTitle.c_str(), nullptr, nullptr);
@ -811,7 +818,13 @@ namespace hex {
int x = 0, y = 0; int x = 0, y = 0;
glfwGetWindowPos(this->m_window, &x, &y); glfwGetWindowPos(this->m_window, &x, &y);
if (restoreWindowPos) {
x = ContentRegistry::Settings::read("hex.builtin.setting.interface", "hex.builtin.setting.interface.window.x", x);
y = ContentRegistry::Settings::read("hex.builtin.setting.interface", "hex.builtin.setting.interface.window.y", y);
}
ImHexApi::System::impl::setMainWindowPosition(x, y); ImHexApi::System::impl::setMainWindowPosition(x, y);
glfwSetWindowPos(this->m_window, x, y);
} }
// Set up initial window size // Set up initial window size
@ -819,7 +832,14 @@ namespace hex {
int width = 0, height = 0; int width = 0, height = 0;
glfwGetWindowSize(this->m_window, &width, &height); glfwGetWindowSize(this->m_window, &width, &height);
glfwSetWindowSize(this->m_window, width, height); glfwSetWindowSize(this->m_window, width, height);
if (restoreWindowPos) {
width = ContentRegistry::Settings::read("hex.builtin.setting.interface", "hex.builtin.setting.interface.window.width", width);
height = ContentRegistry::Settings::read("hex.builtin.setting.interface", "hex.builtin.setting.interface.window.height", height);
}
ImHexApi::System::impl::setMainWindowSize(width, height); ImHexApi::System::impl::setMainWindowSize(width, height);
glfwSetWindowSize(this->m_window, width, height);
} }
// Register window move callback // Register window move callback
@ -1055,6 +1075,19 @@ namespace hex {
} }
void Window::exitGLFW() { void Window::exitGLFW() {
{
int x = 0, y = 0, width = 0, height = 0, maximized = 0;
glfwGetWindowPos(this->m_window, &x, &y);
glfwGetWindowSize(this->m_window, &width, &height);
maximized = glfwGetWindowAttrib(this->m_window, GLFW_MAXIMIZED);
ContentRegistry::Settings::write("hex.builtin.setting.interface", "hex.builtin.setting.interface.window.", x);
ContentRegistry::Settings::write("hex.builtin.setting.interface", "hex.builtin.setting.interface.window.y", y);
ContentRegistry::Settings::write("hex.builtin.setting.interface", "hex.builtin.setting.interface.window.width", width);
ContentRegistry::Settings::write("hex.builtin.setting.interface", "hex.builtin.setting.interface.window.height", height);
ContentRegistry::Settings::write("hex.builtin.setting.interface", "hex.builtin.setting.interface.window.maximized", maximized);
}
glfwDestroyWindow(this->m_window); glfwDestroyWindow(this->m_window);
glfwTerminate(); glfwTerminate();

View File

@ -486,6 +486,7 @@
"hex.builtin.setting.interface.scaling.x1_5": "x1.5", "hex.builtin.setting.interface.scaling.x1_5": "x1.5",
"hex.builtin.setting.interface.scaling.x2_0": "x2.0", "hex.builtin.setting.interface.scaling.x2_0": "x2.0",
"hex.builtin.setting.interface.wiki_explain_language": "Wikipedia Language", "hex.builtin.setting.interface.wiki_explain_language": "Wikipedia Language",
"hex.builtin.setting.interface.restore_window_pos": "Restore window position",
"hex.builtin.setting.proxy": "Proxy", "hex.builtin.setting.proxy": "Proxy",
"hex.builtin.setting.proxy.description": "Proxy will take effect on store, wikipedia or any other plugin immediately.", "hex.builtin.setting.proxy.description": "Proxy will take effect on store, wikipedia or any other plugin immediately.",
"hex.builtin.setting.proxy.enable": "Enable Proxy", "hex.builtin.setting.proxy.enable": "Enable Proxy",

View File

@ -313,6 +313,17 @@ namespace hex::plugin::builtin {
return false; return false;
}); });
ContentRegistry::Settings::add("hex.builtin.setting.interface", "hex.builtin.setting.interface.restore_window_pos", 0, [](auto name, nlohmann::json &setting) {
static bool restoreWindowPos = static_cast<int>(setting);
if (ImGui::Checkbox(name.data(), &restoreWindowPos)) {
setting = static_cast<int>(restoreWindowPos);
return true;
}
return false;
});
/* Fonts */ /* Fonts */