In Blender, we have had drag and drop support for dragging content such as images onto objects, and 3d content into 3d views. However, we've always lacked the ability to drag the UI elements themselves.
This would be good to finally address.
This would mean we can get rid of these re-ordering buttons, which are slow because you can only move items one line at a time:
To move an item up by 10 lines, you have to click this button 10 times! This gets ridiculous if you have to move something 200 items up or down a list.
Even worse, in some cases we make users open a menu to move items one section at a time:
We should get rid of these buttons and menu entries, and just let users directly drag UI elements instead.
We already do this in the Properties Editor when re-ordering panels:
However, we can do this many more places, wherever we have the need for users to be able to re-order something.
Examples:
Animations are slowed down to show the animations more clearly.
Tabs:
Lists:
Use-Cases
- Workspace Tabs
- UI Lists
- Brush palette colors (T71705)
- Constraints, modifiers and other similar stacks
- Animation channel lists
- Customizable toolbars
- Dockable UI elements (e.g. support docking operator settings panel to sidebar, rather than having both by default)
Animation
To support this nicely, we should use animation to make items move out of the way, and to let the current items follow the cursor. This makes the UI feel physical and dependable, and you won't get any sudden surprises when you let go of your drag action, and the UI elements suddenly re-order themselves.
This kind of thing has a few implications how we draw some UI elements.
In Blender we still have the fairly unique advantage that we are drawing the UI using the GPU, which facilitates creating beautifully smooth animations and transitions. We just need to take advantage of this more, just as we do with region overlapped area regions: