Alternate cursor transfer through multiple monitors

Take a scenario with 2 monitors joined at the height, but both their heights are different.

In this example, the monitor on the left is 1920x1080, joined to one on the right, that is 1080x1920.

According to the currently possible configuration (top image)…

  • Going from the top of the left monitor to the right side, will land the cursor at ~400px from the top of the display at the right
  • Going from the top of the right monitor to the left side, will get the cursor stuck because there is no display space.

According to the proposed optional configuration (bottom image)…

  • Going from the top of the left monitor to the right will get you to the top of the right monitor.
  • Going from the top of the right monitor to the left will get you to the top of the left monitor.

Simple transformation:

For left to right according to the given image:

T_lr = (y_22 - y_21)/(y_12 - y_11)
y_t = y_21 + (y_i - y_11) * T_lr

round y_t to int

Where y_i is the initial vertical position of the pointer (when at the edge of the monitor on the left) and y_t is the target vertical position of the pointer (where it will be at the edge of the monitor on the right).

Similarly for right->left movement and for top->bottom and bottom->top in case of vertical placement

Using this, something like the following will also be possible.

Of course, even though the graphic makes it look like there is a gap, there should be no real gap during actual usage (at least not from this setting) and I’d say it is better to not show the gap (and the transfer trapezium) when in monitor placement mode and only show it during transfer selection.

2 Likes

Turns out there has been a previous discussion started by someone with a much better profile picture Suggestion Cursor Teleport on Multi-Monitor Setups

1 Like

I am not calling it “teleporting”, because otherwise the current default behaviour is also “teleporting”. The proposed behaviour is just an augmented translation function and nothing particularly fancy.

But I understand the window dragging problem that was being talked about in the “Cursor Teleport” discussion.

One simple answer is to just transfer everything using the same transfer function…

Summary

In this graphic, monitors are marked with grey border and the application window is painted grey, with a yellow border. The light-green circle denotes the position of the mouse cursor/pointer and the point coordinates are as given.

Corresponding to the originally given transfer function, in this case, since we are dragging the window along, we instead use y_w1 as y_i, so:

y_w1’ = y_21 + (y_w1 - y_11) * T_lr
round y_w1’ to int

y_p1’ = y_w1’ + Δy_wp
y_w2’ = y_w1’ + (y_w2 - y_w1)

For vertical movement, the corresponding corner on the left of the window will be considered as the base.

So we are essentially considering the top-left corner of the window as the basis for all the drag and multi-monitor extend actions.

But since this would end up with a condition like:

… an alternative is to just not use the transfer function when dragging and simply block the cursor on edges, as it does currently, but I feel like we will miss a point over there.

Another possible option, which seems like it will end up being much simpler, is that if the cursor is going out of bounds on a shared edge, then teleport it to the closest adjacent edge onto the other monitor, but if it is not going out of bounds, then let it pass as it does normally.

Orange arrow shows tendency of input-device; blue arrow shows target position the cursor moves to.

And this will work, even if you decide to drag windows along.


I understand that while I would prefer the transfer function for cases when I keep the monitors at a distance, it makes more sense to have the teleport function when the monitors are close by, which only works in out of bounds cases.

Actually, no. When the monitors are actually side-by-side, the user would be able to feel when the cursor will move to the other screen and when not, so one wouldn’t require (hopefully) either of them when the monitors are physically side-by-side.

I would actually be fine with this, because the only time I will be using the transfer function is when the monitors are not side-by-side, i.e. most of the time in my setup. 1 monitor is at 0.5m from my eyes and the other one is at ~1m, so I don’t feel anything being off.

But there is another way.
Set an anchor point somewhere on the touching edges of the monitors and calculate distance from there instead.

This seems to align with Suggestion Cursor Teleport on Multi-Monitor Setups - #22 by Marata