Coming in 4.0.20: Dark Theme

It’s been about 2 months since 4.0.19 was released, and I wanted to share what I’ve been working on for the upcoming 4.0.20 release.

First, there is the usual bag of bug fixes and minor improvements. I’ve also focused on fixing up a whole lot of lingering issues for high-DPI, especially at 200%+ scaling which is becoming more and more important. I’ve got my own laptop with a 4K screen now, so this is much easier for me to hack on.

The layout in Paint.NET is generally pretty good about accommodating high DPI, but there’s still some areas that are scrunched up in ways that reduce usability (like the toolbar!). Outlines for highlighting selected items like menus, images, and layers are also being improved so they scale with DPI. And there are some UI surfaces that are just totally broken, like the dialog box for saving a palette, and parts of the Levels adjustment dialog.

I’ve upgraded the shell extension so that it can now provide thumbnails for TGA and DDS file types. This takes advantage of the recent upgrade (in 4.0.18) to the shell extension that allows it to run out-of-process, which means I can now host the .NET runtime and use the “real” code that Paint.NET already has for loading TGA and DDS images, and for resizing them down to thumbnails.

But, last and most prominently, Dark Theme! (wubba lubba dub dub!)

This screenshot also illustrates some of the improvements in High DPI support for the main window. Namely the thicker highlight outlines, and de-claustrophobization of the toolbar and other areas.

I resisted implementing better theming support because I was sure that the amount of work just wouldn’t be worth the payoff and that it would introduce a large number of really annoying bugs, and that it would be an ongoing engineering tax. But now that Windows 10 has a built-in Light/Dark theme selector, and since I’ve been getting a steady stream of requests for it, it’s now clear that it’s worth the effort. Plus I get a lot of value out of Visual Studio’s and IntelliJ’s dark theme support, which has also helped to convince me.

And it has been a lot of effort to get this working with a legacy WinForms codebase! Every single UI control has needed its own special coddling to support background and foreground color changes, both statically and dynamically. After over a month of working on it in my spare time, I’m getting close to finishing it and can hopefully push it out the door in time for Christmas.

By the way, Dark Theme will work on Windows 7 as long as you are using Aero, but it won’t work with Classic. On Windows 10, as long as you have the Color Scheme set to Default within the app, Paint.NET will automatically switch between Light and Dark based on what’s chosen in Windows 10’s Settings.