impr: Make inserting bytes at the start of the file with insert mode work better
This commit is contained in:
parent
1c3dfc9b2f
commit
f931beb49a
@ -104,7 +104,8 @@ namespace hex::prv {
|
||||
|
||||
void Provider::insertRaw(u64 offset, u64 size) {
|
||||
auto oldSize = this->getActualSize();
|
||||
this->resizeRaw(oldSize + size);
|
||||
auto newSize = oldSize + size;
|
||||
this->resizeRaw(newSize);
|
||||
|
||||
std::vector<u8> buffer(0x1000);
|
||||
const std::vector<u8> zeroBuffer(0x1000);
|
||||
@ -116,7 +117,7 @@ namespace hex::prv {
|
||||
position -= readSize;
|
||||
|
||||
this->readRaw(position, buffer.data(), readSize);
|
||||
this->writeRaw(position, zeroBuffer.data(), readSize);
|
||||
this->writeRaw(position, zeroBuffer.data(), newSize - oldSize);
|
||||
this->writeRaw(position + size, buffer.data(), readSize);
|
||||
}
|
||||
}
|
||||
|
@ -95,7 +95,7 @@ namespace hex::ui {
|
||||
private:
|
||||
enum class CellType : u8 { None, Hex, ASCII };
|
||||
|
||||
void drawCell(u64 address, const u8 *data, size_t size, bool hovered, CellType cellType);
|
||||
void drawCell(u64 address, u8 *data, size_t size, bool hovered, CellType cellType);
|
||||
void drawSeparatorLine(u64 address, bool drawVerticalConnector);
|
||||
void drawSelectionFrame(u32 x, u32 y, Region selection, u64 byteAddress, u16 bytesPerCell, const ImVec2 &cellPos, const ImVec2 &cellSize, const ImColor &backgroundColor) const;
|
||||
void drawEditor(const ImVec2 &size);
|
||||
|
@ -281,7 +281,7 @@ namespace hex::ui {
|
||||
|
||||
|
||||
|
||||
void HexEditor::drawCell(u64 address, const u8 *data, size_t size, bool hovered, CellType cellType) {
|
||||
void HexEditor::drawCell(u64 address, u8 *data, size_t size, bool hovered, CellType cellType) {
|
||||
static DataVisualizerAscii asciiVisualizer;
|
||||
|
||||
if (m_shouldUpdateEditingValue && address == m_editingAddress) {
|
||||
@ -320,6 +320,7 @@ namespace hex::ui {
|
||||
std::memcpy(m_editingBytes.data(), data, size);
|
||||
else if (m_mode == Mode::Insert) {
|
||||
std::memset(m_editingBytes.data(), 0x00, size);
|
||||
std::memset(data, 0x00, size);
|
||||
m_provider->insert(address, size);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user