Skip to content

scrolling animation fix #32

Description

@LiteWinOS

case WM_MOUSEWHEEL:
{
// 1. If Ctrl is held down, do nothing here and break out.
// This lets Windows/RichEdit handle the zooming animation normally.
if (LOWORD(wParam) & MK_CONTROL)
{
break;
}

    int delta = GET_WHEEL_DELTA_WPARAM(wParam);
    UINT scrollLines = 3;
    SystemParametersInfoW(SPI_GETWHEELSCROLLLINES, 0, &scrollLines, 0);

    // 2. If Shift is held down, handle horizontal scrolling
    if (LOWORD(wParam) & MK_SHIFT)
    {
        if (scrollLines == (UINT)WHEEL_PAGESCROLL)
        {
            SendMessageW(hwnd, WM_HSCROLL, (delta > 0) ? SB_PAGELEFT : SB_PAGERIGHT, 0);
        }
        else
        {
            for (UINT i = 0; i < scrollLines; ++i)
                SendMessageW(hwnd, WM_HSCROLL, (delta > 0) ? SB_LINELEFT : SB_LINERIGHT, 0);
        }
        return 0;
    }
    // 3. Normal scrolling (No Ctrl, No Shift) -> Instant vertical scroll
    else
    {
        if (scrollLines == (UINT)WHEEL_PAGESCROLL)
        {
            SendMessageW(hwnd, WM_VSCROLL, (delta > 0) ? SB_PAGEUP : SB_PAGEDOWN, 0);
        }
        else
        {
            for (UINT i = 0; i < scrollLines; ++i)
                SendMessageW(hwnd, WM_VSCROLL, (delta > 0) ? SB_LINEUP : SB_LINEDOWN, 0);
        }
        return 0;
    }
}
case WM_MOUSEHWHEEL:
{
    int delta = GET_WHEEL_DELTA_WPARAM(wParam);
    UINT scrollChars = 3;
    SystemParametersInfoW(SPI_GETWHEELSCROLLCHARS, 0, &scrollChars, 0);
    if (delta != 0)
    {
        for (UINT i = 0; i < scrollChars; ++i)
            SendMessageW(hwnd, WM_HSCROLL, (delta > 0) ? SB_LINERIGHT : SB_LINELEFT, 0);
        return 0;
    }
    break;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions