Paint.NET v3.5.2 is on the way – Better font support for Win7/Vista

While I’ve mostly been taking a break from working on Paint.NET in the short term, I have been slowly working on the next minor bugfix release. The biggest change will be with how fonts are handled with DirectWrite, for all Windows 7 and many Vista users.

GDI and DirectWrite differ in the way they organize the available font families that are installed. For example, DirectWrite (and WPF and CSS) list the “Arial” font family, and include “Arial Narrow” and “Arial Black” in that bucket. You can choose those variants by varying the Weight, Style, and Stretch that you request. “Arial Narrow” would be selected by asking for the “Arial” family, and a Stretch value of “Condensed.”

GDI, however, lists “Arial Narrow” and “Arial Black” separately. This is the organization model that most software in Windows follows, starting with Notepad and going all the way to Word. Once you’ve chosen the font family, you use toggle buttons for Bold, Italics, Underline, and Strikeout. It’s a fairly simple model, and even more important is that it is well understood and people are comfortable with it.

Paint.NET now uses DirectWrite when it’s available, on both Windows 7 and Windows Vista. However, due to time constraints, the font family list is presented as-is, with no way to select font faces like Arial Narrow, and no way to configure the Weight, Style, and Stretch properties. In effect, Arial Narrow is unavailable, or “missing”.

The other difference is that DirectWrite does not handle bitmap fonts. This includes old staples like Courier, Terminal, and Fixedsys. These are of limited use in UI nowadays, but can be fun when doing image editing for certain stylistic reasons. Maybe you want to make a funny image with a talking robot, and using a font that looks like it came from a Commodore 64 helps out a lot here. Again, due to time constraints, this missing feature of DirectWrite is also projected directly into the feature set of Paint.NET.

So, I’m happy to say that in the upcoming Paint.NET v3.5.2 will “fix” all of this. For the technical minded, this is actually three fixes. The first is that Paint.NET will always ask GDI for the list of installed fonts, instead of DirectWrite. This ensures that the list in the toolbar includes Arial and Arial Narrow, etc. Second, the initialization code for the font renderer now has a fallback whereby if it asks for “Arial Narrow” and DirectWrite rejects it, that it will then ask DirectWrite to interpret it as a GDI font name (it uses CreateFontFromLOGFONT).

Third, if DirectWrite still refuses to accept the font name, then GDI will be used as an ultimate fallback renderer. This last change actually serves two purposes, the second one being an accidental but helpful corollary. First, it enables bitmap fonts in Paint.NET again. Second, there are many cases where DirectWrite has more strict error handling than GDI, and this has resulted in crashes for some users with some fonts. Now instead of a crash the user will either get GDI to render the font correctly, or GDI will render some generic substitution font like Arial. Neither is optimal, but both are highly preferable to a crash or error message.

A silly robot picture using bitmap fonts, with Arial Narrow highlighted in the font list

Other changes in Paint.NET v3.5.2 include a fix for a nasty memory leak, some bad text kerning when antialiasing is disabled, and some other functionality glitches that crept in.


Windows Vista users … why haven’t you installed SP1 or SP2?

I had a blog post earlier asking why some users had not installed SP3 for XP.

Anyway, the question here is similar: For those users of Windows Vista who haven’t installed SP1 or SP2, why? I receive many crash logs where the user is still on Vista “RTM”, and I can’t think of any reason for someone to be two service packs behind in their updates. For the upcoming v3.5.2, I plan on adding telemetry so that I can get real numbers on this, similar to how I am able to get statistics on OS version, CPU bitness, and locale.

In fact, there are two questions…

  • For those who are still on Vista “RTM”, why are you two service packs behind?  Why haven’t you installed SP1 or SP2?
  • For those are are on Vista SP1, why haven’t you installed SP2?

Part of the reason for asking this question should be obvious: I want to require SP1 (or even SP2!) as a minimum for Vista users (this would not affect XP users). This will reduce my test matrix, and give me more time for other things (like new features, and drinking beer).