Settings fix

This commit is contained in:
2025-12-16 12:35:19 -05:00
parent ed2f92d412
commit 4e1226739a
4 changed files with 60 additions and 11 deletions

View File

@@ -81,6 +81,9 @@ namespace anm2ed::imgui
constexpr auto FRAME_DRAG_PAYLOAD_ID = "Frame Drag Drop"; constexpr auto FRAME_DRAG_PAYLOAD_ID = "Frame Drag Drop";
constexpr auto FRAME_TOOLTIP_HOVER_DELAY = 0.75f; // Extra delay for frame info tooltip. constexpr auto FRAME_TOOLTIP_HOVER_DELAY = 0.75f; // Extra delay for frame info tooltip.
#define ITEM_FRAME_CHILD_HEIGHT ImGui::GetTextLineHeightWithSpacing() + (ImGui::GetStyle().WindowPadding.y * 1.5)
#define ITEM_CHILD_WIDTH ImGui::GetTextLineHeightWithSpacing() * 12.5
void Timeline::update(Manager& manager, Settings& settings, Resources& resources, Clipboard& clipboard) void Timeline::update(Manager& manager, Settings& settings, Resources& resources, Clipboard& clipboard)
{ {
auto& document = *manager.get(); auto& document = *manager.get();
@@ -573,8 +576,7 @@ namespace anm2ed::imgui
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing);
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, style.WindowPadding); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, style.WindowPadding);
auto itemSize = ImVec2(ImGui::GetContentRegionAvail().x, auto itemSize = ImVec2(ImGui::GetContentRegionAvail().x, ITEM_FRAME_CHILD_HEIGHT);
ImGui::GetTextLineHeightWithSpacing() + (ImGui::GetStyle().WindowPadding.y * 2));
if (ImGui::BeginChild(label.c_str(), itemSize, ImGuiChildFlags_Borders, ImGuiWindowFlags_NoScrollWithMouse)) if (ImGui::BeginChild(label.c_str(), itemSize, ImGuiChildFlags_Borders, ImGuiWindowFlags_NoScrollWithMouse))
{ {
@@ -818,7 +820,7 @@ namespace anm2ed::imgui
auto items_child = [&]() auto items_child = [&]()
{ {
auto itemsChildSize = ImVec2(ImGui::GetTextLineHeightWithSpacing() * 15, ImGui::GetContentRegionAvail().y); auto itemsChildSize = ImVec2(ITEM_CHILD_WIDTH, ImGui::GetContentRegionAvail().y);
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2()); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2());
bool isItemsChildOpen = ImGui::BeginChild("##Items Child", itemsChildSize, ImGuiChildFlags_Borders); bool isItemsChildOpen = ImGui::BeginChild("##Items Child", itemsChildSize, ImGuiChildFlags_Borders);
@@ -938,7 +940,7 @@ namespace anm2ed::imgui
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing);
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, style.WindowPadding); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, style.WindowPadding);
auto childSize = ImVec2(width, ImGui::GetTextLineHeightWithSpacing() + (ImGui::GetStyle().WindowPadding.y * 2)); auto childSize = ImVec2(width, ITEM_FRAME_CHILD_HEIGHT);
ImGui::PopStyleVar(2); ImGui::PopStyleVar(2);
@@ -1468,10 +1470,8 @@ namespace anm2ed::imgui
auto frames_child = [&]() auto frames_child = [&]()
{ {
auto itemsChildWidth = ImGui::GetTextLineHeightWithSpacing() * 15;
auto cursorPos = ImGui::GetCursorPos(); auto cursorPos = ImGui::GetCursorPos();
ImGui::SetCursorPos(ImVec2(cursorPos.x + itemsChildWidth, cursorPos.y)); ImGui::SetCursorPos(ImVec2(cursorPos.x + ITEM_CHILD_WIDTH, cursorPos.y));
auto framesChildSize = ImVec2(ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y); auto framesChildSize = ImVec2(ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y);

View File

@@ -212,7 +212,8 @@ namespace anm2ed
ImGui::GetStyle().FontScaleMain = settings.uiScale; ImGui::GetStyle().FontScaleMain = settings.uiScale;
io.ConfigWindowsMoveFromTitleBarOnly = true; io.ConfigWindowsMoveFromTitleBarOnly = true;
ImGui::LoadIniSettingsFromDisk(settings_path().string().c_str()); if (auto imguiData = Settings::imgui_data_load(settings_path()); !imguiData.empty())
ImGui::LoadIniSettingsFromMemory(imguiData.c_str(), imguiData.size());
if (isSocketThread) if (isSocketThread)
{ {

View File

@@ -1,5 +1,8 @@
#include "settings.h" #include "settings.h"
#include <fstream>
#include <sstream>
#include "filesystem_.h" #include "filesystem_.h"
#include "log.h" #include "log.h"
@@ -9,9 +12,7 @@ namespace filesystem = anm2ed::util::filesystem;
namespace anm2ed namespace anm2ed
{ {
constexpr auto IMGUI_DEFAULT = R"( constexpr auto IMGUI_DEFAULT = R"([Window][##DockSpace]
# Dear ImGui
[Window][##DockSpace]
Pos=0,54 Pos=0,54
Size=1918,1010 Size=1918,1010
Collapsed=0 Collapsed=0
@@ -268,6 +269,51 @@ DockSpace ID=0x123F8F08 Window=0x6D581B32 Pos=8,62 Size=1902,994 Spl
file.close(); file.close();
} }
std::string Settings::imgui_data_load(const std::filesystem::path& path)
{
auto pathUtf8 = filesystem::path_to_utf8(path);
std::ifstream file(path, std::ios::in | std::ios::binary);
if (!file.is_open())
{
logger.error(
std::format("Failed to open settings file for Dear ImGui data: {}; using Dear ImGui defaults", pathUtf8));
return {};
}
std::string line{};
std::ostringstream dataStream;
bool isImGuiSection = false;
bool isContent = false;
while (std::getline(file, line))
{
if (!isImGuiSection)
{
if (line == "# Dear ImGui") isImGuiSection = true;
continue;
}
if (isContent) dataStream << "\n";
dataStream << line;
isContent = true;
}
if (!isImGuiSection)
{
logger.warning(
std::format("Dear ImGui section missing from settings file: {}; using Dear ImGui defaults", pathUtf8));
return {};
}
if (!isContent)
{
logger.warning(std::format("Dear ImGui section empty in settings file: {}; using Dear ImGui defaults", pathUtf8));
return {};
}
return dataStream.str();
}
void Settings::save(const std::filesystem::path& path, const std::string& imguiData) void Settings::save(const std::filesystem::path& path, const std::string& imguiData)
{ {
std::ofstream file(path, std::ios::out | std::ios::binary); std::ofstream file(path, std::ios::out | std::ios::binary);

View File

@@ -1,6 +1,7 @@
#pragma once #pragma once
#include <filesystem> #include <filesystem>
#include <string>
#include <glm/glm.hpp> #include <glm/glm.hpp>
@@ -250,6 +251,7 @@ namespace anm2ed
Settings(const std::filesystem::path&); Settings(const std::filesystem::path&);
void save(const std::filesystem::path&, const std::string&); void save(const std::filesystem::path&, const std::string&);
static std::string imgui_data_load(const std::filesystem::path&);
}; };
constexpr StringType SHORTCUT_STRING_TYPES[] = { constexpr StringType SHORTCUT_STRING_TYPES[] = {