Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shift + scroll vertical zoom #254

Open
wants to merge 3 commits into
base: develop
Choose a base branch
from

Conversation

ryanpmcguire
Copy link
Contributor

When first using Helio, I found the panning / zooming defaults menu very confusing. After playing around with it for a long time, I have finally concluded that it would be best to do away with this section of the menu and institute the following changes:

  • Naked scroll always pans left/right (or up/down, if the user wants)
  • Ctrl zooms horizontally
  • Shift zooms vertically (shift is above ctrl, making it seem more "vertical")
  • Alt zooms globally (makes sense)

Traditionally, shift/ctrl/alt scroll always relates to zooming, while naked scroll relates to panning. I think this is the way it should be in Helio as well.

@peterrudenko
Copy link
Member

Although the current scroll wheel settings are admittedly somewhat confusing, they are still preferable to just hard-coding one behavior or another. I've been using naked scroll to zoom since forever, and added those settings in response to other folks' requests (#169 and #177).

The way it works is that Shift changes the direction while Control changes the mode (zoom vs. pan), but you can customize the default mode and direction. So this scheme is flexible enough to work almost the way you're describing here with these settings:

scroll wheel settings

(except it would be Shift+Control to zoom vertically, not Shift alone)

Anyway, I believe we shouldn't hard-code the scrolling behavior, I rather like the idea of making the settings section more flexible, maybe also more intuitive. But, off the top of my head, can't think of any good ways to approach doing that.

@ryanpmcguire
Copy link
Contributor Author

ryanpmcguire commented Dec 27, 2022

The request has been updated to reflect what I believe is a good final version of the user interaction system concerning zooming and panning. I have tested it extensively and it seems to work well.

  1. For those that would prefer a naked scroll to zoom by default.
  • scrolling zooms according to your selected default axis
  • if alt is down, the zoom axis changes to the opposite of the default
  • if ctrl is down, the viewport will pan horizontally
  • if shift if down, the viewport will pan vertically
  1. For those that would prefer a naked scroll to pan by default.
  • scrolling pans according to your selected default axis
  • if alt is down, the pan axis changes to the opposite of the default
  • if ctrl is down, the viewport will zoom horizontally
  • if shift if down, the viewport will zoom vertically

This system allows those from each paradigm to use the software comfortably and in a way which is not confusing. Ticking boxes in the menu results in changes that don't need to be "decoded" by the user.

@peterrudenko
Copy link
Member

This version seems to ignore or deprecate the user's default for axis:

'horizontalPanByDefault': local variable is initialized but not referenced
'horizontalZoomByDefault': local variable is initialized but not referenced
'verticalZooming': local variable is initialized but not referenced
'horizontalZooming': local variable is initialized but not referenced

I'm wondering if it could be implemented in a more backwards-compatible way?

Also, Shift seems more conventional than Alt for changing the scroll direction, e.g. this is how text editors and browsers behave, I think it's worth making it configurable somehow instead of hard-coding.

@ryanpmcguire
Copy link
Contributor Author

ryanpmcguire commented Jan 3, 2023

I believe that is an artefact of the several variables which I established beforehand as a formality. I did make sure to take in to account all possible setting configurations in the control logic. To save you some time, I have made some simple screen recordings as demonstration (thanks for including such recordings in your own comments, as they are very helpful):


image
Produces
zoom and horizontal default


image
Produces
zoom and vertical default


image
Produces
pan and horizontal default

And finally

image
Produces
pan and vertical default

In all cases, if the mousewheel action is to zoom, the setting for default pan axis is not considered, as the ctrl and shift keys are responsible for the control over the axis, which brings us to the final point which I think is the most important.

Though I believe it is prudent to follow convention in order to provide users with the easiest and most comfortable experience, conventions in software tend to be a bit fragmented. Graphic design, CAD, Video editing, and Music software all seem to use slightly different approaches which grate against each-other and don't feel very natural. I believe that it makes sense to assign CTRL to horizontally oriented functions, and SHIFT to vertically oriented functions. For instance, CTRL+WHEEL when mousing over notes might tune their position in time while SHIFT+WHEEL would tune their velocities. Likewise, CTRL+H would humanize (slightly randomize) timings, and SHIFT+H would humanise velocities. Following from this approach, I believe it makes sense to assign CTRL to horizontal zoom/pan and SHIFT to vertical zoom/pan.

From first moment of trying this configuration, at was very easy for me to form a mental map of control, and navigating a project became instantaneous, thoughtless, and easy.

I will edit this pull request to remove unreferenced variables.

@luzpaz
Copy link

luzpaz commented Dec 22, 2023

Any progress here ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

3 participants