-
-
Notifications
You must be signed in to change notification settings - Fork 97
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
Replace contextual toolbars with contextual drawers #3550
Comments
I think this is great! It Makes it super clear that the tools are contextual! I had real trouble finding tools in the beginning since it didn't feel intuitive to look in that bar. I thought the bar always had the same tools. It never occurred to me that new ones could be added based on context! Questions:
Great work! |
@knil79 Yes, the idea would be for all contextual toolbars to be replaced by this. Unless there are exceptions that shouldn't be moved, of course. I'll migrate all 2D and 3D toolbars that I'm aware of. I've also been asked to provide this as a drop-in solution for some visual script cases. And it should likely have an API exposed for user-created editor plugins. PS. Ah, and yes, it can be backported. But we would first need to stabilize it for master. I'll port everything I can to 3.x from all my current work. |
And if there is a tool that you missed it will be fallback and put on the old bar right?
VERY nice!
Music to my ears! |
One potential use I see for this is the web/Android build of the editor <3 |
Well, it's all a manual process to change the UI. If I don't change it, it will remain in the toolbar. 🙃 Hopefully, we'll remember everything during the PR review process. If not, feel free to drop an issue report in the main repo afterwards. |
See also #3112, godotengine/godot#35891, #386, #14, and probably more |
This looks great! I think it needs some new Also, there is a small horizontal offset here between the section header text and the button text. I think the spacing should either be increased so that it is more noticeable or the offset should be removed. |
This is great - looking forward to be able to add drawers to my Firebase plugin to make it easier to configure without having a huge list of properties in the topmost node. This will really help that! |
This is an excellent idea to me, a solid solution to the toolbar getting more and more stuff and preventing us to resize the editor. |
What needs to be defined about this is how it works in 3D, given you can split the viewports there. This is the main reason why we did not implement something like this before. |
Looks nice but couldn’t we just move it to the inspector instead of having like a little popup. But maybe the inspector gets to crowded then? Not sure I like how much of the viewport it takes up when the menu is expanded. Should at least I think auto close when you click somewhere in the viewport (outside of the expanded menu) |
I see mainly three options:
I think 2. wouldn't feel too good as toggling the drawers would change the viewports' size. And 3 may look off.
That's similar to clicks in the Inspector to expand categories. You also often need to scroll or search often already. I don't think it would take more time with drawers. The idea also seems to give you simpler, contextual options to set up nodes, like with the label's example here. So the purpose isn't the same as the inspector: it's a replacement for "contextual toolbars" (which are currently very limited as there's limited space available in the toolbar).
To me, no, you want to control that. You'll often want to tweak options in the drawer, move the view, tweak again... repeatedly. You don't want to take that control away from the user, that'd be really frustrating. |
@reduz Yes, jfons mentioned that yesterday, and it is quite a problem. The main issue would be that the context for those tools is never related to the viewport. It's either the open bottom panel editor, or currently selected nodes. Technically, I can duplicate drawer panels between all the viewports, but they would still share all the context. If that's not a good idea, then we would need to introduce some per-viewport contexts for selected nodes and whatnot. In that case, I think we should be okay to implement this proposal in a straight-forward way, and then work on per-viewport contexts and do the necessary changes there. My main goal here is not to move toolbars into the viewport, like it was proposed before, but to solve the current usability limitation. So I'd start there. |
All this functionality is already available in the inspector. The point of the toolbars always was to give quick access to some specialized functions depending on the context. Nothing changes here. In fact, this proposal doesn't add any new functionality, it just moves the tools from the toolbar to the drawer, so that the toolbar is no longer overcrowded.
It needs to be over the viewport, or beside it. Like I've mentioned before, it's not new or unique functionality. Those toolbars only contain quick access items for otherwise accessible tools. They are required by people working from the viewport as opposed to people working off the inspector or script. It does take some space, but it's a decent compromise to have only the tools you need handy and to make them appear near the relevant context (the viewport).
When you click somewhere in the viewport, you deselect the nodes, so those panel will disappear. But overall the purpose is the opposite — to have them open as long as the user needs them, not close them like they are context menu. This design is inspired by a similar system in Blender where user fully controls when they want the panels visible and when they don't. |
In blender, they have their tool options in 1) the toolbar of the viewport, 2) in the tool drawer of the viewport and 3) a tab in the property editor. Solution 1 is what we have currently in Godot, and solution 2 is what pycbouh is proposing. What I mean by tab? In Godot, there is the Inspector tab, File System tab, the Scene tab, the Import tab, Node tab, etc… the tool properties could be a new Tool tab. that might also save the issue of multiple viewports? |
I'm sorry to say, but as someone who works on a Laptop with 1080p and a UI zoom of 125%: This is a horrible idea. One of the worst design decisions Adobe did was to implement exactly this in Photoshop CS6. It is absolutly the worst ever for being productive. The only thing that saved Adobe is that Photoshop allows users to also snap those panels out as permanently floating panels or docking panels. The solution to overflowing toolbar is to prioritize or increase vertical space of the toolbar and allow users to detach toolbar as a free floating panel. (and bottom panel as well). The solution to generally better UI are workspaces: "Magnetic docking", detached free floating panels, allowing user to save positions as custom workspaces, providing a hand full of sensible default workspaces. Have panel items with priority, so when the user decides to minimize the panel, only high priority things are shown. The solution to better UI is NOT to have users click even more e-v-e-r-y t-i-m-e they need to do the most basic tasks! Godot UI flow already has a problem with nesting important regulary properties deep in the UI to mimic the OPP class principle instead of providing the user the functionality when and where it is needed the most. This is making just it worse by forcing the user to click yet another thing before they can access context relevant settings. The goal should be to remove clicks for the most common UI flows and make most common contextual setting most visible, not to add clicks and hide common contextual settings even more. This |
I think this is fundamentally unsolvable.
Ultimately it's about striking a good balance between these and I think this PR does that: Space is solved, discoverability is much better, and even convenience isn't that much worse as overflow means an extra click anyway, and a click is a fair tradeoff for knowing exactly where to find contextual settings. If you have an idea that strikes an even better balance in your opinion, it would be nice to share a proposal or to chat specifics. |
To comment on the PR itself, and address the concern about convenience. There needs to be a way to pin these menus and maybe even move them around. With something like adding points on Line2D, I would often need to switch between modes like adding or deleting points. If the menu hides when I click somewhere in the editor, my productivity would plummet. |
That's exactly why I proposed drawers instead of context menus or automatic overflow buttons. These panels will stay open as long as it is relevant for them to stay open, or until the user hides them. They appear and disappear exactly like the toolbars currently do. Some react on what nodes are currently selected, and some - on what bottom editor is open. I.e. if you select your path node, the button will appear. You click on it, the panel will expand. You work with your path and change tool modes or snapping rules, it still stays. You deselect the path node, it disappears, both panel and button. You select it again and the button appears again, and if the panel was open before it also appears immediately. There will also be a setting, for people with bigger screens, to forgo the buttons and just always open the panels. We can also add a button and a shortcut to expand or hide all tool drawers at once, if there are many. Finally, we do want to find a solution for the buttons being nameless. We can do the same Blender does for teaching its left-hand sidebar and allow to expand the buttons to show labels (and do so by default). |
@ MewPurPur
Of course it's solvable: You need a prominent designated place where you put the most important context related settings. For this you must prioritize and also allow the user to make individual adjustments (changing priority, all panels free floating, all panels magnetic docking, predefined and user defined workspaces) Coincidentally this is exactly what (or rather where) the toolbar panel currently is. Instead of streamlining and improving it, this PR removes an intuitive prominent feature drastically and reduces discoverability by hiding it behind yet another button at a much less prominent location, under a graphical symbol unknown to the general user. This PR is not striking a balance. It's the equivalent of avoiding a problem you have with good organization by stuffing all your mess into an unlabeled drawer, behind a cupboard and under the rug, just before the guests arrive. It's making UI UX worse (more clicks, hurts discoverability), and on top removing one of the few good and working UI features, instead of trying to solve Godots underlying fundamental UI UX problem. |
The problem with the current toolbar panel is, it can take too much space for some toolbars and/or stretches the editor. |
Hot fix: Add another line to the toolbar.
|
@golddotasksquestions What I can take from your responses is that a) this proposal somehow makes the usability worse, and b) there is some fundamental UX problem with the Godot editor. The latter is too vague, up to individual taste and highly debatable to even start discussing, and is not even a part of this proposal, so I won't refer to those points. The former, however, makes me curious. Everything that you attribute to this idea making worse, the toolbars fail to solve as well.
On top of that, several people across different comment sections have commented that they didn't realize (at all or for some time) there were contextual toolbars to begin with! Sure, Calinou's fix to highlight them helps in that regard, but that's only a small patch that only recently became available to users. So for most people's experience with Godot toolbars were a poorly discoverable feature.
It gets even worse if we consider one of the previously suggested solutions to introduce an automatic overflow menu. Such menu would act as a normal context menu (i.e. only appear when you click on the button and disappear after you select the action), and it would take the buttons that were unlucky to be at the end of the row. This would make the life so much harder for people who specifically need those buttons and don't need the buttons which are permanently visible instead.
Comparatively, with this proposal we'd have:
On top of that, nothing prevents us to make these new drawers into detachable and completely adjustable panels that can be relocated within the viewport area, like a floating dock. If there is actually a demand for it. And that's the problem. While you call it "one of the few good and working UI features", toolbars don't actually work for a lot of people. You can look at the linked issues with technical problems that make toolbars or the entire editor unusable, and you can also look at the proposals linked by LightningAA. Notably one of the most requested proposals in Godot at the moment, #14, which this solution partially covers in a similar way. |
... this isn't a PR (pull request), this is a proposal 😄 |
Thanks for your response @pycbouh, I appreciate it!
It's not vague or subjective or debatable at all: Allowing more user control, detaching free floating and docking panels has been regularly asked countless times on the community channels as well as here for over many years. When combined with the ability to save as workspaces and having default workspaces, it is a minimum requisite to allow a general purpose editor like Godot to cater to all those different individual usecases and users a multi-purpose editor like Godot has. Because the only other alternative is only more nesting, deeper menus, and therefore longer click-chains and therefore worse flow and worse discoverability and a harder time for people trying to learn and teach this software. I mentioned these things because when I asked about the contextual toolbar on Reddit, you rightfully said "that's a multistep process, we need to improve the toolbars first" ... which to me means as much you don't just want to dynamically add additional lines to the toolbar when needed (hot fix), but you want to solve this properly, which I totally agree support.
Are we talking about the same thing? (Rhetorical question to express what you are saying makes no sense to me what so ever) Granted there could be a lot of improvement (see my previous comment about setting prioritization and customization, meaning rethinking what ends up showing up there in the first place), but hiding it away is working directly against it's sole UX purpose. You just create another nested tree users have to memorize and click through.
And it's hardly a surprise. Even with the most brilliant feature, if you make it inconsistent, confusing because you mix it with other things, and make it appear only some of the time, but with no apparent logic either, of course people will train to set their attention else where.
There is no doubt the contextual toolbar desperately needs and UI UX overhaul and a lot of love and attention to make this whole area a lot clearer (in purpose and design, I don't mean "empty"). Btw I'm just calling it "toolbar" because that's the official name for this central panel. However this name alone is a contributing a lot to the UX catastrophe. It's not just tools in there. Even more so the word "Toolbar" obscures the contextual functionality. It's really no wonder people don't know what's up there. But that's not "bad discoverability", that just bad inconsistent and unfocused UX design. Bad design decisions, which I thought you set out to improve, not put in a box.
Yes, that would be a hot fix. Definitely better than nothing, but also definitely not my preferred solution. A better hot fix would be to add additional lines reserved only for contextual things. Still a hot fix though that does not address the underlying rigid UI structure and lack of consistency clarity etc which is the cause for these problems ...
I work with Godot daily full-time on such a smaller screen. You have to draw the line somewhere. People can't expect to full productivity of a full blown general purpose game engine capable of next gen graphics with all it's bells and whistles on a 13 inch screen and 720p. If you design for that you cutting your own flesh. However having said that there always will be productivity concessions for user who decided to work in this environment, we could still do a lot to make Godot more useable on such devices. How? Surprisingly (or not) the same as for power users: Free floating, magnetically dockable panels, custom and default workspaces, a panel with contextual priorities settings ... much more freedom for users to close/minimize and customize their workspace and panels easily directly in the editor without having to write any scripts, just via drag and drop. |
But you only need to remember one thing: "This little square that appears on the viewport with the node's icon, has contextual settings for that node." It's so basic I can imagine it explained in a Part 1 of a How to Use Godot tutorial |
@christinoleo Thanks, I can see what your idea is about now. However, I don't believe it serves the same purpose. It can be an interesting avenue to explore on its own. In fact, I had a similar experiment a few months ago: 2021-09-21_18-33-27.mp4But that's not what we are trying to solve here. We don't need to remove toolbars, we just need to make them more flexible and allow users to pick and choose the tools they presently need. My proposal doesn't change any fundamental principle of the toolbars we currently have, it just makes them better fitted in the working area, a bit more customizable, and more verbose. It may look like a radical change, but that's just a small step really. |
Kind of related (I mean as far as floating, dockable tabs are concerned): #1890 |
@Jummit the idea is to have labels by default, with tooltips, with the ability to fold the labels as @HungryProton presented. That itself would already be better than the toolbar which has many icons without labels due to the lack of space. Again, the video in the first post is just a small proof of concept to get the discussion started. Part of what the proposal is about is having quick access to the most important features for a node, for example, for UI design. The inspector is very crowded for that purpose. We're working on an app made with Godot, and at least I have to scroll the inspector up and down and use the search bar all the time already. It would also allow you, as a designer, to work in distraction-free mode (Ctrl-Shift F11). I'd very much like to see more of that in Godot for level and UI design. It's a nice side bonus for addressing a more prominent issue with the toolbar. |
I've been experimenting a bit — with the overall look&feel for drawers, and features of those particular GUI-related tools, and here's what I have at the moment: 2021-11-20_21-51-24.mp4 |
@pycbouh Looks great (especially the anchor selector)! I have only a few minor suggestions for it:
|
Also, we should be able to customize which corner of the viewport the drawers are at. This could be done in a similar way to dock panels, with a popup to select which corner of the viewport you want the drawers to be at or by dragging it. |
I wonder if a small space between the separate drawers could make the interface easier to use as it would be better visible which part is toggled by which button (easier to see "ah this is the second part from the top"). Overall I think this PR is very good, it will allow me to use Godot more efficiently on my small laptop where the toolbar regularly overflows. With how the editor currently works, this seems like a really good solution. I like the idea of fire540 to allow customization of which corner the drawers are in. Maybe even something like dragging them around (when a modifier key is pressed)? That would be awesome as you can quickly rearrange them to adjust to what you are currently working on. Maybe even that the editor remembers this on a per scene or per node basis. However, I see this as an improvement that could be done at some point on top of this PR, not necessarily something that must be done immediately. Regarding the 3D view, I think it would be best if the drawers existed kinda in their own overlay above all 3D views. Sure, there can be multiple views, but we will never have different tools for different views. The drawers are coupled to what is selected, not to the view. So I think having them once as an overlay above everything should be fine. The expanded drawers would then overfloat the 3D views if necessary. This could potentially overlap the 3D-Axis-Orientation-Thing that is in the top right corner of each 3D view. I don't think that is too bad. The alternatives would be:
I don't like either option. Instead, I think it is perfectly fine if the 3D orientation thing is hidden under some drawers as you can always either collapse the drawers to reach it or use keyboard controls to achieve the same as clicking the 3d orientation thing. |
@fire540 I've addressed this suggestion before: while I don't have anything against that idea, other corners are already taken by other stuff (3d view has a whole menu to the left, bottom sides in viewports can host debug information). This was the only free corner. So for this suggestion to be implemented, we'd need to allow moving all of that stuff around. Which may be worth it, but also probably something to do outside of this proposal. |
Upon reading this thread, it seems most (if not all) of the criticism boils down to the drawer taking too much space. Here's an obvious idea: why not add a keybinding to toggle (or hold to show/hide) its visibility? 🤔 |
@gaudecker I’m sorry, to “what” taking too much space? |
@pycbouh I'm sorry. I meant the contextual drawer. |
Hmm, I'm not sure there were a lot of complaints about drawers taking too much space. Most complaints are that they require additional clicks to interact with (toolbars were always visible), that buttons can be too cryptic and require learning what they mean, and that they aren't as flexible as one would hope. Drawers are opt-in, you have to click the corresponding button for them to show up, so they only take as much space as you need. A shortcut to toggle all of the available drawers on or off at once can be added for convenience, of course. But I'm not sure there was criticism regarding them taking space, so that would solve a different problem. What does take a lot of space is the toolbars that we have now. That was one of the established problems that this proposal is trying to address. |
I think that they do not take too much place. In any way, I would suggest first going with this. Implementing a way to completely hide drawer icons temporarily can always be done later if this really becomes an issue. In that case I would even suggest that the toggle isn't "hide all drawer" but instead "hide all viewport overlays" which includes the axis orientation thing and the "Perspective" menu and so on... But as I said, something like this can always be added later when it really becomes a problem. Also, there already is the option to enter distraction free mode (Ctrl Shift F11) in order to have a bigger viewport if needed temporarily. |
Assuming with "keybindings" you mean "keyboard shortcuts": These are never a substitute for good UI. They are a vital extension for power users of a particular feature, but not the sole solution to any problem. If your UX depends on keyboard shortcut to be usable or fluid, it sucks big time (yes you Blender).
|
@golddotasksquestions I don't think the suggestion was to make it exclusively possible to only use the key-binding. I think the suggestion was more general to make it possible to hide the drawers completely. The keybinding is more an implementation detail. I agree that only the keybinding would be bad, but usually you would not do that exclusively but instead additionally to a graphical way. In which case keyboard shortcuts are actually good UX and can improve accessibility as not everyone can comfortably use a mouse. That being said, as I already commented before, I think this could be done at a different time as this is nothing that is necessary for the drawers to work. Especially when one can simply enter the distraction free mode to have more space in the viewport when needed. |
I like the Text Properties drawer because it is a dedicated place to inspect & operate things text related. But I think the Anchors drawer is just a fancy way of providing a bunch of buttons. It constantly takes a lot of screen (although the user can close it manually) and does not provide information. For the anchors preset, I think #3559 is more effective. |
It can provide information regarding current settings of the selected node, but this won't work when you select multiple nodes (same limitations apply to the text properties). Container panel is a bit more informative, as it updates depending on what options are available for your current selection.
You mean the fact that it's one click less to open, change, and close? Edit: Note, that the specific functionality for the drawers hasn't been changed much, other than use the available space more efficiently. We definitely don't want to have them in the toolbar, but the functionality of the tools themselves is not the core of this proposal. |
I know that the similar buttons in the Container Layout drawer can be used to display current selected mode because these are states. The 4x4 array of anchor preset buttons are commands like the current preset popup menu. I don't think it's always doable to deduce preset from the current anchor settings.
A popup closes immediately. For me, building a UI scene works like: Add a Control, set the preset, tweak a bunch of properties; Add another, set the preset, tweak a bunch of properties... So basically either it stays open during the whole process, or I have to close it manually everytime a preset is chosen. The former makes the drawer take up quite a lot of space when it's not needed, while the latter will quickly get annoying. Maybe it's just me that need to adapt to a new workflow :) I'm not against the drawer proposal. |
Well, we already do it in the new inspector layout section 🙂 It can, of course, not match any preset as well.
Yeah, that's what I meant. I can see how this can be annoying with the flow that you describe. I think an adjustment period is always required when the UI/UX changes in any application. It's often hard to tell if the current flow is what is most comfortable and what should be supported, or if it's just how we adapt and adjust to the thing and make the best of it. On the flip side, toolbars can still exist if we find that they serve some purpose better. And nothing about drawers is set in stone, on the contrary, I want to get it in alphas as soon as possible to see how users find them. |
Describe the project you are working on
Godot editor
Describe the problem or limitation you are having in your project
It's been a long standing issue that the toolbar row on top of the editor viewports is very crowded when it comes to contextual tools. Not only does it create a lot of clutter for users to untangle reducing productivity, but it also prevents us from comfortably supporting PCs and laptops with smaller displays. This segment of users is very important for us, as a lot of Godot users work from smaller laptops with limited screen space.
But even for people with huge monitors (like myself) the amount of icons on the toolbar can become overwhelming depending on context of selected nodes. While we do some work to move tools away from that panel (godotengine/godot#54342), we also introduce new tools that are important to people who work visually (godotengine/godot#54372). There is also an argument to be made that the toolbar row loses its purpose when we start adding more and more functionality to it, sometimes not even strictly "tool" functionality.
For a better perspective on what areas of the engine it affects see multiple linked issues in godotengine/godot#31133.
Describe the feature / enhancement and how it helps to overcome the problem or limitation
One of the proposed solutions was to create an overflow for the toolbar and automatically hide excessive elements there. But this doesn't really solve the problem with over-crowdedness and only partially improves usability on smaller screens as users are unable to pick the tools that would go off-screen.
My idea would be to use the space inside of the viewport, and give users a chance to pick. Enter "tool drawers". The concept is similar to Blender's tool panels to the left and right of the viewport. They are hidden, but can slide over the viewport area and provide additional tools, including contextually relevant tools, without a strict limitation for the horizontal space. This allows to better explain what the tools do with labels and titles instead of relying exclusively on pictograms and tooltips.
The ability to select specific sections of the drawers gives users a way to only see the instruments they currently need, while still having access to the tools they may use another time. And while space over the viewport is not exactly free real estate, it can be a decent compromise when the need to use a contextual tool arises.
Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams
I have a basic prototype done, and moved a couple of control-related contextual toolbars to the drawers. Here's how it works:
2021-11-15_20-30-58.mp4
Also look at how tiny and cute the editor can go!
If this enhancement will not be used often, can it be worked around with a few lines of script?
This is about the editor usability.
Is there a reason why this should be core and not an add-on in the asset library?
See above.
The text was updated successfully, but these errors were encountered: