Skip to content

frontend: Update transform dialog#12410

Merged
RytoEX merged 2 commits intoobsproject:masterfrom
Warchamp7:transform-dialog-updates
Jan 9, 2026
Merged

frontend: Update transform dialog#12410
RytoEX merged 2 commits intoobsproject:masterfrom
Warchamp7:transform-dialog-updates

Conversation

@Warchamp7
Copy link
Member

@Warchamp7 Warchamp7 commented Jul 19, 2025

Description

Adds a new AlignmentSelector widget that returns both Qt::alignment values and a currentIndex corresponding to an alignment position.

Updates the appearance and functionality of the Transform dialog

  • Visual changes
  • Layout changes
  • Renames the bounds type values to more user-friendly terms
  • Adjusts behaviour of a few actions to improve UX
    • Changing position alignment will update X/Y position so the source doesn't shift visually
    • Changing bounds type off BOUNDS_NONE applies the size to the bounding box and resets the scaling size
    • Changing bounds type to BOUNDS_NONE adjusts position and size so the source doesn't shift visually

Note

Positioning is incorrect when switching back to BOUNDS_NONE while using a bounds type with crop to bounds enabled. This will be fixable later with the additional libobs function added in #12383 but is not any worse than the current behaviour.

Motivation and Context

Want to bring this dialog in line visually with other recent UI changes and do a pass on it's behaviour.

image

How Has This Been Tested?

Lots of resizing and position/alignment changes to various sources.

Types of changes

Checklist:

  • My code has been run through clang-format.
  • I have read the contributing document.
  • My code is not on the master branch.
  • The code has been tested.
  • All commit messages are properly formatted and commits squashed where appropriate.
  • I have included updates to all appropriate documentation.

@Warchamp7 Warchamp7 added this to the OBS Studio 32.0 milestone Jul 19, 2025
@Warchamp7 Warchamp7 added Seeking Testers Build artifacts on CI UI/UX Anything to do with changes or additions to UI/UX elements. labels Jul 19, 2025
@Warchamp7 Warchamp7 force-pushed the transform-dialog-updates branch 2 times, most recently from 6b06fe2 to ef70f46 Compare July 22, 2025 01:54
@Warchamp7
Copy link
Member Author

Updated with QAccessibleInterface for the new widget to better support screen readers and other accessibility tools.

Copy link
Member

@PatTheMav PatTheMav left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested this specifically with keyboard navigation enabled from macOS' accessibility features and noticed that both alignment controls are only available after tabbing through the entire window's contents (including the close button) and I had to press tab 5 more times to get from the first box to the second and from the second box back to the first drop down.

From an A11Y point of view I think those boxes should be accessible right after their associated controls (just like they are visually aligned with them). I haven't had the time to check where those 5 additional controls came from that I had to "tab through".

@Warchamp7
Copy link
Member Author

I tested this specifically with keyboard navigation enabled from macOS' accessibility features and noticed that both alignment controls are only available after tabbing through the entire window's contents (including the close button) and I had to press tab 5 more times to get from the first box to the second and from the second box back to the first drop down.

From an A11Y point of view I think those boxes should be accessible right after their associated controls (just like they are visually aligned with them). I haven't had the time to check where those 5 additional controls came from that I had to "tab through".

Those controls should be in logical order of the window, and they are for me on Windows. Very odd that it isn't the case on mac?

@Warchamp7 Warchamp7 force-pushed the transform-dialog-updates branch 3 times, most recently from f8a8f70 to 9294124 Compare September 27, 2025 17:43
@PatTheMav
Copy link
Member

Those controls should be in logical order of the window, and they are for me on Windows. Very odd that it isn't the case on mac?

Tested this again with the current state of the PR today and the new controls are now correctly navigated to after their corresponding spin boxes when tabbing through the window.

The only remaining quirks I found are:

  • The dropdown for bounding box mode is ignored for tab-navigation
  • When my focus is on any other control (e.g. the "Crop Left" spin box) and I then change the bounds dropdown from "Automatic" to "Fit", then the "W" spinbox gets the "in focus" style (dark background, blue border) but is not actually focused. It seems like that happens because the entry for "Fit" in the dropdown is just over the "W" spinbox. This might be related to our use of native dropdown on macOS.

The second quirk applies to all Qt widgets - if I move the mouse further to the right in the dropdown so my mouse cursor happens to be above the "Crop Bounds" checkbox, then that one is rendered with the the "hover" state style and keeps it until a full window state update.


On another note I stumbled over use of "W" and "H" while playing with the bounds inputs and it felt a bit "wrong" that we use "Left", "Top", etc. but not "Width" and "Height". "X" and "Y" are not abbreviations but the literal names of the axes, so those feel more "right" in their shortened form.

@PatTheMav PatTheMav moved this from Backlog to In review in OBS Studio 32.1 PR Considerations Oct 8, 2025
@Warchamp7
Copy link
Member Author

  • The dropdown for bounding box mode is ignored for tab-navigation

I'm unable to replicate this. I do think the bounding box alignment widget was in the wrong order though, so that should be fixed after my next force push.

  • When my focus is on any other control (e.g. the "Crop Left" spin box) and I then change the bounds dropdown from "Automatic" to "Fit", then the "W" spinbox gets the "in focus" style (dark background, blue border) but is not actually focused. It seems like that happens because the entry for "Fit" in the dropdown is just over the "W" spinbox. This might be related to our use of native dropdown on macOS.

The second quirk applies to all Qt widgets - if I move the mouse further to the right in the dropdown so my mouse cursor happens to be above the "Crop Bounds" checkbox, then that one is rendered with the the "hover" state style and keeps it until a full window state update.

I do believe this is a quirk of macOS native dropdowns. I think an easy way to test would be to try the ComboBox in the transitions dock which has the duration lineedit and buttons below it. Can you reproduce there?

obs64_MYvvn1aH1t.mp4

Reverted W/H back to full names as I agree with the feedback.

@Warchamp7 Warchamp7 force-pushed the transform-dialog-updates branch 2 times, most recently from f60e771 to acfe24a Compare October 31, 2025 02:35
@PatTheMav
Copy link
Member

I'm unable to replicate this. I do think the bounding box alignment widget was in the wrong order though, so that should be fixed after my next force push.

Still happens here: When I use to navigate through the items, it skips from the position alignment widget to the bounds alignment widget. This might also be related to native drop down usage.

I do believe this is a quirk of macOS native dropdowns. I think an easy way to test would be to try the ComboBox in the transitions dock which has the duration lineedit and buttons below it. Can you reproduce there?

Yep, though requires a bit more work as another widget needs to have input focus. Was able to reproduce this by having an active input for a scene item name and selecting a transition that was placed over the duration input field in the native drop-down.

I agree that this will be due to the interplay between the native interface element and Qt's "internal" widgetry though.

@Warchamp7 Warchamp7 removed their assignment Nov 17, 2025
@PatTheMav PatTheMav moved this from In Review to Requires Changes in OBS Studio 32.1 PR Considerations Nov 20, 2025
@Warchamp7 Warchamp7 moved this from Requires Changes to Ready For Merge in OBS Studio 32.1 PR Considerations Dec 16, 2025
@Warchamp7 Warchamp7 force-pushed the transform-dialog-updates branch 2 times, most recently from deb9a26 to cb83413 Compare December 16, 2025 22:06
@Warchamp7 Warchamp7 force-pushed the transform-dialog-updates branch from cb83413 to 785b9b2 Compare December 18, 2025 03:02
Copy link
Member

@RytoEX RytoEX left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit on container/QFrame naming.

@RytoEX RytoEX requested a review from PatTheMav December 18, 2025 20:36
@RytoEX RytoEX self-assigned this Dec 18, 2025
@RytoEX RytoEX moved this from Ready For Merge to Requires Changes in OBS Studio 32.1 PR Considerations Dec 18, 2025
@Warchamp7 Warchamp7 force-pushed the transform-dialog-updates branch from 785b9b2 to 16ae724 Compare January 6, 2026 21:43
@Warchamp7 Warchamp7 moved this from Requires Changes to Ready For Review in OBS Studio 32.1 PR Considerations Jan 6, 2026
@RytoEX RytoEX merged commit 6fa1a35 into obsproject:master Jan 9, 2026
15 checks passed
@github-project-automation github-project-automation bot moved this from Ready For Review to Ready For Merge in OBS Studio 32.1 PR Considerations Jan 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Seeking Testers Build artifacts on CI UI/UX Anything to do with changes or additions to UI/UX elements.

Projects

Status: Ready For Merge

Development

Successfully merging this pull request may close these issues.

3 participants