Paint.NET v3.5 Beta 3 (Build 3572) is now available

This update is focused on fixing a lot of small issues, ranging from performance to selection clipping. The full changelist, as usual, is over at the forum. Of note, the compression for .PDN files has been improved. For the tech-minded, I switched from the .NET-supplied GZipStream over to SharpZipLib’s GZipInputStream and GZipOutputStream.

At this point, the bar for fixing a bug is quite high. I’m waiting for a few translations to be finalized, but other than that the only bugs I plan to fix are for crashes and data loss.

If you’re seeing a bug that still hasn’t been fixed, and you haven’t reported it, then you should report it. Please don’t assume everyone or anyone else will see it too. I once had someone, after the v2.1 release, post on the forum that some bug still wasn’t fixed after the betas. I asked him if he’d ever reported it. “No, I just assumed you already knew about it.” Well, I didn’t – it was an obscure issue where some ATI multimonitor utility would get confused and force all of Paint.NET’s tool windows to be the wrong sizes. (The fix was actually to delete the ATI utility – honestly, they aren’t necessary after Windows 98 anyway.)

Paint.NET v3.5 Beta 2 (Build 3561) is now available

This update fixes a whole swath of small issues, and even a few larger ones. The full change list is at the forum. As usual, you can either download it over at the forum, or use the built-in updater.

For those new to Paint.NET v3.5 with Beta 1, this is your first chance to try out the new background updater – you can have it download the update without sitting around and waiting for it as a foreground task!

Of note, there’s a new option in the Window menu called “Glass Dialog Buttons.” I really like the glass footers for dialogs and don’t want to give them up, but just enough people have expressed a strong dislike that I decided to make it an option.

Paint.NET v3.5 Beta 1 (Build 3550) is now available!

It’s finally time for the beta, which means things are mostly done and stabilization is now the highest priority.

Go download it at the forum, or get it via the built-in updater from any Paint.NET version. Make sure “Also check for pre-release versions” is enabled – you can ensure this by first clicking Check for Updates (from the Help or Utilities menus), then clicking the Options button.

This beta is the first to include the newly refreshed user interface, with new icons and enhancements for Aero and “glass” (Windows 7 and Vista only). Here’s a taste of that:

(Click for full-size version.)

You can get the full changelist over at the forum.

In addition to the glass in the image thumbnail list, I have added it to the footer of many dialogs. This includes the setup wizard, and dialogs for File->New, Image->Resize, Image->Canvas Size, Choose Tool Defaults, Save Configuration, Layer Properties, Rotate/Zoom, all IndirectUI-based effects (both built-in and plugins), and Help->About.

Here’s a little preview of that:

(Click for full-size image.)

Please note that if you are using the “Windows Classic” theme, or if you are running Windows XP, then Paint.NET v3.5 will look mostly the same as Paint.NET v3.36.

Also, there are some languages for which the “glass footers” will not be enabled. These include Japanese, Chinese, and Korean. The reason for this is purely technical – the text for the buttons does not render correctly. It appears that GDI+ is actually passing through to GDI when rendering those glyphs, and that causes the alpha channel to be overwritten and the text is illegible.

Paint.NET v3.5 now enhanced for Windows 7 with DirectWrite

The latest alpha build of Paint.NET v3.5 will now use DirectWrite instead of GDI for the Text tool if you are running Windows 7. Get it while it’s hot: http://paintdotnet.forumer.com/viewtopic.php?f=46&t=31132

DirectWrite is a new font and text rendering system that comes with Windows 7. In Paint.NET, you’ll see the following benefits:

  • Faster text rendering. This is currently due to important architectural differences from GDI. With DirectWrite, I can render using multiple threads (performance scaling), while also not blocking the UI thread from drawing (mutexing). GDI can only render text on 1 thread at a time, and that also includes the thread responsible for the UI. DirectWrite can also benefit from GPU acceleration when things are set up correctly with Direct2D (Paint.NET only uses the software rasterization capabilities right now, but in the future who knows!).
  • Better quality text rendering. DirectWrite implements what is called “y-direction antialiasing”. The short story is that GDI apparently only does antialiasing on the horizontal axis. It can also position characters with sub-pixel accuracy … in other words, GDI uses integers and DirectWrite uses floating point.

When it comes to performance you can see the difference just by opening Paint.NET, switching to the Text tool, and clicking on the font list dropdown. In GDI you’ll see the font previews slowly trickle into view, and scrolling can get laggy and “stalled” (the difference is very pronounced if you have lots of fonts installed – I have over 2000 on my system). With DirectWrite it’s nearly instantaneous and also very zippy when scrolling. If you type many lines of text onto the canvas, Paint.NET will use up to 1 thread per line for rendering (capped by the number of cores your CPU has), and on a dual- or quad-core system the performance benefit can add up. Systems with more cores/threads/CPUs will see the most benefit for both scenarios (yes, HyperThreading helps).

I tested on a 3.6GHz Core i7 and a 1.6GHz Atom. On both systems, DirectWrite was a big performance improvement.

Also, you can turn off DirectWrite in Paint.NET by launching the program with the /disableDirectWrite command-line parameter. This is quite useful for comparing the two renderers. If you don’t know what a “command-line parameter” is, then don’t worry about it 🙂

Thanks go out to Dwanye Robinson (at Microsoft) for helping out.

Paint.NET v3.36 is now available!

This is mostly a servicing release to make some small improvements and to fix a few important bugs.

You can get it via the built-in updater by going to Help -> Check for Updates, or by going to the website: http://www.getpaint.net/

Enjoy!

List of changes:

  • Improved: Effect rendering should be a little faster now.
  • Changed: Implemented some changes to the "Add Noise" effect that were suggested by a forum member.
  • Changed: The canvas background color is now always #c0c0c0.
  • Changed: The auto-updater should now correctly detect .NET 3.5 and newer, which will help to save bandwidth when Paint.NET v4.0 is released (it will require .NET 3.5).
  • Fixed: Paint.NET now works on a system that has the .NET 3.5 SP1 "Client Profile" installed.
  • Fixed: When zoomed in and the cursor is to the top-left of the image (negative coordinates), the ruler is now highlighted in the correct area. Fixed: The effect rendering system no longer sets the "Tag" property on the configuration dialog.
  • Fixed: Some incorrectly authored plugins would cause a crash when loading their support details (author, copyright, etc.).
  • Fixed: There was a bug in the color wheel for IndirectUI that caused it to show the wrong values at initialization.
  • Fixed: There was a performance problem for effects that used the IndirectUI color wheel control.
  • Fixed: In some rare cases, Paint.NET would crash while shutting down.
  • Fixed: When using the "Fixed Ratio" feature of the Rectangle Selection tool, it would crash if 0 was specified for both the width and height.

The Second Paint.NET v4 Screenshot

Like I said before, the first concrete work I’m doing for Paint.NET v4 is focused on the installer and updater. A lot of people have told me that they use Paint.NET infrequently, or that when they start it up they "just want to get something done really quickly." Updates really get in the way of that, and people are starting to get used to Firefox’s ability to install an update after you’ve finished your current session. As a result, many people are still sitting on old versions of Paint.NET. Bummer 😦

Paint.NET v4 will support this:

I’m choosing to not have a "cancel" or "do not install" button in order to better encourage (trick?) people into installing the update. However, it’s still possible to skip out on installing the update … just click the ‘X’ in the top right corner.

The wording and graphics are still first draft. I’ll probably want a separate button icon for each of them.

Unfortunately this all won’t be available until v4 ships … which means that a v3.xx -> v4 upgrade, which requires the installation of .NET 3.5 SP1 in many cases, cannot benefit from the more casual "install once I exit" option.

On another note, the "Optimizing performance for your system…" portion of installing, which uses ‘ngen.exe’ to precompile Paint.NET, is much faster now with .NET 3.5 SP1. I’ve also made the installer report real progress on this operation instead of using the "marquee" or "indefinite" mode.

Another thing I’m doing is implementing features in an order such that I could potentially ship a Paint.NET v3.50 from this codebase if I decided it was necessary. It might be a good idea to get .NET 3.5 SP1 installed on everyone’s systems sooner rather than later!

Paint.NET v4 takes a new, good turn (ixnay on the rewrite)

In my last post about Paint.NET v4, I said that I was going to be writing it "from scratch" — that it would be a rewrite from the ground up, in other words. I’ve since changed my mind.

You see, I got a few months into this rewrite project. I wrote a lot of code — 26,000 lines of it, in fact. However, the continually daunting task of finishing the next 150,000 lines of code and doing a reset on the 4 years of bug fixes in v3.xx made things … depressing. So, I’ve decided that I will turn back to the v3.xx codebase and work towards v4 from there.

However, don’t worry. The rewrite project, which is now called a "prototype," was not wasted time. I was able to work on and experiment with a lot of stuff in a nicely isolated fashion, and I now have a much better idea how I can refactor these into the existing [v3.xx] codebase. This includes some things for stuff like task management, extensibility, eventing, asynchronous programming, retained mode rendering, and an improved document model. This is actually a good example of quantity beating quality: by being able to iterate on all this enormous amount of code in isolation without the burden of the existing code base, I’ve been able to fine-tune it towards perfection.

In fact, I can’t stress that one word enough: depressing. Having 150,000 lines of code worth of work to do before you can even have something that’s feature parity with your already-shipping product, and that your users will even be interested in, is not fun. Next time you hear yourself thinking, "Rewriting this would be worth it," stop and switch over to thinking about prototyping in an isolated codebase instead of rewriting the existing codebase. I can write a lot of code really fast, and I like to think I’m very good at it, but this was just too much for me. Your code (and mine) may not be academic-proof or astronaut-quality, but that’s ok … because it already works.

Now, why don’t I talk some about version 4 itself and what’s happening.

The first features that I’ve been working on are focused on the installer and the updater. First, the installer will internalize the progress bar stuff — it will no longer have those annoying "child windows" for when it is installing things. For the update process, I am going to give a nod to Firefox and how it lets you install the update once the current session is complete. This is in response to a lot of feedback I’ve been getting from people who never install updates because they just want to get something done right now, and can’t be bothered to wait a few minutes for the update. It’s completely understandable — I do it myself. Changes to the installation and update code are always risky business, and as such I had been delaying these until I had a long, full test pass available (in other words, a major version update). And, to explain why they are risky business: if the installer or updater fails, then the user can’t use the product. Statistically speaking, they have disappeared from your userbase. They are gone. If your installer and updater work, then your Priority 0 feature is always making sure that it continues to work!

Oh, also, the installer will do a much better job of getting the .NET Framework installed if it isn’t there already. I’m taking advantage of the new Client Profile that’s available with .NET 3.5 SP1, and it rocks: it’s only about 300KB to include the bootstrapper!

This change of direction shouldn’t result in any lost or cut features. If anything it will dramatically shorten my schedule for v4. This is good news.

And in other news, expect a version 3.36 update once the Olympics are done. It will be a servicing release to fix some bugs, like the canvas background color one. I’ve settle on #c0c0c0, which is what Photoshop uses.

Paint.NET v3.35 final release now available!

This version has a new Posterize adjustment, Intersect selection mode, and dramatically faster selection editing performance (add, subtract, intersect). Oh, and the usual crop of miscellaneous bug fixes, of course!

You can get this update by using the built-in updater (Help menu -> “Check for Updates”), or by downloading it from the website at http://www.getpaint.net/ . The update process is very automated, so you won’t need to worry about uninstalling your old version or anything — it’s all taken care of for you.

Changes:

· New: Posterize adjustment, by Ed Harvey.
· New: Intersect selection editing mode.
· Improved: Dramatically improved selection editing performance for the Add and Subtract modes (and also for Intersect). The performance used to be dependent on image size, and thus was often unusable on images larger than 1024×768 pixels. It is now dependent only on selection complexity (number of polygon edges) — the improvement is generally between 3x and 1000x.
· New: When holding Ctrl or Alt for a selection tool, the cursor now has a plus or minus indicator.
· Changed: The canvas background is now a solid color instead of a gradient. The gradient was causing certain tone misjudgments related to bright versus dark colors.
· Changed: Shortcut key for Sepia is now Ctrl+Shift+E. The shortcut for Posterize is now Ctrl+Shift+P.
· Changed: Hotkeys for selection modes are now Left click for Replace, Control+Left click for Add (union), Alt+Left click for Subtract (difference), Alt+Right click for Intersect, and Ctrl+Right click for Invert (xor).
· Changed: When using a selection mode other than “replace”, it will now draw the selection outline so that you can see both the original and resulting selection areas. Before, it would only draw the resulting selection area outline, which made modes such as Intersect hard to use.
· Fixed: The Resize dialog had some rounding errors with the “Maintain aspect ratio” feature, which caused a few discrepancies and even a spurious “out of memory” error.
· Fixed: Some quirks with the Color Wheel control for IndirectUI-based effect plugins.
· Fixed: Several miscellaneous and rare crashes.
· Fixed: The installer would display a bizarre error if a “blank” install folder was attempted.
· Fixed: The installer now only accepts absolute path locations, instead of relative ones. This fixes an ambiguity between where Paint.NET believes it is installing itself to, and the directory that Windows Installer actually uses.
· Fixed: Sometimes pasting would result in a crash when certain types of malfored data were on the clipboard.
· Fixed: It was possible to get around some of the protections imposed by the IndirectUI system. This was causing instability with some effect plugins such as “Fern Fractal”.
· Fixed: There were some issues with the implementation of “linked” sliders for effects based on IndirectUI.

Enjoy!

Paint.NET v3.35 – Beta 2 is now available

This is a refresh of the beta with some good changes to the new features, and many bug fixes.

Please note that this is a beta, and expires in August. You can get it by downloading it from the website, http://www.getpaint.net/ (no need to uninstall your current version, it will figure it all out for you), or via the built-in updater. For the latter, go to Help -> Check for Updates… and make sure you are set up to receive betas by clicking on the Options button and ensuring that “Also check for beta releases” is checked. Then close the dialogs and click on Help -> Check for Updates… again.

Ok now that this is done I can get back to working on my blog posts about Fluent Exception Handling 🙂

Changes since Beta 1:

· Changed: When using a selection mode other than “replace”, it will now draw the selection outline so that you can see both the original and resulting selection areas. Before, it would only draw the resulting selection area outline, which made modes such as Intersect hard to use.
· Changed: The canvas background is now a solid color instead of a gradient. The gradient was causing certain tone misjudgments related to bright versus dark colors.
· Changed: Shortcut key for Sepia is now Ctrl+Shift+E. The shortcut for Posterize is now Ctrl+Shift+P.
· New: When holding Ctrl or Alt for a selection tool, the cursor now has a plus or minus indicator.
· Fixed: The Resize dialog had some rounding errors with the “Maintain aspect ratio” feature, which caused a few discrepancies and even a spurious “out of memory” error.
· Fixed: Some quirks with the Color Wheel control for IndirectUI-based effect plugins.
· Fixed: Several miscellaneous and rare crashes.
· Fixed: The installer would display a bizarre error if a “blank” install folder was attempted.
· Fixed: The installer now only accepts absolute path locations, instead of relative ones. This fixes an ambiguity between where Paint.NET believes it is installing itself to, and the directory that Windows Installer actually uses.

Paint.NET v3.35 BETA is now available

Alright, here we go again 🙂 This releases introduces a new Posterize adjustment, a new Intersect selection mode, and dramatically improved performance for selection editing.

Please note that this is a beta, and expires in August. You can get this by downloading it from the website, http://www.getpaint.net/ (no need to uninstall your current version, it will figure it all out for you), or via the built-in updater. For the latter, go to Help -> Check for Updates… and make sure you are set up to receive betas by clicking on the Options button and ensuring that “Also check for beta releases” is checked. Then close the dialogs and click on Help -> Check for Updates… again.

Enjoy!

* New: Posterize adjustment, by Ed Harvey.
* New: Intersect selection mode.
* Improved: Dramatically improved selection editing performance for the Add and Subtract modes (and also for Intersect). The performance used to be dependent on image size, and thus was often unusable on images larger than 1024×768 pixels. It is now dependent only on selection complexity (number of polygon edges) — the improvement is generally between 3x and 1000x.
* Changed: Hotkeys for selection modes are now Left click for Replace, Control+Left click for Add (union), Alt+Left click for Subtract (difference), Alt+Left click for Intersect, and Ctrl+Right click for Invert (xor).
* Fixed: Sometimes pasting would result in a crash when certain types of malfored data were on the clipboard.
* Fixed: It was possible to get around some of the protections imposed by the IndirectUI system. This was causing instability with some plugins.
* Fixed: There were some issues with the implementation of “linked” sliders in IndirectUI.