@@ -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