From e043a39b525ff4733a913e7b200054ba82f2747a Mon Sep 17 00:00:00 2001 From: milek7 Date: Sun, 22 Sep 2019 14:41:59 +0200 Subject: [PATCH] vehicleparams screen in separate window --- Globals.cpp | 4 ---- Globals.h | 1 - widgets/vehicleparams.cpp | 23 +++++++++++++++++------ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Globals.cpp b/Globals.cpp index 56ec7a4c..022f1765 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -924,10 +924,6 @@ global_settings::ConfigParse(cParser &Parser) { Parser.getTokens(1); Parser >> map_highlight_distance; } - else if (token == "gui.screensscale") { - Parser.getTokens(1); - Parser >> gui_screensscale; - } else if (token == "execonexit") { Parser.getTokens(1); Parser >> exec_on_exit; diff --git a/Globals.h b/Globals.h index bbd80a27..8dade0df 100644 --- a/Globals.h +++ b/Globals.h @@ -223,7 +223,6 @@ struct global_settings { bool gfx_usegles = false; float map_highlight_distance = 3000.0f; - float gui_screensscale = 0.5f; std::string exec_on_exit; diff --git a/widgets/vehicleparams.cpp b/widgets/vehicleparams.cpp index e39df5f5..86da1a9e 100644 --- a/widgets/vehicleparams.cpp +++ b/widgets/vehicleparams.cpp @@ -11,6 +11,11 @@ ui::vehicleparams_panel::vehicleparams_panel(const std::string &vehicle) } +void screen_window_callback(ImGuiSizeCallbackData *data) { + auto config = static_cast(data->UserData); + data->DesiredSize.y = data->DesiredSize.x * (float)config->size.y / (float)config->size.x; +} + void ui::vehicleparams_panel::render_contents() { TDynamicObject *vehicle_ptr = simulation::Vehicles.find(m_vehicle_name); @@ -28,16 +33,22 @@ void ui::vehicleparams_panel::render_contents() if (std::get(entry) != viewport.surface) continue; - float aspect = (float)viewport.size.y / viewport.size.x; + std::string window_name = STR("Screen") + "##" + viewport.surface; + ImGui::SetNextWindowSizeConstraints(ImVec2(200, 200), ImVec2(2500, 2500), screen_window_callback, + const_cast(&viewport)); + if (ImGui::Begin(window_name.c_str())) { + float aspect = (float)viewport.size.y / viewport.size.x; - glm::mat3 proj = glm::translate(glm::scale(glm::mat3(), 1.0f / viewport.scale), viewport.offset); + glm::mat3 proj = glm::translate(glm::scale(glm::mat3(), 1.0f / viewport.scale), viewport.offset); - glm::vec2 uv0 = glm::vec2(proj * glm::vec3(0.0f, 1.0f, 1.0f)); - glm::vec2 uv1 = glm::vec2(proj * glm::vec3(1.0f, 0.0f, 1.0f)); + glm::vec2 uv0 = glm::vec2(proj * glm::vec3(0.0f, 1.0f, 1.0f)); + glm::vec2 uv1 = glm::vec2(proj * glm::vec3(1.0f, 0.0f, 1.0f)); - glm::vec2 size = glm::vec2(500.0f, 500.0f * aspect) * Global.gui_screensscale; + ImVec2 size = ImGui::GetContentRegionAvail(); - ImGui::Image(reinterpret_cast(std::get<1>(entry)->shared_tex), ImVec2(size.x, size.y), ImVec2(uv0.x, uv0.y), ImVec2(uv1.x, uv1.y)); + ImGui::Image(reinterpret_cast(std::get<1>(entry)->shared_tex), size, ImVec2(uv0.x, uv0.y), ImVec2(uv1.x, uv1.y)); + } + ImGui::End(); } } }