diff --git a/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp b/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp index 9a142fc240..8bc8776691 100644 --- a/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp +++ b/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp @@ -73,6 +73,23 @@ MemoryView::SetTargetAddress(TeamMemoryBlock* block, target_addr_t address) } +void +MemoryView::ScrollToSelection() +{ + if (fTargetBlock != NULL) { + target_addr_t offset = fTargetAddress - fTargetBlock->BaseAddress(); + int32 lineNumber = 0; + if (fHexBlocksPerLine > 0) + lineNumber = offset / (fHexBlocksPerLine * (1 << (fHexMode - 1))); + else if (fTextCharsPerLine > 0) + lineNumber = offset / fTextCharsPerLine; + float y = lineNumber * fLineHeight; + if (!Bounds().Contains(BPoint(0.0, y))) + ScrollTo(0.0, y); + } +} + + void MemoryView::TargetedByScrollView(BScrollView* scrollView) { @@ -231,6 +248,7 @@ MemoryView::MessageReceived(BMessage* message) case MSG_TARGET_ADDRESS_CHANGED: { _RecalcScrollBars(); + ScrollToSelection(); Invalidate(); break; } diff --git a/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.h b/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.h index 5565f61d16..74be46d8d5 100644 --- a/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.h +++ b/src/apps/debugger/user_interface/gui/inspector_window/MemoryView.h @@ -45,9 +45,7 @@ public: void SetTargetAddress(TeamMemoryBlock* block, target_addr_t address); - - void TargetAddressChanged(target_addr_t address); - + void ScrollToSelection(); virtual void TargetedByScrollView(BScrollView* scrollView);