Well, in my case, because the VCF on my synth sets its cutoff frequency based on the pointer's Y position and its resonance based on the pointer's X position
Sure, but that is pretty niche. My point was it’s pretty low friction for most people and certainly to try it.
But obviously be pragmatic, if it doesn’t work for you because you have a particular requirement, or even if it doesn’t offer any improvement over what you have then don’t use it.
Neither way works in Wayland. A program can know where it was clicked but not where the pointer was immediately before that. For that matter Wayland doesn't have a concept of "the" pointer; there may be multiple pointers.
> Using the wl_seat.get_pointer request, clients may obtain a wl_pointer object. The server will send events to it whenever the user moves their pointer, presses mouse buttons, uses the scroll wheel, etc — whenever the pointer is over one of your surfaces. [...] The server sends this event when the pointer moves over one of our surfaces, and specifies both the surface that was "entered", as well as the surface-local coordinates (from the top-left corner) that the pointer is positioned over.
So the program should know the pointer's local coordinates.
Hover is done by the client telling the compositor it would like the cursor to change its shape if it is over a certain area the client is drawing. But the client does not know where the cursor is or where on the screen the client is (or even if the client is visible at all).