UI: Collapse XYZ Operations in Status Bar #120148

Merged
Harley Acheson merged 12 commits from Harley/blender:StatusBarXYZ into main 2024-04-22 20:03:23 +02:00
Member

Reduce the number of duplicated modal operator keymap entries by just
showing "XYZ Axis" rather than "X X Axis", "Y Y Azis", etc. This allows
more items to be shown on the status bar. Note this only does so if the
keymap contains all of X, Y, & Z.


This does make the display slightly inconsistent, but perhaps it is worth it to show many other operations instead of repeating these over and over again.

During "Move" there is a lot of space taken to show that X constrains to X axis, Y constrains to Y axis, etc:

image

This is the same amount of space with those items collapsed. It seems to be quickly readable and obvious:

image

Reduce the number of duplicated modal operator keymap entries by just showing "XYZ Axis" rather than "X X Axis", "Y Y Azis", etc. This allows more items to be shown on the status bar. Note this only does so if the keymap contains all of X, Y, & Z. --- This does make the display slightly inconsistent, but perhaps it is worth it to show many other operations instead of repeating these over and over again. During "Move" there is a lot of space taken to show that X constrains to X axis, Y constrains to Y axis, etc: ![image](/attachments/76da46e6-7b18-475c-914a-5e3bd0af1c48) This is the same amount of space with those items collapsed. It seems to be quickly readable and obvious: ![image](/attachments/333f6bce-603f-4d52-a4cf-8c3c2d766f4a)
Harley Acheson added 1 commit 2024-04-01 21:23:20 +02:00
556460c4c7 UI Experiment: Collapse XYZ Operations in Status Bar
Experiment in reducing the number of duplicated modal operator keymap
entries. Show just "XYZ Axis" rather than "X X Axis", "Y Y Azis", etc.
Harley Acheson added this to the User Interface project 2024-04-01 21:24:16 +02:00
First-time contributor

maybe adding "+" between "shift" and the 3 plans will be more clear ?
image

maybe adding "+" between "shift" and the 3 plans will be more clear ? ![image](/attachments/daf362c3-694f-4fe1-9fe9-4bce580e9a56)
3.4 KiB
Author
Member

maybe adding "+" between "shift" and the 3 plans will be more clear ?

Maybe? When this is seen next to another item, I'm not sure that it explains the difference well:

image

I'm sure there is some change that would improve this though. This might be it, or it could be something else. Fun to think about though.

> maybe adding "+" between "shift" and the 3 plans will be more clear ? Maybe? When this is seen next to another item, I'm not sure that it explains the difference well: ![image](/attachments/342ca68d-8c0a-4f6f-9e93-d870ab43e1e6) I'm sure there is some change that would improve this though. This might be it, or it could be something else. Fun to think about though.
9.3 KiB
Harley Acheson requested review from Pablo Vazquez 2024-04-02 20:47:50 +02:00
First-time contributor

Really like how much more compact it is, nice work!

Not to rain on your parade, but we may need some sort of separator between key sequences to be able to distinguish between several mutually exclusive options.

Say tell apart multiple alternatives like ⇧ Shift + X OR ⇧ Shift + Y OR ⇧ Shift + Z), from actual key combinations like Ctrl + ⇧ Shift + Y).

Maybe add a comma between mutually exclusive options, or add a "+" between real combinations like ⇧ Shift + X, Y, Z, or ⇧ Shift + Y

Really like how much more compact it is, nice work! Not to rain on your parade, but we may need some sort of separator between key sequences to be able to distinguish between several mutually exclusive options. Say tell apart multiple alternatives like <kbd>&#8679; Shift</kbd> + <kbd>X</kbd> OR <kbd>&#8679; Shift</kbd> + <kbd>Y</kbd> OR <kbd>&#8679; Shift</kbd> + <kbd>Z</kbd>), from actual key combinations like <kbd>Ctrl</kbd> + <kbd>&#8679; Shift</kbd> + <kbd>Y</kbd>). Maybe add a comma between mutually exclusive options, or add a "+" between real combinations like <kbd>&#8679; Shift</kbd> + <kbd>X</kbd>, <kbd>Y</kbd>, <kbd>Z</kbd>, or <kbd>&#8679; Shift</kbd> + <kbd>Y</kbd>
Harley Acheson added 1 commit 2024-04-03 01:41:46 +02:00
Author
Member

@DuarteRamos

No doubt there is a solution somewhere, but so far not seeing it in + or comma or slashes or line between. The design constraints (event icons are square, and using layout) isn't leaving me with much that looks right.

@DuarteRamos No doubt there is a solution somewhere, but so far not seeing it in + or comma or slashes or line between. The design constraints (event icons are square, and using layout) isn't leaving me with much that looks right.
First-time contributor

A small line chaining combinations only works acceptably for individual ones, feels weird with multiple options

image.png

I'm not sure it communicates the message clearly or is even perceptible

A small line chaining combinations only works acceptably for individual ones, feels weird with multiple options ![image.png](/attachments/7acbb91c-4600-4e42-8634-847248b221ec) I'm not sure it communicates the message clearly or is even perceptible
First-time contributor

@Harley for recording ideas
image
what about this idea ?
basing on this 3 type of icones
image
first icone: the first key to hold
second icone : are the second and third keys and so on ..
the third icone : what the last key to type.

@Harley for recording ideas ![image](/attachments/3e57892a-765c-4bd2-a497-9887720b661e) what about this idea ? basing on this 3 type of icones ![image](/attachments/a3c551b1-5f69-4c72-afa9-6e9fffc4491f) first icone: the first key to hold second icone : are the second and third keys and so on .. the third icone : what the last key to type.
First-time contributor

Maybe try the arrow:

arrow.png

Maybe try the arrow: ![arrow.png](/attachments/cce87e90-b9d9-4b0d-a1b8-28cf5e210bdb)
6.0 KiB
Member

image

The problem with these is that it could also be read as "Shift + all 3 keys at the same time".

We can't group combinations or we will end up like in main:
main


So the other alternative is to group the alternative keys into a single squared "symbol".

This way we establish the language that each individual squared-symbol is one key that you must press.

Quick mockup ideas to discuss:

  1. main
  2. Bars
  3. Dots
  4. Nothing, bit confusing.
  5. Combining the plus symbol and bars. This establishes the language of "one squared symbol == one key press.

grouped symbols

> ![image](/attachments/342ca68d-8c0a-4f6f-9e93-d870ab43e1e6) The problem with these is that it could also be read as "Shift + all 3 keys at the same time". We can't group combinations or we will end up like in `main`: ![main](/attachments/76da46e6-7b18-475c-914a-5e3bd0af1c48) ---- So the other alternative is to group the alternative keys into a single squared "symbol". This way we establish the language that each individual squared-symbol is one key that you must press. Quick mockup ideas to discuss: 1. main 2. Bars 3. Dots 4. Nothing, bit confusing. 5. Combining the plus symbol and bars. This establishes the language of "one squared symbol == one key press. ![grouped symbols](/attachments/86aebe82-e951-47bc-8c9b-5ffa15eea0ac)
Author
Member

I have a hard time seeing any options as being combined with "or".

Wondering if it helps to consider the problem more generally. Like if we want to show that "Confirm" is both left-mouse and return key, or that "cancel" can be done with right-mouse or escape key.

Maybe combine them with commas for alternates? And then only use "+" when needing to combine with any following?

[LM], [Ret] Confirm [RM], [Esc] Cancel [X], [Y], [Z] Axis [⇑]+[X], [Y], [Z] Plane [⇑][⭾] Snap Toggle

Unrelated, but one other thing we are missing is how to indicate a double-click of the left mouse button.

Hmmm... our layout is very loose when combining these things together so they don't look very grouped.

image

I have a hard time seeing any options as being combined with "or". Wondering if it helps to consider the problem more generally. Like if we want to show that "Confirm" is both left-mouse and return key, or that "cancel" can be done with right-mouse or escape key. Maybe combine them with commas for alternates? And then only use "+" when needing to combine with any following? [LM], [Ret] Confirm [RM], [Esc] Cancel [X], [Y], [Z] Axis [⇑]+[X], [Y], [Z] Plane [⇑][⭾] Snap Toggle Unrelated, but one other thing we are missing is how to indicate a double-click of the left mouse button. Hmmm... our layout is very loose when combining these things together so they don't look very grouped. ![image](/attachments/42b4240e-ee94-44da-bef3-59feaf01970f)
First-time contributor

my last imagination about "Or"
image
image
unfortunately, without dealing with the frame of the icons is difficult for me
this only when there is combinations with Shift or CTRL + another key
how about it ?

my last imagination about "Or" ![image](/attachments/151df90a-7b4b-46bd-bb96-92296d8810b8) ![image](/attachments/05dd7047-d0a1-4ae9-a1b8-f324f5ae6ba1) unfortunately, without dealing with the frame of the icons is difficult for me this only when there is combinations with Shift or CTRL + another key how about it ?
Author
Member

Can use the literal "or" perhaps

image

Can use the literal "or" perhaps ![image](/attachments/4d7f92f0-411b-4c79-9a59-30162399f982)
Member

During "Move" there is a lot of space taken to show that X constrains to X axis, Y constrains to Y axis, etc:
image

This is the same amount of space with those items collapsed:
image

Looking at the initial implementation, that's already a huge improvement: it saves space while still being readable. Especially since by looking at the changes it's not that much code for such an improvement.

Are there ways to make it even better? Probably yes, but that'd require more discussion and it'd be a pity if we end up without any improvements at all because of the back and forth looking for a design that's right.

I'd say lets go with this initial implementation and keep it in the back of our heads. The status bar as a whole needs love.

> During "Move" there is a lot of space taken to show that X constrains to X axis, Y constrains to Y axis, etc: > ![image](/attachments/76da46e6-7b18-475c-914a-5e3bd0af1c48) > > This is the same amount of space with those items collapsed: > ![image](/attachments/333f6bce-603f-4d52-a4cf-8c3c2d766f4a) > Looking at the initial implementation, that's already a huge improvement: it saves space while still being readable. Especially since by looking at the changes it's not that much code for such an improvement. Are there ways to make it even better? Probably yes, but that'd require more discussion and it'd be a pity if we end up without any improvements at all because of the back and forth looking for a design that's right. I'd say lets go with this initial implementation and keep it in the back of our heads. The status bar as a whole needs love.
Harley Acheson added 2 commits 2024-04-11 22:33:05 +02:00
Harley Acheson added 1 commit 2024-04-11 22:38:01 +02:00
Harley Acheson changed title from UI Experiment: Collapse XYZ Operations in Status Bar to UI: Collapse XYZ Operations in Status Bar 2024-04-11 22:40:09 +02:00
Author
Member

@pablovazquez - Especially since by looking at the changes it's not that much code for such an improvement.

This (initial) implementation was a bit... bare bones. It would have given a bad result if some operators had only a subset of X,Y,Z. I have updated this PR to be smarter and only do this if all three are present. It is still quite small and simple.

I'd say lets go with this initial implementation

I agree and have take the "Experiment" off the title. Although the display of these is technically inconsistent, I still find it instantly readable and obvious. All attempts I have made to remove inconsistency has (so far) only resulted in a display that was actually harder to read quickly. I don't think anyone would actually try pressing X, Y, and Z simultaneously - at least not more than once before figuring it out.

> @pablovazquez - Especially since by looking at the changes it's not that much code for such an improvement. This (initial) implementation was a bit... bare bones. It would have given a bad result if some operators had only a subset of X,Y,Z. I have updated this PR to be smarter and only do this if all three are present. It is still quite small and simple. > I'd say lets go with this initial implementation I agree and have take the "Experiment" off the title. Although the display of these is technically inconsistent, I still find it instantly readable and obvious. All attempts I have made to remove inconsistency has (so far) only resulted in a display that was actually harder to read quickly. I don't think anyone would actually try pressing X, Y, and Z simultaneously - at least not more than once before figuring it out.
Harley Acheson added 1 commit 2024-04-11 22:59:38 +02:00
Author
Member

@brecht

Would love your opinion on this. I can't quite decide if this is hacky or awesome.

@brecht Would love your opinion on this. I can't quite decide if this is hacky or awesome.
Brecht Van Lommel requested changes 2024-04-15 10:50:30 +02:00
Dismissed
Brecht Van Lommel left a comment
Owner

The functionality seems fine.

The current implementation is too much of a hack though. It's easy to break with different keymaps. It checks for identifiers first, but then doesn't verify those actually correspond to the same items as the X/Y/Z keys. It doesn't check modifier keys match, duplicates some logic for modifier key drawing, etc.

The functionality seems fine. The current implementation is too much of a hack though. It's easy to break with different keymaps. It checks for identifiers first, but then doesn't verify those actually correspond to the same items as the X/Y/Z keys. It doesn't check modifier keys match, duplicates some logic for modifier key drawing, etc.
@ -6364,6 +6364,21 @@ bool WM_window_modal_keymap_status_draw(bContext *C, wmWindow *win, uiLayout *la
}
const EnumPropertyItem *items = static_cast<const EnumPropertyItem *>(keymap->modal_items);
#ifdef WITH_HEADLESS

Why WITH_HEADLESS? Seems pointless to have it behave different for that.

Why `WITH_HEADLESS`? Seems pointless to have it behave different for that.
Harley marked this conversation as resolved
Harley Acheson added 2 commits 2024-04-16 02:50:28 +02:00
Harley Acheson added 1 commit 2024-04-16 03:11:55 +02:00
Harley Acheson added 1 commit 2024-04-16 05:20:16 +02:00
Harley Acheson added 1 commit 2024-04-16 05:39:34 +02:00
Author
Member

@brecht - The current implementation is too much of a hack though...

This PR is now using the correct hotkeys and modifiers even if changed, and checks to make sure that each group (axis or plane) is using consistent modifiers. Still a bit more mess than I'd like though.

> @brecht - The current implementation is too much of a hack though... This PR is now using the correct hotkeys and modifiers even if changed, and checks to make sure that each group (axis or plane) is using consistent modifiers. Still a bit more mess than I'd like though.
Brecht Van Lommel added 1 commit 2024-04-22 16:04:21 +02:00
buildbot/vexp-code-patch-lint Build done. Details
buildbot/vexp-code-patch-linux-x86_64 Build done. Details
buildbot/vexp-code-patch-darwin-x86_64 Build done. Details
buildbot/vexp-code-patch-darwin-arm64 Build done. Details
buildbot/vexp-code-patch-windows-amd64 Build done. Details
buildbot/vexp-code-patch-coordinator Build done. Details
52f2725e6c
Simplify implementation
Brecht Van Lommel approved these changes 2024-04-22 16:05:12 +02:00
Brecht Van Lommel left a comment
Owner

I felt this implementation was more complicated than it had to be, but it wasn't easy to explain how. So I went ahead and made the changes.

I felt this implementation was more complicated than it had to be, but it wasn't easy to explain how. So I went ahead and made the changes.
Pablo Vazquez approved these changes 2024-04-22 17:48:16 +02:00
Author
Member

@blender-bot build

@blender-bot build
Author
Member

Indeed, much simpler

Indeed, much simpler
Harley Acheson merged commit 49bd285529 into main 2024-04-22 20:03:23 +02:00
Harley Acheson deleted branch StatusBarXYZ 2024-04-22 20:03:32 +02:00
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
6 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#120148
No description provided.