So I started a small crowdfunding for mirror painting in GIMP some time ago. It took some time since I had other priority (like our ZeMarmot film project) and my only time restriction was to get it out before GIMP 2.10 is out. And I knew it would take some time anyway.
Also I wanted to do things well. I know that some people were complaining that I could already release the code from the early demo I showed a video of, long ago. But seriously this was horrible crappy broken code. As a developer with some self-respect, I would never release such a code publicly, which was clearly done only to give an “idea” of what it could look like, not for solid code base of a good application.
Well I finally reached this state of a solid code base. I actually saw very quickly the need for something much more generic than just “mirror” painting. So I implemented what I called a generic “Multi-Stroke” feature, though Mitch did not like this naming at all and proposed to just call it “symmetry” (which I, in turn, don’t think defines the feature well, since it allows more than only symmetries, but well…). Basically from a single stroke coordinates, a “symmetry” would outputs 1 or more strokes (at different coordinates, but also with optional brush transformation too, using the new GEGL engine of GIMP).
With this base feature, which takes most of the code, I implemented the originally funded mirror symmetry, as well as a rotational symmetry, and a tiling symmetry (once the base code is there, adding any kind of “symmetry” is just a matter of minutes).
Well a video is worth any words. So here is the current state of the code:
For those who are interested into the resulting code or want to test, it is available publicly in a branch (hopefully soon to be merged to master): https://git.gnome.org/browse/gimp/?h=multi-stroke
Probably the next step of such a feature would be to have an API to allow plug-in developers to easily implement their own symmetries. I believe this would not be very complicated to implement too.