Generalized "Pop-up Widget" Concept
Open, Needs TriagePublic

Description

Proposal:

Krita's unique "Pop-up Palette" is a well-designed and popular feature for giving artists quick access to many of the controls that they need while painting.
Not only is it one of Krita's stand-out features, I'd argue that it has a design that works well with both classic desktop and modern touch interfaces.
And, now that Krita is exploring the possibility of expanding onto mobile platforms, that design philosophy is something that's only going to become more valuable over time.

https://docs.krita.org/en/reference_manual/popup-palette.html

However, one of the limitations of the current implementation is that the Pop-up Palette is really designed with painting, and the Brush Tool, in mind.
And yet, more often than not, regardless of which tool the artist is using (from the Move Tool, to the Shape Tools, to the Color Picker Tool, etc.), the Pop-up Palette is what they see when they right click.
Only the tools that provide a traditional right-click context menu show something other than the Pop-up Palette. While it's not a problem, I think there is unrealized potential here!

So, for Krita 5, I'd like to propose that we generalize the concept of a "Pop-up Widget" for all of Krita's tools.

In effect, this means making some minor changes to Krita's Tool classes while designing and implementing various pen/touch-friendly utility widgets for each different tool.

Technical:

Off the top of my head here are some of the small things that would need to change.

  1. Replace virtual QMenu * popupActionsMenu with virtual QWidget * popupWidget in KisToolBase and the KisToolProxy.
  2. Replace KisShowPaletteAction with KisPopupWidgetAction.
  3. Move the Pop-up Palette and existing menus over to the new system, for the time being.
  4. Design and implement new pop-up widgets for each of our tools. (Not a small thing actually!) ;)

(Outside of the design of the new widgets, which we can gradually introduce, I don't expect any of the underlying changes to be too difficult, so the initial setup for this could be a junior job if someone wants to do it.)

emmetoneill renamed this task from Generalized Pop-up Widget to Generalized "Pop-up Widget" Concept.Sep 24 2020, 1:47 AM
emmetoneill updated the task description. (Show Details)
emmetoneill updated the task description. (Show Details)
woltherav added a subscriber: woltherav.

This could be a good way to also, for example, make the alternative transform tool options (so beyond the free transform) more discoverable.

mwein added a comment.Oct 2 2020, 2:07 AM

Since Wolthera added me as subscriber anyway, it just came to my mind again.

I just added a reference image to a document, and realized that it's not very nice how the functionality is split between right-click menu and tool options docker. Specifically, you can't even add an image without going to the tool options.
Even with the larger monitor (1440p since my 1080p one died recently), I just find it a waste of space to have the tool options docker always visible, so everything that helps reducing docker tab clicking is a win for me.

Though I'm not sure if I can agree with "Design and implement new pop-up widgets for each of our tools" being a "small thing", I didn't really have too much success figuring out improvements to the popup palette that people actually would want to use, so it's catching dust in some corner...

emmetoneill updated the task description. (Show Details)Oct 26 2020, 3:26 PM

Yeah, that's totally not a small thing. But! It's something that we can probably take slowly while playing by ear.

I will comment only on a technical part of the proposal:

  1. Replace virtual QMenu * popupActionsMenu with virtual QWidget * popupWidget in KisToolBase and the KisToolProxy.

Handling menu popups is very different input-wise. So I would recommend to keep both methods. Just to make sure that popupActionsMenu() is called first, and only if it returns null, then call popupWidget(). That is something we do now. This way you'll avoid handling menu popups manually and let it be done by Qt.

  1. Replace KisShowPaletteAction with KisPopupWidgetAction.

Perfectly fine