Bug fix #33892
HiDPI "retina" mode didn't work for "Continuous Grab" yet. Note; this mode works by having different coordinate systems for pixels and window/mouse coords. I really hope future HiDPI implementations use the same trick.
This commit is contained in:
@@ -188,12 +188,20 @@ void WM_cursor_grab_enable(wmWindow *win, int wrap, int hide, int bounds[4])
|
|||||||
* It helps not to get a stuck WM when hitting a breakpoint
|
* It helps not to get a stuck WM when hitting a breakpoint
|
||||||
* */
|
* */
|
||||||
GHOST_TGrabCursorMode mode = GHOST_kGrabNormal;
|
GHOST_TGrabCursorMode mode = GHOST_kGrabNormal;
|
||||||
|
float fac = GHOST_GetNativePixelSize(win->ghostwin);
|
||||||
|
|
||||||
|
/* in case pixel coords differ from window/mouse coords */
|
||||||
|
bounds[0] /= fac;
|
||||||
|
bounds[1] /= fac;
|
||||||
|
bounds[2] /= fac;
|
||||||
|
bounds[3] /= fac;
|
||||||
|
|
||||||
if (hide) mode = GHOST_kGrabHide;
|
if (hide) mode = GHOST_kGrabHide;
|
||||||
else if (wrap) mode = GHOST_kGrabWrap;
|
else if (wrap) mode = GHOST_kGrabWrap;
|
||||||
if ((G.debug & G_DEBUG) == 0) {
|
if ((G.debug & G_DEBUG) == 0) {
|
||||||
if (win && win->ghostwin) {
|
if (win && win->ghostwin) {
|
||||||
const GHOST_TabletData *tabletdata = GHOST_GetTabletData(win->ghostwin);
|
const GHOST_TabletData *tabletdata = GHOST_GetTabletData(win->ghostwin);
|
||||||
|
|
||||||
/* Note: There is no tabletdata on Windows if no tablet device is connected. */
|
/* Note: There is no tabletdata on Windows if no tablet device is connected. */
|
||||||
if (!tabletdata)
|
if (!tabletdata)
|
||||||
GHOST_SetCursorGrab(win->ghostwin, mode, bounds, NULL);
|
GHOST_SetCursorGrab(win->ghostwin, mode, bounds, NULL);
|
||||||
|
Reference in New Issue
Block a user