"Prefer dark panels" proposal

We are considering adding a Rack feature that allows users to request modules to use dark panels if available by clicking “View > Prefer dark panels”. (Alternative name “Use dark panels if available”.)

Plugin developers can add a dark SVG panel to their res/ directory and load it with

setPanel(createPanel(
	asset::plugin(pluginInstance, "res/ADSR.svg"),
	asset::plugin(pluginInstance, "res/ADSR-dark.svg")
));

This uses a new ThemedSvgPanel class which observes the new bool settings::preferDarkPanels global variable.

You can also create themed screws with

addChild(createWidget<ThemedScrew>(...));

Modules that do not include dark panels will not be changed when the user enables “Prefer dark panels”.

What do users and plugin developers think of this proposal?

32 Likes

I love the idea of this being a feature for users and as a plugin developer it would help me select a good default when a user starts our plugs.

As far as implementation proposal: for my module collections the dark theme is not just in the SVG but also in colors, lights, and more. While I suppose I could poll the global variable in ::step and react accordingly, have you considered also adding a module event like onStyleChanged or some such? Or would that be an abi concern? But I think a developer option which is a best practice for folks who are not just or predominantly SVG based would be good.

Finally when I scan modules some have light and dark, but others have a variety of color schemes and have rolled their own approach. Surge is in this camp. If rack had this feature I would use the user setting as a value if the user hadn’t specified a choice but still allow overrides. I don’t see any problem with thst but wanted to see if that is what you’d expect.

Thanks for asking the community for feedback and considering this feature.

6 Likes

Great idea!

I think it needs a bool like APP->window->preferDarkPanel so that module-widgets can quest the status in its draw() methods.

And I think it also needs a short ‘guideline’ that defines the term ‘dark’. In my case, I would not re-color my modules in black, I would use dark green instead.

2 Likes

i would ab-so-lute-ly love this!

Are you considering a complementary “prefer light panels” option as well?

7 Likes

Correct, we can’t change the Rack plugin ABI in minor versions.

1 Like

What’s wrong with settings::preferDarkPanels?

If settings::preferDarkPanels is false, all modules with a light and dark panel should use its light panel.

2 Likes

Sorry, haven’t seen that it’s global.

Great you’re considering this Andrew! BTW - love the look of those dark VCV panels.

Ah, so then the current arrangement (where each module picks its own default light/dark) would no longer be something the user could pick. Is that correct?

I’m not saying that’s a loss or anything, I just want to be clear that the new system effectively forces users to pick between light and dark themes. Is that the intent?

Ok so basically currently we often have a pattern:

Theme → Dark, Light

Default Theme → Dark, Light

in context menu, so the latter could be removed (as inferred from global setting), and the former picks up global setting as default for new instances, but respects user choice if manually selected?

1 Like

I don’t need a global panel setting - It’s a simplifation, that might discourage developers making a multitude of panel themes. (Surge XT, Venom and others). And put pressure on other developers to waste energy making both dark/light versions of their panels.

I prefer to set any panel options locally in each module right-click menu. It lets me chose different looking modules in a patch. If a module has a mostly dark grey and a mostly black graphics, which one is the “dark” panel.

I welcome dark VCV panels.

2 Likes

I’m not sure what you’re talking about.

That seems like a crazy amount of work. It doesn’t seem useful for users to selectively mix light and dark panels. I’ve never seen someone specifically attempt this with their Eurorack collection.

2 Likes

That would suit me better.

Would this feature also affect the appearance in the module browser? I don’t know how many times I missed finding a particular module because it showed the dark version instead of the light version which I prefer.

1 Like

I have 5 “ornament and crime” - they run different MCU’s (and firmware). I turned the panels on the ones that run “sqares and circles”-firmware, to be able to tell them apart from the ones that run “hemisperes”. The panels are black one one side, and aluminium on the other side.
It’s an amount of work to flip the panels, yes.

2 Likes

I think it would be great to have a global menu item “View > Prefer dark panels”, and if a plugin developer wants to give the user the freedom to choose different panel colors for individual module instances, this should be accessible from the module’s right-click menu.

For plugins with more than 2 panel color options, I think the module instances should provide a choice to set the color that will be displayed with “View > Prefer dark panels” = true, and also the color that that will be displayed with “View > Prefer dark panels” = false.

6 Likes

As a user, I think there is clear benefit, so I approve.

As a developer I can see how the proposal would work with my plugin, it wouldn’t be too difficult to integrate.

IMO a method to override for when any rack settings change (like onSampleRateChange) would be much better, is this something you will consider for the next major version?

This seems to be the way a lot of apps are going, with support for dark/light UI, do you intend to have dark/light for the entire app at some point, and will it default to the OS dark/light setting (if it exists)?

My one concern would be that too many of the 3rd party plugins (including commercial ones) would be left behind because the dev doesn’t have the ability to update immediately. So although I think there is clear user benefit, for a user with many 3rd party plugins, the experience might be sub-optimal.

Is the global bool read-only, or could a module (such as my BrightIdea) modify the setting?

Would this require any module developers to change code? In my case, I have a light and dark SVG file, but those are used strictly as the panel background color. I also have light and dark PNG files that are used for rendering the panel while in the browser, but otherwise, my panels are generated procedurally in light or dark themes along with a contrast setting.

Sorry if you answered this here in some way and I missed it.

Edit: Oh yeah, my light and dark SVG files also determine the panel dimensions in addition to the background color.

1 Like