Skip to content

masks: redesign the mask panel header - #22655

Merged
TurboGit merged 1 commit into
darktable-org:masterfrom
masterpiga:flexi-icon
Oct 19, 2026
Merged

TurboGit merged 1 commit into
darktable-org:masterfrom
masterpiga:flexi-icon

Conversation

@masterpiga

Copy link
Copy Markdown
Collaborator

Summary

Rework the header to make more space for the icons and to provide a more distinctive look to the mask panel.

Utility module:

image

Docked on canvas (left and right)

image image

Embedded, expanded

image

Embedded, collapsed (on and off)

image image

Removed the module name. It was there to ensure that users are aware of which mask they are editing, but then it's not the mask panel's responsibility to ensure that the focused module is obvious.

Single-row layout, consistent regardless of where the panel is hosted and left-right symmetric. When embedded, the header now blends into the module background (so that it is clear that it is related to the module) and provides a more clear visual separation with modules below it, like the classic mask-type selector did.

Replaced on/off switch icon. The on/off switch uses the same 'domino' icon used for the toolbar, and shares the same language (filled and accented: on, outlined and dimmed: off).

Buttons behavior. "edit on canvas" and "solo edit" stay on the header without shapes, greyed out, instead of appearing with the first shape. While the module is off, the overlay and the eye are greyed out, and their shortcuts refuse with a message, since the center view does not render the module.

Code cleanup. The overlay button only displays the mask: the shift+click "color channel" view is gone, as parametric channels are visualized through a different code path now.

Referenced issue

N/A

Checklist

  • I have read CONTRIBUTING.md and the coding style.
  • I have not merged master into the topic branch.
  • The pull request is one logical change, and every commit compiles on its own.
  • I ran the relevant tests: unit tests, src/tests/integration/ where the pixelpipe is touched, or darktable-cli as a headless smoke test.
  • New user-visible strings use _(), new preferences are registered in data/darktableconfig.xml.in.
  • A RELEASE_NOTES.md entry was added (only needed if fixing an issue in a release). Do not reference GitHub issues.

AI assistance

Co-authored with Claude.

@TurboGit TurboGit added this to the 5.8 milestone Oct 17, 2026
@TurboGit TurboGit added scope: UI user interface and interactions ai:generated labels Oct 17, 2026

@TurboGit TurboGit left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I like it, I'll let some time before merging if some other devs want to report about their feeling.

@wpferguson

Copy link
Copy Markdown
Member
mask module

I find this disconcerting. At first glance it looks like the export module has masking.

I think it should just be named masking and conform to the existing look and feel of darktable.

@masterpiga

masterpiga commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

I find this disconcerting. At first glance it looks like the export module has masking.

🤣

By default, the mask panel is placed at the top when it's moved to the utility panel, where it looks less awkward.

Another consideration is that moving the panel in the utility panel is optional, so if someone chooses to move it and keep it there probably they are not too disconcerted.

But I agree that it does not blend (pun intended) well in the utilities panel. We could also keep the actual header with the icons below the expander. The downside is that all the actions would only be available when the panel is expanded. If you think that this is a reasonable compromise, I am happy to implement that.

@wpferguson

Copy link
Copy Markdown
Member

I would say put it at the bottom and just call it masking. That way everyone familiar with mask manager will look in the right place for it.


I tried separate mask module with not restricting darkroom to one module open at a time to see how the mask module handles it. It appears to go to the last "selected" module. I had 2 modules open, then scrolled to the first module I opened. I clicked on the mask module and the latest module that I had opened scrolled back into focus. I always use one module open at a time, so there wouldn't be any confusion about which module the mask module would apply to, but if you have multiple modules open in darkroom should we somehow show which module the mask module thinks is the target module?

@masterpiga

masterpiga commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator Author

if you have multiple modules open in darkroom should we somehow show which module the mask module thinks is the target module?

It was like that before this change. The main issue with that is that to do it properly the header would need two rows, one for the title and one for the controls. Otherwise, the label is generally unreadable, and therefore it only adds clutter and little value.

Or, the controls need to move below the header, as I suggested before. Also in this case, if the "masking" label is to be there, then two rows would be needed for the header.

Furthermore, as I explained in the OP, I think that it is a responsibility of the darkroom to make it inequivocabile which module, if any, has the focus. Currently it fails short of that. Themes can help with that (e.g., focused border options), and layout changes could further improve it. This is not just about the mask panel. There are many actions that rely on a focused module, so ensuring that the UI is very clear about it should be a UI core principle.

@TurboGit

Copy link
Copy Markdown
Member

Indeed when on the left panel it looks awkward. Maybe just add "masking" or "mask" in the module name in this case?

@anoderay

Copy link
Copy Markdown
Collaborator

The masking icon in the header is a great change. I think that if docked to the left panel it needs a written out name, too. Having just the icons as the header looks awkward in the left panel.

When embedded with the module I think the module header does need some visual separation from the module itself. Be it a fine line above or - similarily to the styling of the current masking setup - a slightly brighter tone.

Incidentally: Will there be another "styling"-pass? You asked for feedback on pixls some time ago but I just wanted to ask at which point you are in that specific loop; whether it makes sense to give feedback on the general styling at this point.

@masterpiga

masterpiga commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator Author

@TurboGit @wpferguson PTAL, now it's like this when hosted in the utility module:

Screenshot 2026-10-19 at 07 35 11

I moved all the action buttons on a separate row. Only the on/off toggle stays, and replaces the hamburger menu. The module is automatically collapsed and disabled if no module has focus.

Rework the header to make more space for the icons and to provide a
more distinctive look to the mask panel.

Removed the module name. It was there to ensure that users are aware of
which mask they are editing, but then it's not the mask panel's
responsibility to ensure that the focused module is obvious.

Toggle. The on/off switch uses the same 'domino' icon used for the
toolbar, and shares the same language (filled and accented: on, outlined
and dimmed: off).

Layout (embedded or docked): single-row layout, consistent regardless
of where the panel is hosted and left-right symmetric. When embedded,
the header now blends into the module background (so that it is clear
that it is related to the module) and provides a more clear visual
separation with modules below it, like the classic mask-type selector
did.

Layout (utility): Look more like a utility module. Wire the "reset"
button to "reset mask", and replace the hamburger menu with the "domino"
icon for on/off toggle. All other controls are moved to a separate row
below the header.

Buttons. "edit on canvas" and "solo edit" stay on the header without
shapes, greyed out, instead of appearing with the first shape. While
the module is off, the overlay and the eye are greyed out, and their
shortcuts refuse with a message, since the center view does not render
the module.

Mask display. The overlay button only displays the mask: the shift+click
"color channel" view is gone, as parametric channels are visualized
through a different code path now.
@masterpiga

Copy link
Copy Markdown
Collaborator Author

@anoderay Added a separator to the embedded panel as you suggested, using the same color used for section headings

image

Will there be another "styling"-pass?

Sure, there are no passes really, if you have suggestions for improvement go ahead.

Also, since the code is in master now, feel free to propose PRs.

@TurboGit TurboGit left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks!

@TurboGit
TurboGit merged commit 403638d into darktable-org:master Oct 19, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai:generated scope: UI user interface and interactions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants