Software grab cursor jumps upper-left when starting right-click scrolling

Summary

When starting right-click drag scrolling in a ListView widget,
the visible cursor jumps a fixed distance toward the upper-left.

The issue occurs in both PIE and packaged Windows builds in our project.
ScrollBox-based scrolling areas do not exhibit the same visible offset.

We identified a difference between the software cursor positioning
expressions in STableViewBase::OnPaint and SScrollBox::OnPaint.
A project-side workaround that makes the ListView cursor positioning
match SScrollBox eliminates the visible jump.

What Type of Bug are you experiencing?

UI / Tools

Steps to Reproduce

  1. Create a new project in Unreal Engine.
  2. Create a Widget Blueprint containing a native UMG ListView.
  3. Assign an entry widget and populate the list with enough items
    to make it scrollable.
  4. Add the widget to the viewport and run PIE.
  5. Hold the right mouse button over the list and move the mouse
    to begin scrolling.
  6. Observe the software grab cursor jumping toward the upper-left.

Expected Result

Cursor stays the pressed position when begin drag.

Observed Result

Cursor jumps toward the upper-left.
In the following image:
Left: ScrollBox
Right: ListView
Drag with right mouse button

Affects Versions

5.7

Platform(s)

Windows

Upload an image

GIF.gif

Additional Notes

In STableViewBase::OnPaint, the software cursor position uses:

SoftwareCursorPosition - (CursorSize / .5f)

Following the implementation in SScrollBox::OnPaint, changing
“/ .5f” to “* .5f” resolves the visible cursor jump in our local test:

SoftwareCursorPosition - (CursorSize * .5f)