ui: Fixed advanced decoding cell sizes
This commit is contained in:
parent
831dac9b47
commit
5ee3b550bc
@ -38,8 +38,6 @@ namespace hex {
|
|||||||
{
|
{
|
||||||
auto delimiterPos = line.find('=');
|
auto delimiterPos = line.find('=');
|
||||||
|
|
||||||
if (delimiterPos == std::string::npos)
|
|
||||||
continue;
|
|
||||||
if (delimiterPos >= line.length())
|
if (delimiterPos >= line.length())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -47,12 +45,16 @@ namespace hex {
|
|||||||
to = line.substr(delimiterPos + 1);
|
to = line.substr(delimiterPos + 1);
|
||||||
|
|
||||||
if (from.empty()) continue;
|
if (from.empty()) continue;
|
||||||
if (to.empty()) to = " ";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto fromBytes = hex::parseByteString(from);
|
auto fromBytes = hex::parseByteString(from);
|
||||||
if (fromBytes.empty()) continue;
|
if (fromBytes.empty()) continue;
|
||||||
|
|
||||||
|
if (to.length() > 1)
|
||||||
|
hex::trim(to);
|
||||||
|
if (to.empty())
|
||||||
|
to = " ";
|
||||||
|
|
||||||
if (!this->m_mapping.contains(fromBytes.size()))
|
if (!this->m_mapping.contains(fromBytes.size()))
|
||||||
this->m_mapping.insert({ fromBytes.size(), {} });
|
this->m_mapping.insert({ fromBytes.size(), {} });
|
||||||
this->m_mapping[fromBytes.size()].insert({ fromBytes, to });
|
this->m_mapping[fromBytes.size()].insert({ fromBytes, to });
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <hex/helpers/utils.hpp>
|
#include <hex/helpers/utils.hpp>
|
||||||
#include <hex/providers/buffered_reader.hpp>
|
#include <hex/providers/buffered_reader.hpp>
|
||||||
#include <hex/helpers/crypto.hpp>
|
#include <hex/helpers/crypto.hpp>
|
||||||
|
#include <hex/helpers/logger.hpp>
|
||||||
|
|
||||||
#include "math_evaluator.hpp"
|
#include "math_evaluator.hpp"
|
||||||
|
|
||||||
@ -434,15 +435,15 @@ namespace hex::plugin::builtin {
|
|||||||
const auto [decoded, advance] = encodingFile.getEncodingFor(buffer);
|
const auto [decoded, advance] = encodingFile.getEncodingFor(buffer);
|
||||||
const ImColor color = [&decoded = decoded, &advance = advance]{
|
const ImColor color = [&decoded = decoded, &advance = advance]{
|
||||||
if (decoded.length() == 1 && std::isalnum(decoded[0]))
|
if (decoded.length() == 1 && std::isalnum(decoded[0]))
|
||||||
return 0xFFFF8000;
|
return ImGui::GetCustomColorU32(ImGuiCustomCol_ToolbarBlue);
|
||||||
else if (decoded.length() == 1 && advance == 1)
|
else if (decoded.length() == 1 && advance == 1)
|
||||||
return 0xFF0000FF;
|
return ImGui::GetCustomColorU32(ImGuiCustomCol_ToolbarRed);
|
||||||
else if (decoded.length() > 1 && advance == 1)
|
else if (decoded.length() > 1 && advance == 1)
|
||||||
return 0xFF00FFFF;
|
return ImGui::GetCustomColorU32(ImGuiCustomCol_ToolbarYellow);
|
||||||
else if (advance > 1)
|
else if (advance > 1)
|
||||||
return 0xFFFFFFFF;
|
return ImGui::GetColorU32(ImGuiCol_Text);
|
||||||
else
|
else
|
||||||
return 0xFFFF8000;
|
return ImGui::GetCustomColorU32(ImGuiCustomCol_ToolbarBlue);
|
||||||
}();
|
}();
|
||||||
|
|
||||||
return { std::string(decoded), advance, color };
|
return { std::string(decoded), advance, color };
|
||||||
@ -830,16 +831,18 @@ namespace hex::plugin::builtin {
|
|||||||
} while (offset < this->m_bytesPerRow);
|
} while (offset < this->m_bytesPerRow);
|
||||||
|
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, ImVec2(0, 0));
|
ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, ImVec2(0, 0));
|
||||||
if (ImGui::BeginTable("##encoding_cell", encodingData.size(), ImGuiTableFlags_SizingFixedFit)) {
|
ImGui::PushID(y);
|
||||||
|
if (ImGui::BeginTable("##encoding_cell", encodingData.size(), ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoKeepColumnsVisible)) {
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
|
|
||||||
for (const auto &[address, data] : encodingData) {
|
for (const auto &[address, data] : encodingData) {
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
|
||||||
const auto cellStartPos = getCellPosition();
|
const auto cellStartPos = getCellPosition();
|
||||||
const auto cellSize = CharacterSize * data.advance;
|
const auto cellSize = CharacterSize * ImVec2(std::max<float>(1, data.displayValue.length()), 1);
|
||||||
const bool cellHovered = ImGui::IsMouseHoveringRect(cellStartPos, cellStartPos + cellSize, true);
|
const bool cellHovered = ImGui::IsMouseHoveringRect(cellStartPos, cellStartPos + cellSize, true);
|
||||||
|
|
||||||
|
|
||||||
const auto x = address % this->m_bytesPerRow;
|
const auto x = address % this->m_bytesPerRow;
|
||||||
if (x < validBytes) {
|
if (x < validBytes) {
|
||||||
auto [foregroundColor, backgroundColor] = cellColors[x];
|
auto [foregroundColor, backgroundColor] = cellColors[x];
|
||||||
@ -854,7 +857,9 @@ namespace hex::plugin::builtin {
|
|||||||
this->drawSelectionFrame(x, y, address, 1, cellStartPos, cellSize);
|
this->drawSelectionFrame(x, y, address, 1, cellStartPos, cellSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImGui::PushItemWidth(cellSize.x);
|
||||||
ImGui::TextFormattedColored(data.color, "{}", data.displayValue);
|
ImGui::TextFormattedColored(data.color, "{}", data.displayValue);
|
||||||
|
ImGui::PopItemWidth();
|
||||||
|
|
||||||
this->handleSelection(address, data.advance, &bytes[address % this->m_bytesPerRow], cellHovered);
|
this->handleSelection(address, data.advance, &bytes[address % this->m_bytesPerRow], cellHovered);
|
||||||
}
|
}
|
||||||
@ -863,6 +868,7 @@ namespace hex::plugin::builtin {
|
|||||||
ImGui::EndTable();
|
ImGui::EndTable();
|
||||||
}
|
}
|
||||||
ImGui::PopStyleVar();
|
ImGui::PopStyleVar();
|
||||||
|
ImGui::PopID();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user