mirror of
https://github.com/rizinorg/cutter.git
synced 2024-12-24 05:45:27 +00:00
Page Key Navigation in Disassembly (Fix #167)
This commit is contained in:
parent
0abcf20566
commit
6fa0e0d147
@ -454,10 +454,43 @@ void DisassemblyWidget::moveCursorRelative(bool up, bool page)
|
|||||||
{
|
{
|
||||||
if (page)
|
if (page)
|
||||||
{
|
{
|
||||||
// TODO: implement page up/down
|
RVA offset;
|
||||||
return;
|
if (!up)
|
||||||
|
{
|
||||||
|
offset = Core()->nextOpAddr(bottomOffset, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
offset = Core()->prevOpAddr(topOffset, maxLines);
|
||||||
|
|
||||||
|
// disassembly from calculated offset may have more than maxLines lines
|
||||||
|
// move some instructions down if necessary.
|
||||||
|
|
||||||
|
auto lines = Core()->disassembleLines(offset, maxLines).toVector();
|
||||||
|
int oldTopLine;
|
||||||
|
for (oldTopLine=lines.length(); oldTopLine>0; oldTopLine--)
|
||||||
|
{
|
||||||
|
if (lines[oldTopLine - 1].offset < topOffset)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int overflowLines = oldTopLine - maxLines;
|
||||||
|
if(overflowLines > 0)
|
||||||
|
{
|
||||||
|
while (lines[overflowLines-1].offset == lines[overflowLines].offset
|
||||||
|
&& overflowLines < lines.length()-1)
|
||||||
|
{
|
||||||
|
overflowLines++;
|
||||||
|
}
|
||||||
|
offset = lines[overflowLines].offset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
refreshDisasm(offset);
|
||||||
|
}
|
||||||
|
else // normal arrow keys
|
||||||
|
{
|
||||||
int blockCount = mDisasTextEdit->blockCount();
|
int blockCount = mDisasTextEdit->blockCount();
|
||||||
if (blockCount < 1)
|
if (blockCount < 1)
|
||||||
{
|
{
|
||||||
@ -484,6 +517,7 @@ void DisassemblyWidget::moveCursorRelative(bool up, bool page)
|
|||||||
Core()->seek(offset);
|
Core()->seek(offset);
|
||||||
highlightCurrentLine();
|
highlightCurrentLine();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DisassemblyWidget::eventFilter(QObject *obj, QEvent *event)
|
bool DisassemblyWidget::eventFilter(QObject *obj, QEvent *event)
|
||||||
|
Loading…
Reference in New Issue
Block a user