The most memorable occasion in the past weekend was also a very joyous one: Cyrille Berger were married in Kalix, Sweden! I am sure that every reader will join me in a round of congratulations and wishes for happiness! Cyrille is one of the pillars of Krita, of course, and Hanna has committed to Krita as well!

We're nearing the end of the Summer of Code time and are beginning the long, hard slog towards a useful release. Silvio Grosso has once again offered to extend Lukáš Tvrdý's full-time involvement in Krita -- one reason I am very confident about this release! I have started writing for the manual for real, writing reams of text. David Revoy has prepared a big, multi-page pdf showing exactly where he thinks we still have usability issues. Reassuringly, many of his points coincide with Peter Sikking's ideas. And we've begun the process of identifying what needs to be fixed and what will need to be disabled.

I am already excited about the things artists will be able to do with 2.3 -- if you all help us by testing Krita throughout this period.

On that note, I am pleased to announce that there will be a Krita Bug Day (or rather weekend) August 21 and 22. More details will follow, but what we need there is go through our bugs and verify those on as many different systems as possible.

Blogs and press

Linux Magazin has published a very nice 1-page article on Krita. Boudewijn is mentioned as co-author, but all he did was deliver screenshots and a fact sheet -- the following choice quote is from the main author "Fur den anspruchsvollen Digital-Kunstler, der seine Werke am Rechner entwirft und bearbeited, bleiben bij Krita fast keine Wunsche offten."!

Code

Adam Celarek was again busy with his Summer of Code project: the Next Generation Color Selector. David Revoy remarked about it:

... this color selector is simply the best color selector for me.
I love this tool, configured this way: auto palette from the image on right, color shade on bottom, and last picked color on the very bottom.

Most of Adam's work has gone into the minimal shade selector, adding shortcuts and polishing. Adam also fixed display issues with the canvas rulers that occurred when a selection was active.


Boudewijn Rempt finally had most of a Saturday to himself. He first enabled a preview of the integrated brush designer, a one-stop place for selecting the brush engine, configuring the settings for a preset and a preset. Some people like it, but there are still issues with spit and polish there. Also, Boudewijn fixed a memory leak.

José Luis Vergara fixed the a bug both in the smudge brush as in the hatching brush: neither respected the selection when painting. At the same time, the code for the smudging brush was cleaned up considerably. Then he went on with his Google Summer of Code project: the impasto effect. Now the phong bump map filter is fast enough to use as an adjustment layer, and there's a gui to configure the filter. Next step -- the impasto effect?

Lukáš Tvrdý was in bug-fixing mode this week, mainly focussed on fixing issues when painting with colored brushes as masks, then fixing bugs in the on-canvas brush scaling feature, fixing the scaling of Gimp Image Hose (.gih) brushes -- we use those a lot now, with David Revoy's Chaos and Evolutions brush set being our default. Finally he fixed issues with the brush outline cursor.

Marc Pegon finished the warp transformation mode and started designing the free transform user interface, implemented undo/redo for warp transform and prepared the way for two more methods of warping the image on-canvas.

Sven Langkamp fixed a very nasty bug: it turned out that when using the pixel selection mode (opposed to the vector selection mode) the rightmost column and bottom-most row of pixels couldn't be selected.

Envoi

Krita is beginning to look good... Give it a try yourself!

A period of relative quiet, when most Google Summer of Code students were busy working on the algorithms for the second part of gsoc project: Marc Pegon on warping, José Luis Vergara on bumpmapping. Boudewijn was in Bangalore hacking on the core architecture of KOffice, Cyrille was still moving and Sven preparing for his exams.

Art by Animtim

Blogs

It's hard to keep up -- witness this irregular update on what's going on in Krita! -- but most of the summer of code students blog regularly. And Lukas is regular as clockwork -- every Monday morning an update on what happened last week!

Code

Eighty-seven commits in two weeks -- where week 28 had 68. Still, lots of good progress as you can already see from the blogs. We're in the last stages of the Google Summer of Code period, and much time goes either into polish or into setting up the last features from the plan.

Adam Celarek is mostly done with the features for the Next Generation color selectors. He spent these weeks polishing, bugfixing, improving support with the various colorspaces Krita supports, implemented a history of recently used colors, synchronizing the current color with the rest of the KOffice system, and a minimal shade selector.

Ana Beatriz Guerrero López (who did the same for Karbon, fixed building Krita on ARM platforms.

Boudewijn fixed a usability bug in Krita, noted by Fabian: a pasted layer was not made active, ported Krita to the new QWidget-agnostic canvas code in KOffice and started working on a combined brush engine selector/brush settings/preset selector popup -- without any concrete results, though.

Burkhard Lück fixed some problems with marking user-visible texts for translation.

Dmitry Kazakov implemented a swapper for image data. Krita is now on its fifth or so tile engine, and this is the second tile engine that includes swapping to a file. Bart Coppens and Casper Boemann implemented the first swapfile implementation, back in the single-thread days of Krita. The new one first starts swapping out undo information, and then, if memory is still tight, swaps out current image tiles. This sounds very simple -- but the actual implementation is quite hairy, especially since Dmitry has made Krita very aggressivly multi-threaded!

José Luis Vergara implemented a new bumpmap filter, the Phong-bummapper. It's pretty fast, and the first step to a proper impasto effect -- which is very similar to bumpmapping. Paint creates ridges and valleys, and light from single sources creates shadows over this height map. Animtim showed some work using the hatching brush on the forum:

Lukáš Tvrdý fixed the brush outline for predefined bitmap brushes when scaling is applied, fixed the origin of the duplicate paintop, hacked for fun on the sketch brush, adding another mode, Chrome, fixed the sensors that determine many brush parameters, like size, and improved the performance of using the predefined brushes. Now Deevad's brush set, which is default in Krita, works really well! Then he went on to optimize the line-drawing algorithm Krita uses, improved the performance of the autobrush by checking whether we really use some randomness in the computation. Lukáš next task was fixing the issues we have with creating custom brushes. This is something you (yes, I'm looking at you, google analytics is all-powerful!) can help us test. We need input here from everyone on what works, what's cool, what's confusing since it is very nearly a completely new feature. Get compiling! If you have trouble, ask on the forum, ask here, ask on the mailing list or irc, but don't hesitate. We'll help you get a working Krita so you can help us create a great Krita.

Marc Pegon started working on perspective transformation in his new transform tool. He added the following instructions, which I should copy into the manual I am writing:

Hold Meta key and move the mouse to apply a 3D rotation to the selection + a perspective projection. Horizontal movement rotates around the Y axis, and vertical movement rotates around the X axis.

He also added some gui polish (testing needed!), progress information... And then begon to work on the warp mode. This is so cool, so much fun to play with:


Sixty-eight commits last week -- and thanks to the untiring work of the latest tester to join Krita, Animtim, we're at 71 bugs. In week 28, the Krita team decided to start using the "Major" category for bugs to determine which bugs will be 2.3 release blockers. The categorization is still fluid, but there is no doubt that we are bracing ourselves for the final onslaught. Lukáš Tvrdý is in bug-fixing mode as well, spurred on by observations from Deevad.

This is Animtim's first result in Krita:


Google Summer of Code

Code

Adam Celarek made great progress with the new generation color selectors. He fixed performance issues, some crashes, added the settings to the kritarc file so Krita remembers you current settings -- with some more polish, this will be the default color selector for Krita for 2.3.

Ana Beatriz Guerrero López fixed compilation of Krita on ARM processors

Boudewijn Rempt made it possible for plugins to add settings panes to Krita's preferences dialog.

Dmitry Kazakov implemented a memory pool for tiles in Krita, optimized the projection update queue so it updates in tiles, cleaned up the freehand painting tool by making the "wash" mode of painting less special and more integrated into Krita's core, incidentally fixing a race condition, and added configuration options for the update scheduler -- you can now play with three settings:

  • useUpdateScheduler - you can disable the scheduler by setting this option to false. KisProjection backend will be used instead.
  • updatePatchWidth/updatePatchHeight the size of the patches produced after splitting huge update areas
  • maxCollectAlpha/maxMergeAlpha/maxMergeCollectAlpha the parameters of optimization process

Note that there's no gui for this: you need to edit .kde4/share/config/kritarc. Then he fixed a bug in the optimized code for copying pixel data, fixed a bug in the adjustment layer dialog, a race condition in when creating the projection of a layer, fixed a bug where transparency masks didn't work correctly for layers with a non-transparent default color, made clone layers work correctly at last and finally started work on swapping image data out to disk. Phew!

Lukáš Tvrdý improved the performance of KisPainter's polygon drawing code, implemented support for drawing QPainterPaths on a Krita paint device, fixed the DDA line drawing code -- and that is now used to draw aliased lines of one pixel wide, which means our Pen brush engine now has nice results. Then Lukáš focussed on a bug reported by David Revoy: the painting of brush outlines. David has already tried the new version and likes it!

Sven Langkamp made sure that when the user uses a tool that doesn't support painting, the user can see that the brush engine selector is disabled, using Enkithan's icons. He fixed the preferences dialog, where the undo limit was settable, but the setting not saved, worked together with Lukáš to fix the Pen brush engine, fixed a crash reported by Animtim and fixed a bug in the polyline tool.

Envoi

Not everyone might know it, but this attempt at a chronicle of what is happening in Krita development has had for some time a little sister, Last Week in KOffice. Now this is my own opinionated report of what happens in Krita, and as such it has a place on planet.kde.org, but for Last Week in KOffice I strive for a little more distance. But a quite a bit of what happens in KOffice has relevance to Krita as well. You might want to check it out, now and then...

Today Krita 2.2.1 has been released. There are some useful bug fixes, and if you had installed 2.2.0 in Debian or Kubuntu, you'll probably have received the update already. As always, for real fun, get on the trunk train!

Week 27 saw about 40 commits to Krita. Especially Sven Langkamp did a lot of cleaning up in our bug list, so we're at 59 bugs now, despite having received quite a few new reports. Sven's call for testing did work, but we still need more thorough testing if Krita 2.3 is going to be the Ready For You release!

And look what Ico-dY has made with the trunk version of Krita:


Code

Adam Celarek already blogged about his work: this week he spent time polishing his new color selectors and adding support for colorspaces to them.

Boudewijn Rempt "fixed" a bug in our handling of metadata. Well, it's a quote-unquote fix, because it is more a paper-over of the problem that many real-world files have invalid names in the name/value pairs in their metadata. For now, we change the invalid names to something properly scary, like "INVALID", but don't halt krita when encountering the name anymore.

Dmitry Kazakov fixed a problem with threading and masks. He also optimized our implementation of shared pointers and weak shared pointers. These days, Qt provides all that stuff, but there is by now so much code using the home-grown implementations that refactoring would take a prohibitive amount of effort. And not only that, it would be hard to be certain that we'd be getting the behaviour the Krita code is used to. Dmitry then optimized the tiles backend by adding a memory pool. Dmitry also enabled the new update scheduler by default. This really needs testing! We need to know about all kinds of glitches and other problems you see when working with Krita trunk and images with multiple layers. Then Dmitry optimized some cases where we copy pixels around.

José Luis Vergara added the ability to control the levels of separation controlled by the pressure curve in the GUI to the hatching brush engine -- and now the hatching brush engine is feature complete. Testing please! (And cool artwork to show off!). José is now continuing his Google Summer of Code project by looking into a possible implementation for impasto layers.

Mart Pegon worked on the transformation tool. He fixed a bug with shearing, missing icons and undo/redo bugs. He's now thinking about perspective and free transform for the transformation tool

Sven Langkamp polished the brush settings popup by using toggle buttons for the brush tip selection instead of tabs. he re-activated the custom brush brush tip, fixed a crash that occurred when painting after changing the image's color space, fixed a crash in the perspective transformation tool, another crash that occurred when moving a whole image, the order of layers when separating an image into different layers for every channel and yet another problem in the perspective transformation tool.

Wiki

The Krita developers wiki has moved to http://community.kde.org/Krita. The KDE wiki maintainers are, meanwhile, busy upgrading the KDE wikis to a new version.

I'm writing from my hotel room in Tampere, Finland where I am attending Akademy. Soon, Lukáš Tvrdý will be giving his presentation on writing brush engines for Krita. He already put the slides up. Yesterday Lukáš and me discussed the action plan for 2.3 and we arrived at a little recalibration, which should appear on the wiki soon.

Although we sorely miss the work of Cyrille Berger, who is looking for a house now that he has been accepted for a post-doc in Linköping and training two puppies, Krita development proceeded at a fast pace in the past two weeks.

If you check out Krita trunk you'll get a smooth transform tool, a completely multi-threaded image recomposition backend that with some changes to come will make it possible to move big vector shapes smoothly on screen (and gives pippin parallelism envy), a hatching brush, a sketching brush and an eraser toggle. No progress on the color selectors: Adam had some exams this week.

Next week, Krita 2.2.1 will be released. This incorporates quite a few bug fixes and is a very nice version of Krita to work with, though definitely not as cool and smooth and exciting as trunk. If you want to help with testing, consider installing trunk. We are ready to help whichever way you contact us, forum, irc, mailing list -- you can even mail me directly.

Code

Cyrille Berger fixed a crash when closing the filter dialog following a suggestion by Christoph Feck. This fix got backported to Krita 2.2.1 which will be released next week.

Dmitry Kazakov was unstoppable: he added a fast way to shallow copy pixels from one paint device to another (where a paint device can be a layer, but also a brush while painting or a temporary pixel storage created in the middle of a complex operation), added a compression framework so krita files can be loaded and saved faster (this will also be used when swapping, and maybe even for in-memory storage of undo information), fixed a bug in the transaction framework, made painting faster (note that we need testers here, if you see glitches while painting, inform Dmitry!) and implemented a multi-threaded optimizer for the update scheduler. If you have a complex image with many layers and at least a dual core computer, you will see a big improvement in the redraw speed. More is to come from Dmitry!

José Luis Vergara implemented a gui for setting the options for the hatching brush. He celebrated committing an "ugly but elegant" hack that made the hatching brush look really good and work fast with some liquor, then went on to fix the brush outline for the hatching brush and rounded off with cleaning up his code. Pentalis (as JLV is usually known) now is thinking about the implementation of the impasto feature.

Lukáš Tvrdý cleaned up the code and the user interface for paintops with related options and then started working on a really challenging thing: fully supporting Photoshop's ABR brushes. We have a fairly good reverse engineering of the closed, proprietary format, and now support quite a few features. However, a full implementation would likely take more time, so we decided yesterday to document the progress. The full implementation has been postponed to 2.4 -- the current support is already quite good though! We support brush tip dynamics, bitmap brushes, computation brushes and mirroring.

During the weekend, Lukáš felt like having a break, so he implemented a completely new brush engine, called "Sketch", inspired by Project Harmony. Thanks to Ricardo Cabello for giving permission to base our implementation on his work!

Marc Pegon started fixing some minor bugs in the undo/redo functionality of the transform tool. Then he made it possible to change the center of the rotation, added horizontal and vertical shearing to the transform worker class (a long standing todo! -- at least five years) and fixed some display corruption. And then, with a big commit, Marc made the interaction with the transform tool quite smooth. Instead of actually transforming all the layer data, we now transform whatever is visible on screen and when the user presses "apply" transform the real data in as few steps as possible.

Michael Drueing continued his quest to make Krita compile with Microsoft's Visual C++ compiler. I hope to meet some of the KDE Windows guys this week in Tampere and learn how to do that myself -- and also to learn about the issues packaging Krita for Windows.

Sven Langkamp made it possible to turn off the creation of backup files, made sure that we always show a cursor, even if the user selected a 3d cursor but not the opengl canvas, and made it possible to resize the canvas to the size of the current selection.

Sven also figured out what Boudewijn was doing wrong with the MyPaint brush engine. It now works -- it isn't smooth yet, of course, and there are still quite a few issues, but you can paint with MyPaint brushes in Krita now!

Finally, Sven added two new gradients -- but these are not your ordinary gradients! They are updated automatically and show a gradient from current foreground to current background color and from foreground to transparent.


Manual

I have been trying to organize the Krita manual. I'm still not sure what the best approach is for initial development. The content navigation on Userbase has to be added manually (previous, up, next etc), and that makes reorganizing more difficult. Plus, if the text on userbase is leading, working on the train is hard. So, ideally, the manual text is in svn.

On the other hand, if the manual is on Userbase, everyone who has a copy of Krita trunk can chip in and start filling in sections with a rough draft. I really only has to be rough: technically correct and about the right topics. It will later be edited into proper, understandable English by a real editor, paid for by the generous donations from our community.

Conclusion

I still think we're nicely on track for a great Krita 2.3 release, though we could use more help. Of course... But if you've always been interested in getting involved but didn't really know what to hack on, please approach us, and we'll find you some nice bugs to get started with, or maybe some UI polishing!

And just for fun: this is what Krita looked like ten years ago:

And this is today:

joomla template
template joomla