From 61accd95699a6517d9d50e0cc83bd0bb7e62e7b6 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Sat, 23 Dec 2023 23:04:40 +0100 Subject: [PATCH] fix: Hex editor displaying invalid bytes when no data is available --- plugins/ui/source/ui/hex_editor.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/plugins/ui/source/ui/hex_editor.cpp b/plugins/ui/source/ui/hex_editor.cpp index c502b3fdd..e629dec0e 100644 --- a/plugins/ui/source/ui/hex_editor.cpp +++ b/plugins/ui/source/ui/hex_editor.cpp @@ -319,14 +319,17 @@ namespace hex::ui { const auto scrollbarWidth = ImGui::GetStyle().ScrollbarSize; const ImRect bb = ImRect(ImMax(outerRect.Min.x, outerRect.Max.x - borderSize - scrollbarWidth), innerRect.Min.y, outerRect.Max.x, innerRect.Max.y); const ImDrawFlags roundingCorners = ImDrawFlags_RoundCornersTopRight | ImDrawFlags_RoundCornersBottomRight; - ImGui::ScrollbarEx( - bb, - ImGui::GetWindowScrollbarID(window, axis), - axis, - &m_scrollPosition, - (std::ceil(innerRect.Max.y - innerRect.Min.y) / CharacterSize.y) - (m_visibleRowCount - 1), - std::nextafterf(numRows, std::numeric_limits::max()), - roundingCorners); + + if (numRows > 0) { + ImGui::ScrollbarEx( + bb, + ImGui::GetWindowScrollbarID(window, axis), + axis, + &m_scrollPosition, + (std::ceil(innerRect.Max.y - innerRect.Min.y) / CharacterSize.y) - (m_visibleRowCount - 1), + std::nextafterf(numRows, std::numeric_limits::max()), + roundingCorners); + } if (ImGui::IsWindowHovered()) { m_scrollPosition += ImS64(ImGui::GetIO().MouseWheel * -5); @@ -395,16 +398,18 @@ namespace hex::ui { }; ImS64 numRows = (m_provider->getSize() / m_bytesPerRow) + ((m_provider->getSize() % m_bytesPerRow) == 0 ? 0 : 1); + if (numRows == 0) { ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGuiExt::TextFormatted(" "); } + m_visibleRowCount = ImGui::GetWindowSize().y / CharacterSize.y; // Loop over rows - for (ImS64 y = m_scrollPosition; y < (m_scrollPosition + m_visibleRowCount + 5) && y < numRows; y++) { + for (ImS64 y = m_scrollPosition; y < (m_scrollPosition + m_visibleRowCount + 5) && y < numRows && numRows != 0; y++) { // Draw address column ImGui::TableNextRow(); ImGui::TableNextColumn();