Merge pull request #1 from averne/master

Simple configuration parsing for size scaling
This commit is contained in:
WerWolv 2020-11-15 16:06:33 +01:00 committed by GitHub
commit 983c1b4a90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 62 additions and 3 deletions

2
.gitignore vendored
View File

@ -4,5 +4,7 @@ cmake-build-debug/
cmake-build-release/ cmake-build-release/
build-linux/ build-linux/
build/
*.mgc *.mgc
imgui.ini

View File

@ -8,7 +8,11 @@ pkg_search_module(GLFW REQUIRED glfw3)
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
include_directories(include ${GLFW_INCLUDE_DIRS} libs/ImGui/include libs/glad/include) include_directories(include ${GLFW_INCLUDE_DIRS} libs/ImGui/include libs/glad/include)
SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -DIMGUI_IMPL_OPENGL_LOADER_GLAD -static-libstdc++ -static-libgcc -static") SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -DIMGUI_IMPL_OPENGL_LOADER_GLAD")
if (WIN32)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++ -static-libgcc -static")
endif (WIN32)
add_executable(ImHex add_executable(ImHex
source/main.cpp source/main.cpp

View File

@ -24,6 +24,9 @@ namespace hex {
return static_cast<T*>(this->m_views.back()); return static_cast<T*>(this->m_views.back());
} }
public:
float m_globalScale = 1.0f, m_fontScale = 1.0f;
private: private:
void frameBegin(); void frameBegin();
void frameEnd(); void frameEnd();

View File

@ -3,6 +3,7 @@
#include <iostream> #include <iostream>
#include "imgui.h" #include "imgui.h"
#include "imgui_internal.h"
#include "imgui_impl_glfw.h" #include "imgui_impl_glfw.h"
#include "imgui_impl_opengl3.h" #include "imgui_impl_opengl3.h"
@ -11,6 +12,44 @@
namespace hex { namespace hex {
namespace {
void *ImHexSettingsHandler_ReadOpenFn(ImGuiContext *ctx, ImGuiSettingsHandler *, const char *) {
return ctx; // Unused, but the return value has to be non-null
}
void ImHexSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler *handler, void *, const char* line) {
auto *window = reinterpret_cast<Window *>(handler->UserData);
float scale;
if (sscanf(line, "Scale=%f", &scale) == 1) { window->m_globalScale = scale; }
else if (sscanf(line, "FontScale=%f", &scale) == 1) { window->m_fontScale = scale; }
}
void ImHexSettingsHandler_ApplyAll(ImGuiContext *ctx, ImGuiSettingsHandler *handler) {
auto *window = reinterpret_cast<Window *>(handler->UserData);
auto &style = ImGui::GetStyle();
auto &io = ImGui::GetIO();
if (window->m_globalScale != 0.0f)
style.ScaleAllSizes(window->m_globalScale);
if (window->m_fontScale != 0.0f)
io.FontGlobalScale = window->m_fontScale;
}
void ImHexSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandler *handler, ImGuiTextBuffer *buf) {
auto *window = reinterpret_cast<Window *>(handler->UserData);
buf->reserve(buf->size() + 0x20); // Ballpark reserve
buf->appendf("[%s][General]\n", handler->TypeName);
buf->appendf("Scale=%.1f\n", window->m_globalScale);
buf->appendf("FontScale=%.1f\n", window->m_fontScale);
buf->append("\n");
}
}
Window::Window() { Window::Window() {
this->initGLFW(); this->initGLFW();
this->initImGui(); this->initImGui();
@ -141,10 +180,21 @@ namespace hex {
void Window::initImGui() { void Window::initImGui() {
IMGUI_CHECKVERSION(); IMGUI_CHECKVERSION();
ImGui::CreateContext(); auto *ctx = ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO(); (void)io; ImGuiIO& io = ImGui::GetIO();
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
// Install custom settings handler
ImGuiSettingsHandler handler;
handler.TypeName = "ImHex";
handler.TypeHash = ImHashStr("ImHex");
handler.ReadOpenFn = ImHexSettingsHandler_ReadOpenFn;
handler.ReadLineFn = ImHexSettingsHandler_ReadLine;
handler.ApplyAllFn = ImHexSettingsHandler_ApplyAll;
handler.WriteAllFn = ImHexSettingsHandler_WriteAll;
handler.UserData = this;
ctx->SettingsHandlers.push_back(handler);
ImGui::StyleColorsDark(); ImGui::StyleColorsDark();
ImGui_ImplGlfw_InitForOpenGL(this->m_window, true); ImGui_ImplGlfw_InitForOpenGL(this->m_window, true);