Playing with Paint.NET v3.20’s new Property System

I’ve finally settled on the framework code for this new property system and automatic UI generator, at least with respect to Effect configuration dialogs. The beauty of this new system is that it literally only takes me about 5 minutes to convert an effect from the old system to this new system. And, from there, I can experiment with adding, removing, and tweaking properties at a very quick pace.

For example, tonight I went and upgraded many of the effects that come with Paint.NET. For most of them there won’t be much of a difference, such as Add Noise: it’s just two Int32-based sliders. But, for others …

Tile Reflection (v3.10 versus v3.20)


Zoom Blur (v3.10 versus v3.20)



The difference can be quite pronounced. I don’t have to write much code for any of this! Most of the work in these new dialogs is in making sure that the text resources are still loaded properly. I think this will be of great benefit for plugin authors, as it will allow them to use a much more versatile set and quantity of rendering properties, without having to resort to clumsy UI and data binding code.

7 thoughts on “Playing with Paint.NET v3.20’s new Property System

  1. AsyliumQc (PineappleQc) says:

    Hurray for better effects and plugins!
    I can’t wait for 3.20 😉

  2. Rick Brewster says:

    Adam, old plugins should still work fine. The new effect/property system builds on top of the old system, it doesn’t replace or subvert it.

  3. Kris Vandermotten says:

    Some effect plugins have quite a few parameters, and it seems you’re making it easier to add even more (like your Zoom Blur). Don’t get me wrong, I think that’s good. But would it be useful to have the possibility to have “advanced” parameters, that require a button click to show up? Maybe even tabbed dialogs?

    Anyway, this looks interesting, but it’s also important to get it right. Will you be releasing an “alpha” to plugin developers?

  4. Rick Brewster says:

    Kris, I’ve never been a fan of “advanced” tabs or check boxes for simple stuff like an effect dialog. It just makes it that much more annoying to get to those settings, *or* I have to write plumbing code to ensure that the state of that checkbox is remembered. And if there are 10 dialogs with an “advanced” checkbox, then you have to enable it for every one (very annoying), or I have to remember it globally across all of them (counter-intuitive). The simplest approach, for both user and me (the developer), is to just decide the feature or “skill” level of a piece of UI and stick with it.

    As for tab pages, the UI generation code is flexible enough to allow adding this capability in the future if I don’t get to it for v3.20. I’ve seen some of Ed Harvey’s effects using this type of UI and it seems to work well. I’m definitely inclined to enable as many plugins to be ported to this system as possible (key word being possible — doesn’t mean everyone is required to or anything).

Comments are closed.