Skip to content

Commit 6b8af9a

Browse files
committed
- Make arrow keys pan the canvas by single pixel when Control key is held (or 1/8th pixel when Ctrl+Shift).
- Make home/end and page up/down pan by larger distance. Press Ctrl+Home to reset the origin/transform.
1 parent 166c85c commit 6b8af9a

1 file changed

Lines changed: 13 additions & 14 deletions

File tree

DrawingCanvasControl.ixx

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -220,24 +220,23 @@ LRESULT CALLBACK DrawingCanvasControl::WindowProc(HWND hwnd, UINT message, WPARA
220220

221221
case WM_KEYDOWN:
222222
{
223-
float static const scrollMultiple = 64;
223+
float constexpr scrollMultipleDefault = 64;
224+
float constexpr scrollPageDefault = 256;
224225
bool heldControl = (GetKeyState(VK_CONTROL) & 0x80) != 0;
226+
bool heldShift = (GetKeyState(VK_SHIFT) & 0x80) != 0;
227+
auto getScrollMultiplier = [&]() -> float { return (heldControl && heldShift) ? 1.0f / 8 : heldControl ? 1 : scrollMultipleDefault; };
225228

226229
switch (wParam)
227230
{
228-
case 'C':
229-
if (heldControl)
230-
{
231-
CopyToClipboard();
232-
}
233-
break;
234-
235-
case VK_UP: Pan(0, scrollMultiple); break;
236-
case VK_DOWN: Pan(0, -scrollMultiple); break;
237-
case VK_LEFT: Pan( scrollMultiple, 0); break;
238-
case VK_RIGHT: Pan(-scrollMultiple, 0); break;
239-
case VK_HOME: ResetView(); break;
240-
231+
case 'C': if (heldControl) CopyToClipboard(); break;
232+
case VK_UP: Pan(0, getScrollMultiplier()); break;
233+
case VK_DOWN: Pan(0, -getScrollMultiplier()); break;
234+
case VK_LEFT: Pan( getScrollMultiplier(), 0); break;
235+
case VK_RIGHT: Pan(-getScrollMultiplier(), 0); break;
236+
case VK_PRIOR: Pan(0, scrollPageDefault); break;
237+
case VK_NEXT: Pan(0, -scrollPageDefault); break;
238+
case VK_HOME: if (heldControl) ResetView(); else Pan(scrollPageDefault, 0); break;
239+
case VK_END: Pan(-scrollPageDefault, 0); break;
241240
default:
242241
return DefWindowProc(hwnd, message, wParam, lParam);
243242
} // switch

0 commit comments

Comments
 (0)