Changing KiCad theme

Hi,

I came across the .json color theme files and they work great. I was wondering, is there any way to change the color of the remainder of the KiCad window? The “windows shell” looks a bit dated. Where would I need to start if I wanted to change the way the icons/taskbar/window color etc. look? I want to make it look like the VSCode/Visual Studio shell.

It’s not possible from KiCad. KiCad uses the underlying system’s theme so you can try that. There will be an icon theme for dark background.

So far it seems that on Windows 10 KiCad ignores the “Light/Dark application theme” setting, and always runs with Light theme.

This is a limitation of wxWidgets, the GUI toolkit that KiCad uses. In future versions we’ll be able to pay attention to the system theme on Windows and Mac to some extent (currently it only works on Linux)

Is there a way to force wxWidgets to use dark theme instead of relying on OS defaults?
Maybe it could be implemented as an “Appearance” preferences for KiCad?

You can manually recolor controls, yes – but we don’t want to do that if at all possible. There is lots of opportunity for inconsistencies and bugs. Some controls can’t be recolored properly in wx3.0, so if we tried to do this now we’d be left with people reporting bugs that not everything was following the “theme”.

(to be clear, there is not really a “theme” – you would have to manually set different background and foreground colors to every part of the UI. a big headache)

I did not mean “manual recolor”, that would be too time-consuming.
I just thought that the issue is wxWidgets does not follow OS settings, and there could be some parameter that switches these to the alternative mode (kind of “force” settings).
But now it seems to me that the alternative theme is not supported at all by wxWidgets on Win.

No, unfortunately there is no switch to turn on and make it work properly.

Windows is particularly hard because Microsoft introduced a new “dark mode” system recently in Windows 10, but there is still no public API for it. So it is hard for people developing outside Microsoft’s ecosystem to take advantage of this right now. You have people making third-party libraries to try to make use of it, but there’s no guarantee of stability with this approach.

1 Like

Heh MS to all it’s extent :slight_smile:
Sometimes I have the impression that some parts of the GUI were hard-coded in some low-level binaries. From time to time some basic (win-98 times) UI elements appeared from under their own skins (XP, Win7)…

That’s because Microsoft’s primary mantra is compatibility. Windows 10 can run Windows XP applications purely because they left the APIs and even GUI elements in place. So there’s no need to need an team of programmers constantly recompiling old software for a new OS version like is required on Linux. Even changing GUIs can cause havoc for the program and end users (why retrain users, thats costs money, time and mistakes?), that’s why its all been kept the same.
Just newer applications just use newer APIs and newer GUIs.

You may see some of those old controls peek their heads in kicad only because wxwidgets is pretty damn old and actually used those old APIs as well and was never updated in a few places (though it is slowly)

No. This is a win32 limitation. wxWidgets does not render the controls. Windows does.
Microsoft does not support dark mode in win32 applications. Only in UWP/WPF applications which we will never be able to do without also becoming purely a windows only application (it is not cross platform)

Though I will say it is possible with wizardy that isn’t possible to make part of kicad without dropping MSYS2 and switching only to MSVC builds.

1 Like

I mean that even UI primitives (like window decorations, scrollbars, buttons) were sometimes different from what the GUI offered. This was visible clearly in XP, in less amount Win7 and progressively better in the 10.

An API should take care of that, even if you make a call to old functions. I don’t mean complex GUI features like file open dialogs which require higher revisions of API to work with.

With wxWidgets it’s clear to me now. IMO no point in putting any serious effort to get this working, especially if the end result would be far from polished. I can now see that even MS people have issues with make the internal Win32 based apps (non-UWP) look good in dark mode… Must be the compatibility vs features thing.

Nope. It is quite dangerous to change GUIs like that. You never know as an OS developer, what ridiculous behavior either documented or undocumented an application developer used.
Our commerical $$$$$ ERP broke on a Windows 10 update because the ERP vendor decided to use a kernel memory hack to inject bitmaps into menus their way. And Microsoft made a general kernel memory security improvement which broke that unintentionally.
Linus has similar rants about people proposing user space breaking changes for Linux :wink:

I can make it look much better, I just got lazy after getting the basics working because I wasn’t going to merge it anytime soon due to the dropping of MSYS2 requirement.

OT: that’s a clear indication the approach of your ERP guys is amateurish at least: to risk business continuity with an undocummented hack, to offer a nuisance feature.
The breaking patch could come with an OS update, not necessarily new OS version.
It’s not C64 times anymore.

We didn’t write the ERP (making one would be a mistake in of itself)
It’s from a multibillion dollar vendor.

0000000000000000000000000000>WTF is ERP ?

By “your ERP guys” I meant those who delivered you the ERP system, and not necessarily people from your organization.
@Russ ERP = Enterprise resource planning, the IT backbone to businesses.

Isn’t that where things are heading (i.e. switch to msvc) due to python3 and wxpython not working on msys2?

@qu1ck There are now some msvc based build available for testing at https://kicad-downloads.s3.cern.ch/index.html?prefix=windows/testing/

2 Likes

That’s a real shame though :grin: :grin: