Debugger: Handle memview select right click better.

Shouldn't reset if you click inside.  Also should basically ignore
modifiers, that's how it normally behaves.
This commit is contained in:
Unknown W. Brackets 2023-01-01 22:49:04 -08:00
parent a7101b128f
commit bba748d627
2 changed files with 29 additions and 18 deletions

View file

@ -118,9 +118,9 @@ LRESULT CALLBACK CtrlMemView::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
break; break;
case WM_MOUSEWHEEL: case WM_MOUSEWHEEL:
if (GET_WHEEL_DELTA_WPARAM(wParam) > 0) { if (GET_WHEEL_DELTA_WPARAM(wParam) > 0) {
ccp->ScrollWindow(-3, GotoModeFromModifiers()); ccp->ScrollWindow(-3, GotoModeFromModifiers(false));
} else if (GET_WHEEL_DELTA_WPARAM(wParam) < 0) { } else if (GET_WHEEL_DELTA_WPARAM(wParam) < 0) {
ccp->ScrollWindow(3, GotoModeFromModifiers()); ccp->ScrollWindow(3, GotoModeFromModifiers(false));
} }
break; break;
case WM_ERASEBKGND: case WM_ERASEBKGND:
@ -344,16 +344,16 @@ void CtrlMemView::onPaint(WPARAM wParam, LPARAM lParam) {
void CtrlMemView::onVScroll(WPARAM wParam, LPARAM lParam) { void CtrlMemView::onVScroll(WPARAM wParam, LPARAM lParam) {
switch (wParam & 0xFFFF) { switch (wParam & 0xFFFF) {
case SB_LINEDOWN: case SB_LINEDOWN:
ScrollWindow(1, GotoModeFromModifiers()); ScrollWindow(1, GotoModeFromModifiers(false));
break; break;
case SB_LINEUP: case SB_LINEUP:
ScrollWindow(-1, GotoModeFromModifiers()); ScrollWindow(-1, GotoModeFromModifiers(false));
break; break;
case SB_PAGEDOWN: case SB_PAGEDOWN:
ScrollWindow(visibleRows_, GotoModeFromModifiers()); ScrollWindow(visibleRows_, GotoModeFromModifiers(false));
break; break;
case SB_PAGEUP: case SB_PAGEUP:
ScrollWindow(-visibleRows_, GotoModeFromModifiers()); ScrollWindow(-visibleRows_, GotoModeFromModifiers(false));
break; break;
default: default:
return; return;
@ -384,22 +384,22 @@ void CtrlMemView::onKeyDown(WPARAM wParam, LPARAM lParam) {
switch (wParam & 0xFFFF) { switch (wParam & 0xFFFF) {
case VK_DOWN: case VK_DOWN:
ScrollCursor(rowSize_, GotoModeFromModifiers()); ScrollCursor(rowSize_, GotoModeFromModifiers(false));
break; break;
case VK_UP: case VK_UP:
ScrollCursor(-rowSize_, GotoModeFromModifiers()); ScrollCursor(-rowSize_, GotoModeFromModifiers(false));
break; break;
case VK_LEFT: case VK_LEFT:
ScrollCursor(-1, GotoModeFromModifiers()); ScrollCursor(-1, GotoModeFromModifiers(false));
break; break;
case VK_RIGHT: case VK_RIGHT:
ScrollCursor(1, GotoModeFromModifiers()); ScrollCursor(1, GotoModeFromModifiers(false));
break; break;
case VK_NEXT: case VK_NEXT:
ScrollWindow(visibleRows_, GotoModeFromModifiers()); ScrollWindow(visibleRows_, GotoModeFromModifiers(false));
break; break;
case VK_PRIOR: case VK_PRIOR:
ScrollWindow(-visibleRows_, GotoModeFromModifiers()); ScrollWindow(-visibleRows_, GotoModeFromModifiers(false));
break; break;
case VK_TAB: case VK_TAB:
SendMessage(GetParent(wnd),WM_DEB_TABPRESSED,0,0); SendMessage(GetParent(wnd),WM_DEB_TABPRESSED,0,0);
@ -467,9 +467,11 @@ void CtrlMemView::redraw() {
} }
} }
CtrlMemView::GotoMode CtrlMemView::GotoModeFromModifiers() { CtrlMemView::GotoMode CtrlMemView::GotoModeFromModifiers(bool isRightClick) {
GotoMode mode = GotoMode::RESET; GotoMode mode = GotoMode::RESET;
if (KeyDownAsync(VK_SHIFT)) { if (isRightClick) {
mode = GotoMode::RESET_IF_OUTSIDE;
} else if (KeyDownAsync(VK_SHIFT)) {
if (KeyDownAsync(VK_CONTROL)) if (KeyDownAsync(VK_CONTROL))
mode = GotoMode::EXTEND; mode = GotoMode::EXTEND;
else else
@ -482,7 +484,7 @@ void CtrlMemView::onMouseDown(WPARAM wParam, LPARAM lParam, int button) {
int x = LOWORD(lParam); int x = LOWORD(lParam);
int y = HIWORD(lParam); int y = HIWORD(lParam);
GotoPoint(x, y, GotoModeFromModifiers()); GotoPoint(x, y, GotoModeFromModifiers(button == 2));
} }
void CtrlMemView::onMouseUp(WPARAM wParam, LPARAM lParam, int button) { void CtrlMemView::onMouseUp(WPARAM wParam, LPARAM lParam, int button) {
@ -583,7 +585,7 @@ void CtrlMemView::onMouseUp(WPARAM wParam, LPARAM lParam, int button) {
int x = LOWORD(lParam); int x = LOWORD(lParam);
int y = HIWORD(lParam); int y = HIWORD(lParam);
ReleaseCapture(); ReleaseCapture();
GotoPoint(x, y, GotoModeFromModifiers()); GotoPoint(x, y, GotoModeFromModifiers(button == 2));
} }
void CtrlMemView::onMouseMove(WPARAM wParam, LPARAM lParam, int button) { void CtrlMemView::onMouseMove(WPARAM wParam, LPARAM lParam, int button) {
@ -591,7 +593,7 @@ void CtrlMemView::onMouseMove(WPARAM wParam, LPARAM lParam, int button) {
int y = HIWORD(lParam); int y = HIWORD(lParam);
if (button & 1) { if (button & 1) {
GotoPoint(x, y, GotoModeFromModifiers()); GotoPoint(x, y, GotoModeFromModifiers(button == 2));
} }
} }
@ -620,6 +622,14 @@ void CtrlMemView::UpdateSelectRange(uint32_t target, GotoMode mode) {
lastSelectReset_ = target; lastSelectReset_ = target;
break; break;
case GotoMode::RESET_IF_OUTSIDE:
if (target < selectRangeStart_ || target >= selectRangeEnd_) {
selectRangeStart_ = target;
selectRangeEnd_ = target + 1;
lastSelectReset_ = target;
}
break;
case GotoMode::FROM_CUR: case GotoMode::FROM_CUR:
selectRangeStart_ = lastSelectReset_ > target ? target : lastSelectReset_; selectRangeStart_ = lastSelectReset_ > target ? target : lastSelectReset_;
selectRangeEnd_ = selectRangeStart_ == lastSelectReset_ ? target + 1 : lastSelectReset_ + 1; selectRangeEnd_ = selectRangeStart_ == lastSelectReset_ ? target + 1 : lastSelectReset_ + 1;

View file

@ -71,10 +71,11 @@ private:
enum class GotoMode { enum class GotoMode {
RESET, RESET,
RESET_IF_OUTSIDE,
FROM_CUR, FROM_CUR,
EXTEND, EXTEND,
}; };
static GotoMode GotoModeFromModifiers(); static GotoMode GotoModeFromModifiers(bool isRightClick);
void UpdateSelectRange(uint32_t target, GotoMode mode); void UpdateSelectRange(uint32_t target, GotoMode mode);
void GotoPoint(int x, int y, GotoMode mode); void GotoPoint(int x, int y, GotoMode mode);
void ScrollWindow(int lines, GotoMode mdoe); void ScrollWindow(int lines, GotoMode mdoe);