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) {
|
void Provider::insertRaw(u64 offset, u64 size) {
|
||||||
auto oldSize = this->getActualSize();
|
auto oldSize = this->getActualSize();
|
||||||
this->resizeRaw(oldSize + size);
|
auto newSize = oldSize + size;
|
||||||
|
this->resizeRaw(newSize);
|
||||||
|
|
||||||
std::vector<u8> buffer(0x1000);
|
std::vector<u8> buffer(0x1000);
|
||||||
const std::vector<u8> zeroBuffer(0x1000);
|
const std::vector<u8> zeroBuffer(0x1000);
|
||||||
@ -116,7 +117,7 @@ namespace hex::prv {
|
|||||||
position -= readSize;
|
position -= readSize;
|
||||||
|
|
||||||
this->readRaw(position, buffer.data(), 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);
|
this->writeRaw(position + size, buffer.data(), readSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ namespace hex::ui {
|
|||||||
private:
|
private:
|
||||||
enum class CellType : u8 { None, Hex, ASCII };
|
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 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 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);
|
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;
|
static DataVisualizerAscii asciiVisualizer;
|
||||||
|
|
||||||
if (m_shouldUpdateEditingValue && address == m_editingAddress) {
|
if (m_shouldUpdateEditingValue && address == m_editingAddress) {
|
||||||
@ -320,6 +320,7 @@ namespace hex::ui {
|
|||||||
std::memcpy(m_editingBytes.data(), data, size);
|
std::memcpy(m_editingBytes.data(), data, size);
|
||||||
else if (m_mode == Mode::Insert) {
|
else if (m_mode == Mode::Insert) {
|
||||||
std::memset(m_editingBytes.data(), 0x00, size);
|
std::memset(m_editingBytes.data(), 0x00, size);
|
||||||
|
std::memset(data, 0x00, size);
|
||||||
m_provider->insert(address, size);
|
m_provider->insert(address, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user