Snap controls bar, implicit checking (Wishlist)

Bug #963293 reported by David Mathog
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Inkscape
New
Wishlist
Unassigned

Bug Description

Wishlist

(Based on behavior of trunk from Feb 29, 2012).

On the snap controls toolbar there are four identical icons (blue square to black arrow to green square).
Top to bottom, these are:

A Enable snapping (%)
B Snap bounding boxes
C Snap nodes paths and handles
D Snap other points

Even though all of these icons are identical this is actually a hierarchical menu, just presented in 1D. "A" enables/disables everything, B, C, D enable/disable their respective options, and those options in turn need to be enabled or disabled. If a user, while icon A is not selected clicks on the "snap to paths" icon nothing happens even though the intent is to enable "snap to paths' (obviously!) This is because Icons A and C must be enabled before the "snap to paths" icon may be made active by clicking on it.

I do not see any reason for this restriction.

Clearly if a user clicks on a snapping mode they want to enable it, and doing so should automatically enable the icons above it, here C and A. Similarly, if a user clicks on "A" then "C", no snapping is actually enabled until they then click on one of the options under "C" - the state with A & C on but nothing selected under C makes no sense.

Additionally, I would suggest changing the labels on those icons to:

A Toggle Snap (all)
B Toggle Snap bounding boxes
C Toggle Snap nodes paths and handles
D Toggle Snap other points

This is because those icons do not just Enable, they also also disable. (If the label changed from Enable -> Disable with the state that would be even better, if the GUI supports that.)

Also icons A,B,C,D should be some variant of a "0/1", or "on/off", icon, as the "snap" part is implied by their location in this menu, and is redundant with their sub-icons. That is, the icon shape is not consistent with their function (toggling the logic) but with the function of the menu (so redundant).

Here is an example of the desired interaction, starting with everything off.

User clicks on "Snap bounding box corners" icon -> icons A and B are set, as is the clicked icon
User clicks on A -> all icons are unset
User clicks on "snap to paths" -> icons A, B, and C are set, as are "snap bounding box corners' and "snap to paths"
    The logic is that this sets C, C sets A, and once A is set all icons which were disabled by A are also set again.
User clicks on B -> icons B and "snap bounding box corners" are unset
User clicks on B again -> icons B and "snap bounding box corners" are set
User clicks on D -> icon D and the two ions under it are set.
  Logic - neither of the icons under it was set initially, but having D set with none of its suboptions set does
not change the behavior of the program, even though one of the icons has changed from unset to set.
So redefine from the current behavior: clicking on B,C,D when these are off and none of the subentries were previously set will now set the clicked icon and all of its subentries.

By the same logic clicking on A when none of the other would set would set everything. That, I think, is undesirable, since that is unlikely to be the users intent. If A is off there is no way for the user to know what the state of the other icons is. It might be best in the case (all disabled) and the user clicks on A that it put up an error message, suggesting that something further down the list should be selected, and that the state of A not change. Again, if the GUI supports this sort of thing, the label for "A", might change to "no snap options are enabled", to distinguish this eventuality from
the other operating modes.

Tags: snapping ui
su_v (suv-lp)
Changed in inkscape:
importance: Undecided → Wishlist
tags: added: snapping ui
Revision history for this message
Diederik van Lierop (mail-diedenrezi) wrote :

Hi David,

Thank you for taking the time to report this. Let me explain how we have arrived at this solution:
- It's indeed hierarchical, in 1D. To communicate this to the user, the dependent buttons are being greyed out as soon as the button they depend on is being toggled off. I believe that this is a good way to let the users discover the hierarchy, in the least awkward way. Of course more advanced users might feel this is a restriction, but still I believe that this is not that bad of a compromise.
- By grouping the various snap options liek we have done, it's quite easy to quickly turn off a large set of snapping solutions using a single button. For example, this allows you to quickly switch from snapping bounding boxes to snapping nodes to paths, or vice versa. There's less need in such a case to think about which buttons need to be toggled.

You're right about the labels, these should be improved. However, I don't like the idea of changing the state of multiple toggles, when clicking on one of them only. Although this can work, I don't believe that this makes things more intuitive, maybe only more efficient. Do you have any examples of others programs that work like this?

Revision history for this message
David Mathog (mathog) wrote :

This sort of explicit check of levels above is common in installers for complex software. The custom install menu might look like this:

0 Level1 Option 1
0 Level2 Option 1
0 Level2 Option 2
0 Level3 Option 1
0 Level3 Option 2
0 Level2 Option 3
0 Level1 Option 2

and then when you select "Level3 option2" (this might install help files in one nonstandard language) the whole thing converts to

1 Level1 Option 1
0 Level2 Option 1
1 Level2 Option 2
0 Level3 Option 1
1 Level3 Option 2
0 Level2 Option 3
0 Level1 Option 2

Usually in these installers the menu is nested and expands and contracts. So after closing up "level1 option1" we can still tell that something in it will be installed, even though we can no longer see what. The Inkscape snap menu is different in that it is always expanded. And that is the confusing part - it is possible to click on buttons and nothing happens, or to click on an enable button, with none of the suboptions enabled, and then the display changes but the program is effectively still in the same state. (Options below here enabled if selected (but none selected)).

I generally only have a couple of "snaps" enabled at a time - if there are too many then it becomes hard to control object movement.

The other way to go about something like this is to let the user store (named) states, and then switch between them using a pull down menu. That approach would look like a cross between the Layers tool and the Align and Distribute tool. See the attached drawing (red squares are selected options, I could not highlight the static button images). In some ways I would favor that approach over what we have now because:

1. Snapping is the only right side menu of its type, and I would rather have the screen drawing space.
2. It is almost impossible to work in Inkscape without "fill and Stroke" and "Align" stacked up in the dock on the right side of the screen. Since those are already there, adding one more entry to the dock ("Snapping") would take up no more space.
3. I generally would only ever use 2 or 3 snapping states in a drawing. (None, snap to sides, snap to nodes). Selecting those from the pull down menu is probably faster than disable one set, enable the other.

Just realized that the "iconify the dock" icon arrow points the wrong way. It points left, but the dock iconifies to the right.

Revision history for this message
LucaDC (lucadc) wrote :

Hallo David,
> It is almost impossible to work in Inkscape without "fill and Stroke" and "Align"
> stacked up in the dock on the right side of the screen.
That's not true for me. I like having the most space free on screen while working so I never use stacked up docks. Also, doing technical drawings I don't have a so frequent need of changing fill and stroke, nor alignment as I use guides a lot and they are always available and only where needed.
On the contrary, I make an heavy use of different snapping options and having all of them ready for use on the (thin) right bar is really handy.

I also use at most few snapping configurations but they usually differ for a button or two, so toggling between them is quick and easy for me.
Anyway, I already proposed the customizable toggle sets (in the form of few more buttons in the bar, of course ;) but if made as you proposed (in a dock) they would indeed take up a huge space for me! I'd rather prefer to have small buttons with a key combination for fast selection (something like ctrl-alt-1, ctrl-alt-2, and so on); like pipe organs' stops and free registrations, if you know how they work. Personally I don't feel so comfortable with pull down menus: I feel they are hiding the information of which combination I'm using, but just showing its name.

It's true that enabling a group toggle without any sub-toggle enabled does not change anything on Inkscape's snapping behavior, but why should you have it disabled if nothing is being disabled? :) Maybe the main toggle could be grayed out when no sub-toggles are selected so it remains in the on state until something is enabled under it, but I feel this would be just a cosmetic change that in some cases could give problems to users not understanding what's going on and a better visualization of toggled-but-disabled buttons would be needed anyway.
In general I don't like a lot the idea of setting all sub icons when none is on and the master becomes enabled: I never have a full set of options all enabled at once, so If for some reason I had disabled a whole subgroup and temporary switched off all snappings with the master of masters button (sometimes I do when there are too many objects on canvas and I have to move a big group), when coming back to snapping enabled I'd find a lot of buttons unintentionally toggled on and would have to switch them all off manually. To avoid this, an exception on your proposed behavior must be introduced so when a master is toggled by a super master, the rule should not apply; I feel it's becoming too complicated. And someone could toggle a master with no subs enabled by mistake...

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.