mirror of
https://github.com/rizinorg/cutter
synced 2026-08-11 16:23:06 -04:00
1. Scroll by visual lines instead of disassembly lines (see #3604) Previously whenever a scroll happened, cutter cleared all of the disassembled lines it had and queried rizin again, even if the scroll was only for one instruction. This causes two problems: * All of the lines have to be queried again making scrolling slow. * Since an instruction can have multiple metadata lines attached to it, it meant that whenever a user scrolled a single instruction all of the metadata lines will also be scrolled - making scrolling feel choppy. To solve this we keep a buffer of "max visible lines * 5" which is filled in as user scrolls, meaning at first only "max visible lines" are queried from rizin, if user scrolls upwards the entire "max visible lines" above the current top instruction is fetched and prepended to our "lines" buffer. Since the previous lines are still saved - if the user scrolls back down we can just show those specific lines from our buffer instead of querying again. Lines are erased from start or end based on scroll direction if the buffer exceeds the size cap of "max visible lines * 5" The "lines" buffer is fully cleared if user seeks to some address using some external signal - like the Visual nav bar at the top (basically seeking using any method other than directly clicking on the instruction line itself) 2. Adds infinite selection via mouse and keyboard There was no way in cutter to select more lines than whats currently shown on screen and there was also no way to select text via keyboard. This is done via manually handling the selection instead of letting Qt handle it. The selection is preserved no matter how far user scrolls up or down. 3. Fixes empty space at the bottom of disassembly widget viewport Whenever "max visible lines" were calculated it didn't account for the fact that the last line might be partially visible meaning there is not enough space to display it fully, which created empty space at the bottom 4. Adds a visible/blinking cursor to the disassembly panel Avoids the issue of not knowing which line we are on, if the line contains similar text that is highlighted. Also helps to know where selection will start using physical keys |
||
|---|---|---|
| .. | ||
| AddressableItemModel.cpp | ||
| AddressableItemModel.h | ||
| AnalysisTask.cpp | ||
| AnalysisTask.h | ||
| AsyncTask.cpp | ||
| AsyncTask.h | ||
| BasicBlockHighlighter.cpp | ||
| BasicBlockHighlighter.h | ||
| BasicInstructionHighlighter.cpp | ||
| BasicInstructionHighlighter.h | ||
| BinaryTrees.h | ||
| BugReporting.cpp | ||
| BugReporting.h | ||
| CachedFontMetrics.h | ||
| Colors.cpp | ||
| Colors.h | ||
| ColorThemeWorker.cpp | ||
| ColorThemeWorker.h | ||
| CommandTask.cpp | ||
| CommandTask.h | ||
| Configuration.cpp | ||
| Configuration.h | ||
| CutterLayout.cpp | ||
| CutterLayout.h | ||
| CutterSearchable.cpp | ||
| CutterSearchable.h | ||
| CutterSeekable.cpp | ||
| CutterSeekable.h | ||
| Decompiler.cpp | ||
| Decompiler.h | ||
| DecompilerHighlighter.cpp | ||
| DecompilerHighlighter.h | ||
| DirectionalComboBox.cpp | ||
| DirectionalComboBox.h | ||
| DisassemblyHelper.cpp | ||
| DisassemblyHelper.h | ||
| DisassemblyPreview.cpp | ||
| DisassemblyPreview.h | ||
| FunctionsTask.h | ||
| Helpers.cpp | ||
| Helpers.h | ||
| HighDpiPixmap.cpp | ||
| HighDpiPixmap.h | ||
| InitialOptions.h | ||
| IOModesController.cpp | ||
| IOModesController.h | ||
| Json.cpp | ||
| Json.h | ||
| LinkedListPool.h | ||
| MdHighlighter.cpp | ||
| MdHighlighter.h | ||
| Metrics.h | ||
| PythonAPI.cpp | ||
| PythonAPI.h | ||
| PythonManager.cpp | ||
| PythonManager.h | ||
| QtResImporter.cpp | ||
| QtResImporter.h | ||
| RefreshDeferrer.cpp | ||
| RefreshDeferrer.h | ||
| ResourcePaths.cpp | ||
| ResourcePaths.h | ||
| RichTextPainter.cpp | ||
| RichTextPainter.h | ||
| RizinTask.cpp | ||
| RizinTask.h | ||
| RunScriptTask.cpp | ||
| RunScriptTask.h | ||
| SelectionHighlight.cpp | ||
| SelectionHighlight.h | ||
| SettingsUpgrade.cpp | ||
| SettingsUpgrade.h | ||
| StringsTask.h | ||
| SvgIconEngine.cpp | ||
| SvgIconEngine.h | ||
| SyntaxHighlighter.cpp | ||
| SyntaxHighlighter.h | ||
| TempConfig.cpp | ||
| TempConfig.h | ||
| UpdateWorker.cpp | ||
| UpdateWorker.h | ||