Spray improvements

I spent a lot of time working on spray brush because it is really fun to improve it. After some time developing it I heard from enki, our great artist who is available for feedback, that he was able to do something with spray in a few seconds in a comparison doing the same thing with image hoses in GIMP. Great, I’m reaching my goal.

Last time I blogged about spray, it wrote about adding support for spraying bitmaps. Since then I have added more control to rotation of the particles which are sprayed from spray. The particle’s rotation follows the mouse position, can be rotated by random or by constant angle. And even you can mix it, so you can rotate partially random and partially constant and partially by following the mouse position. Almost every particle type (ellipse, rectangle, image) supports this expect pixel particles. It will be fixed by moving the pixel particle type to a different user interface so that the user is not confused.

Control of the particles

From the UI point of view there is a “keep aspect” button in the particle type setting dialog. When you change the width of the brush, the height is locked and changed according the aspect. Also the proportional setting has been merged into less UI components to make the dialog nicer.

The spraying area of spray has been improved. So far you were able to spray particles in circle and you were allowed to change the distribution of the particles to gauss distribution. Gauss distribution is nice, because it behaves somehow “naturally”. In spray more particles are randomly distributed around the center of the spraying area with this distribution. Common ANSI C command rand() distributes the numbers uniformly so every particle position should be distributed with the same probability. This is used when you don’t check gauss distribution in the spray UI.

Now I made it possible to spray in ellipsoid shape. And this brings new opportunities — I can rotate the area. On this picture you can see that I rotated the ellipsoid distribution of circle particles  in the “sun”. I used the circle tool, dabs of spray has been rotated. Then on the cloud you can see that particles are distributed in ellipse too. Rotation can be controlled manually by constant angle.

I added also few sensors called “Size”, “Opacity” and “Rotation”.The rotation sensor allows you to rotate the distribution by tablet’s tilt, pressure and by some funny attributes like time or drawing angle. The size sensor controls the size of the distribution area. Opacity controls the overall opacity of the single spray dab. The sensors are Cyrille’s idea and I’m trying to use it in my paintops, so that we have consistent UI and we share more code.

Another thing was exponential slider in kdelibs4.3. Now you can reuse bigger area of the slider for setting your preffered size of the brush.So far the slider has been linear. You move a little and you would end up with a size of 200px. Now if you move a little from e.g. 50px size, you get 70px and not 200px. You usually use smaller values often and only sometimes you want big brush with 1000 px width. Again Cyrille’s patch for kdelibs and implemented by me in Krita :) Spray has exponential sliders in UI for particle count and diameter. It is very nice and I consider it very usable.

I added many sliders to spray because David Revoy wrote me longer time ago that he prefers them with tablet. I added so many sliders that the UI is becoming very ugly, but useful!  My brush engines are becoming something like motor engines :) Just few folks around knows how to tune them because they understand them.. This is wrong of course. One solution is that you as user should get nice presets so that you don’t have to touch engine too much. You just fine tune size or rotation a little. That’s where it is heading now somehow. We will have a lot of presets for you when we implement presets saving/loading I hope.


There are some bugfixes also in UI here and there, chalk has been improved a little – ink depletion can be turned off. Opacity sensor has been added to chalk so you can control overall opacity with tablet and some minor fixes. So far so good. I plan to constantly improve digital painting in Krita.

More information can be found at our “commit-digests” Week in Krita at krita.org. See week 46, 47, 48, 49, 50 and soon 51. Nice read when you want to watch Krita development.


I have been in Oslo for KOffice sprint and it was wonderful. I had a lot of fun, meet other Krita hackers and we had nice discussions about Krita.I had a lot of fun with Jarek Staniek, the Kexi guy. Very nice man! He helped me to setup Windows development environment for Krita, but I failed somewhere and I did not find time to fix it and continue.I learned something about building API too. Oslo is nice place, but quite dark for me and quite expensive. I would like to thank Thomas Zander and Alexandra Leisse for the organization.

We started a campaign to gather money so that a member of Krita team can work full-time on Krita. I’m that team member :) I would like to thank every donor that you make this possible. Thank you! As you can see we are over goal, but you can still donate if you want.

I remember days when people put some money together to allow Blender being a open-source application and look where Blender is now – it is used by professionals. Now something similar can happen with Krita. We have a plan to implement and we think that it can make Krita very usable for digital painters . I’m looking forward to work on Krita full-time. Just few last exams in university in January and I’m ready to start to work.Keep the fingers crossed! I will keep you informed about the progress regularly.

Click here to lend your support to: Help raise Krita to the next level and make a donation at www.pledgie.com !

This entry was posted in Krita. Bookmark the permalink.

One Response to Spray improvements

  1. Nassos Kourentas says:

    You deserve every single cent of the donation!

Leave a Reply