The week 35 started with fixing issues in paintops, which occurred when I merged some brush engines. I fixed deserialization in the presets, I cleaned some code in the mask generation code and I commited the presets which mimics the merged brush engines. They are now installed with Krita. The merged brush engines are now removed, you need to clean your installation directory to see the effect.
In the last minute (feature freeze in KOffice trunk currently) I also worked on small feature, which improves usability and I called it dynamic outline. We used to have static outline of the brush, but when you rotated the brush or scaled it, the outline was still the old one. I made it dynamic. If any sensor or tablet changes dynamic attribute of the brush through the stroke, it will be shown in the outline (scaled, rotated).
Then I started the work on bug 217124. It’s quite complex bug, so I’m still working on it. But I have first results. I fixed deform brush, so now deform moves the pixels correctly when you are in COPY composite mode. The price is that deform is now little slower. I added benchmark to see what is happening. I will optimize it a little, but later. When I was on deform brush, I fixed some UI stuff like using the new slider we have in Krita.
I spotted some problem with Line tool not setting the background color for the paintop, I fixed it.
Some testing showed some problems with outlines (deevad reported it, thanks). I was fixing some offset issues. When I was on it, I improved the performance a bit. We converted the polygons to the QPainterPath every time we draw the outline, so I cached it now and it is converted only once.
Then I fixed 247835. Hairy brush now paints correctly with predefined brushes. It also brought some speedup, and cleaner&clearer code. I think the performance was improved by not copying some big arrays there. It was my very first code I wrote for Krita.
Then I continued on the bug 217124 . I implemented Multiply composite op for alpha colorspace, which is needed for merging the selections. Merging selection was also fixed in KisPainter, first by our GSoC 2010 student, Pentalis. I benefited from his code and I based my fix for different method on his approach but because I had multiply composite op, I changed the code, so that it includes less copying and improved the performance.
Next task was adding the selection awareness to composite called Copy. This composite operation mix the pixels in a way where the destination pixel is overwritten with source pixel. But the selections were ignored. I implemented basic version, which I need to be able to fix the bug 217124 with basic formula and Cyrille Berger implemented the formula he suggested and which is somehow more complicated and require some template foo. When I was at it, I noticed infinite loop in Composite Copy. Fixed. I prepared also unit test which tests if the infinite loop will occur and also if the mask is respected in the simple formula.
Krita has now 2 community sponsored developers. Me and Dmitry Kazakov. Check out our III. generation plan. Back to making Krita best application of the year 2011 2010!