Closed thatcomputerguy0101 closed 1 week ago
Instead of remapping events, I added the capability to execute different camera actions depending on the state of the modifier keys. This removed the Copy
trait from CameraAction
and CameraControl
due to Box
now being involved, but standard uses of those two types outside of the three-d
crate should not be affected.
On further consideration, I'm not sure I'm happy with the Box
-based modifier map, so I'm going to separate that from this PR to allow for further design revision. In the meantime, custom control interfaces could handle modifier keys before passing the event list to CameraControl::handle_events
.
I think it looks really good. Since I was so slow responding, I resolved the merge conflict and merged the changes. If you think there's more changes needed, feel free to open another PR 🙂 Thanks for the contribution, yet again 🙏
@thatcomputerguy0101 While looking at your changes, I realised that the whole control setup is a bit over engineered. Therefore, I tried to remove the CameraControl
and the CameraAction
in https://github.com/asny/three-d/pull/507. It simply applies the incoming events directly to the camera. This actually made the whole setup much simpler, so I'm going to merge that. Feedback to this approach is very welcome 🙏
This adds support for pinch and rotation gesture events, as exposed from winit on MacOS platforms. Additionally, this associates ctrl-scrolling with the pinch gesture unless actual gesture events are detected since some Windows trackpads expose pinch information as scrolling with the ctrl key held. This somewhat breaks any custom control systems that expect pinch to zoom until they are updated with the new pinch event. However, since key modifiers are not made accessible to the camera control interface, any old handlers are still accessible by scrolling vertically.