fix: ID collision with multiple banners on screen

This commit is contained in:
WerWolv
2025-01-17 23:12:09 +01:00
parent a1d8cbd7ba
commit 56c4f2aa47

View File

@@ -571,36 +571,32 @@ namespace hex {
#endif
for (const auto &banner : impl::BannerBase::getOpenBanners() | std::views::take(5)) {
ImGui::PushID(banner.get());
{
auto &style = ImGui::GetStyle();
ImGui::SetNextWindowPos(ImVec2(windowPos.x + 1_scaled, startY));
ImGui::SetNextWindowSize(ImVec2(ImHexApi::System::getMainWindowSize().x - 2_scaled, height));
ImGui::PushStyleColor(ImGuiCol_WindowBg, banner->getColor().Value);
auto prevShadowOffset = style.WindowShadowOffsetDist;
auto prevShadowAngle = style.WindowShadowOffsetAngle;
style.WindowShadowOffsetDist = 12_scaled;
style.WindowShadowOffsetAngle = 0.5 * std::numbers::pi;
ON_SCOPE_EXIT {
style.WindowShadowOffsetDist = prevShadowOffset;
style.WindowShadowOffsetAngle = prevShadowAngle;
};
if (ImGui::Begin("##Banner", nullptr, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoFocusOnAppearing)) {
if (ImGui::BeginChild("##Content", ImGui::GetContentRegionAvail() - ImVec2(20_scaled, 0))) {
banner->draw();
}
ImGui::EndChild();
ImGui::SameLine();
if (ImGui::CloseButton(ImGui::GetID("BannerCloseButton"), ImGui::GetCursorScreenPos())) {
banner->close();
}
auto &style = ImGui::GetStyle();
ImGui::SetNextWindowPos(ImVec2(windowPos.x + 1_scaled, startY));
ImGui::SetNextWindowSize(ImVec2(ImHexApi::System::getMainWindowSize().x - 2_scaled, height));
ImGui::PushStyleColor(ImGuiCol_WindowBg, banner->getColor().Value);
auto prevShadowOffset = style.WindowShadowOffsetDist;
auto prevShadowAngle = style.WindowShadowOffsetAngle;
style.WindowShadowOffsetDist = 12_scaled;
style.WindowShadowOffsetAngle = 0.5 * std::numbers::pi;
ON_SCOPE_EXIT {
style.WindowShadowOffsetDist = prevShadowOffset;
style.WindowShadowOffsetAngle = prevShadowAngle;
};
if (ImGui::Begin(fmt::format("##Banner{}", static_cast<void*>(banner.get())).c_str(), nullptr, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoFocusOnAppearing)) {
if (ImGui::BeginChild("##Content", ImGui::GetContentRegionAvail() - ImVec2(20_scaled, 0))) {
banner->draw();
}
ImGui::EndChild();
ImGui::SameLine();
if (ImGui::CloseButton(ImGui::GetID("BannerCloseButton"), ImGui::GetCursorScreenPos())) {
banner->close();
}
ImGui::End();
ImGui::PopStyleColor();
}
ImGui::PopID();
ImGui::End();
ImGui::PopStyleColor();
startY += height;
}