From da8be3ec3c034c19380c3774307d8eb73b1b3f8f Mon Sep 17 00:00:00 2001 From: WerWolv Date: Fri, 25 Jul 2025 14:44:24 +0200 Subject: [PATCH] fix: Scrolling and ID collision in simplified pattern value editor --- .../content/views/view_pattern_data.cpp | 63 ++++++++++--------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/plugins/builtin/source/content/views/view_pattern_data.cpp b/plugins/builtin/source/content/views/view_pattern_data.cpp index 1d7097c2c..30f57cf1c 100644 --- a/plugins/builtin/source/content/views/view_pattern_data.cpp +++ b/plugins/builtin/source/content/views/view_pattern_data.cpp @@ -166,41 +166,48 @@ namespace hex::plugin::builtin { ImGui::TabItemSpacing("##spacing", 0, ImGui::GetContentRegionAvail().x - ImGui::TabItemCalcSize(TabName, false).x); if (ImGui::BeginTabItem(TabName, nullptr, ImGuiTabItemFlags_Trailing)) { - for (const auto &pattern : patterns) { - try { - const auto attribute = pattern->getAttributeArguments(SimplifiedEditorAttribute); + if (ImGui::BeginChild("##editor")) { + for (const auto &pattern : patterns) { + ImGui::PushID(pattern); + try { + const auto attribute = pattern->getAttributeArguments(SimplifiedEditorAttribute); - const auto name = attribute.size() >= 1 ? attribute[0].toString() : pattern->getDisplayName(); - const auto description = attribute.size() >= 2 ? attribute[1].toString() : pattern->getComment(); + const auto name = attribute.size() >= 1 ? attribute[0].toString() : pattern->getDisplayName(); + const auto description = attribute.size() >= 2 ? attribute[1].toString() : pattern->getComment(); - const auto widgetPos = 200_scaled; - ImGui::TextUnformatted(name.c_str()); - ImGui::SameLine(0, 20_scaled); - if (ImGui::GetCursorPosX() < widgetPos) - ImGui::SetCursorPosX(widgetPos); + const auto widgetPos = 200_scaled; + ImGui::TextUnformatted(name.c_str()); + ImGui::SameLine(0, 20_scaled); + if (ImGui::GetCursorPosX() < widgetPos) + ImGui::SetCursorPosX(widgetPos); - ImGui::PushStyleVarY(ImGuiStyleVar_FramePadding, 0); - ImGui::PushItemWidth(-50_scaled); - pattern->accept(m_patternValueEditor); - ImGui::PopItemWidth(); - ImGui::PopStyleVar(); + ImGui::PushStyleVarY(ImGuiStyleVar_FramePadding, 0); + ImGui::PushItemWidth(-50_scaled); + pattern->accept(m_patternValueEditor); + ImGui::PopItemWidth(); + ImGui::PopStyleVar(); - if (!description.empty()) { - ImGui::PushFont(nullptr, ImGui::GetFontSize() * 0.8F); - ImGui::BeginDisabled(); - ImGui::Indent(); - ImGui::TextWrapped("%s", description.c_str()); - ImGui::Unindent(); - ImGui::EndDisabled(); - ImGui::PopFont(); + if (!description.empty()) { + ImGui::PushFont(nullptr, ImGui::GetFontSize() * 0.8F); + ImGui::BeginDisabled(); + ImGui::Indent(); + ImGui::TextWrapped("%s", description.c_str()); + ImGui::Unindent(); + ImGui::EndDisabled(); + ImGui::PopFont(); + } + + ImGui::Separator(); + + } catch (const std::exception &e) { + ImGui::TextUnformatted(pattern->getDisplayName().c_str()); + ImGui::TextUnformatted(e.what()); } - ImGui::Separator(); - - } catch (const std::exception &e) { - ImGui::TextUnformatted(pattern->getDisplayName().c_str()); - ImGui::TextUnformatted(e.what()); + ImGui::PopID(); } + + ImGui::EndChild(); } ImGui::EndTabItem();