Long time no blog
After the last altercation, I felt a little disinclined to blog, after all a 'planet' doesn't offer the creature comforts Usenet offers for the practicing of the noble art of flaming. Plus, and perhaps more importantly, I have been busy. Work has been picking up and I'm doing a quite interesting job connecting medical information systems using agents. I've celebrated my thirty-fifth birthday with appropriate rituals, like the eating of rich viands and the releasing of Krita.
Regular readers of The Dot will have noticed this already, but the very first preview release of Krita is out of the door. Bart Coppens has made two nice animated movies of working with Krita that were impressive even to me. I'm the person who keeps track of the TODO's, not the ALREADY_DONE's, so I was feeling a bit pessimistic. People tell me that my despondency was making itself felt in my release announcements, so I made a special effort to make the dot announcement upbeat.
It might also have been the touch of flu that's making me grumpy, or the fact that I wasn't able to fix the zoom function in time for the release. This morning I checked in the fix, and now Krita can not only scale with the best, but zoom, too.
My father has visited us for the occasion of my birthday, and like a proud schoolboy showing off his fröbel-work, I showed him Krita. He's a pretty good Photoshop user, so his opinion of Krita carries weight with me. He rather likes the clean look & feel, liked the fact that our tools are in ordinary toolbars instead of floating palettes (those always obscure exactly the area of the image I need right now, he grumbled), and when I told him about painting-with-filters, he asked 'sharpen, too?', to which I replied with grin, 'sure'.
I'm going to conclude with Krita's TODO list as it stands now, purely for information purposes, and to show people who'd like to hack on something that there's plenty of interesting work left to be done, but I feel the strange, perhaps even foolhardy, urge to revisit the topic of Kopete's send key. Anyone interested in discussing this with me, please press page down, now. Don't read this. It's not for you. It's a recording for posterity.
There we are. Both streams of readers rejoined, brotherly looking forward to... <drum effects/> The Great Krita TODO:
Items with a hash have work started on them.
Scaling
- replace calloc and free by new and delete.
- check if memory allocations fail and free the resources if
they fail.
- replace the structs CONTRIB and CLIST by some STL or Qt
container.
- There is still a bug. The rightmost pixels in the scaled
image are wrong. Actually it is not really a bug in the
scaling code, if you draw a one pixel line at the rightmost
edge of the image and scale it, the line is still there,
there is just an addition line right of it. So the image is
not scaled to the actual target width
- use iterators to access pixels.
- Preview dialog should use KDialogBase
- Decide on more user-friendly names for the scaling algorithms.
Core
* Channels showing (note that we don't do Gimp-type grayscale
mask channels, just showing/hiding the various color
channels.
* Histogram computations (#Boudewijn)
* Adjustment layers (Layers that dynamically apply a filter to
the layer they are linked to, these do not store actual
image date, except for an occasional mask)
* Loading and saving of selections
* Colorspace-aware difference between pixel function
* Anti-aliased filling (requires some simple colorspace
function to merge 2 Pixels) -> also, make fill use
the new cancelable progress meter the gradient tool uses.
* Fix composite ops (nick from the code gwenview nicked for
the xcf import)
* Rework iterators to allow iterating over pixels (#Cyrillle, Casper)
Add iterators that run over all pixels in a rect, instead of pixels
per line.
* Auto-extending layers (#Casper)
User Interface
* Give color strategies an option page just like tools. Give layers an option page,
combine both pages to show for layer properties. Color strategies can be stateful.
* Replace krita ruler with koruler. (This may be impossible because Krita doesn't use pages)
* Create brush-shape outline cursor
* All dialogs ui-fied (#Boudewijn, Sven, Casper)
* Tabs in dockers drag-and-droppable (vector of docker
windows, create new docker if tab dropped outside existing
docker window)
* Implement the following dialogs / widgets:
- Select by color range (#Boudewijn)
- Variations (#Boudewijn)
- Transform (#Boudewijn)
- Gradient (nick from Scribus?)
- Histogram (#Boudewijn)
- Modify curves (nick from Perico)
* Add history docker
* Add auto-scroll to canvas while painting
* Add previews to all relevant dialogs. (XXX: let preview work
on rendered QImage, or on scaled image?)(#Bart)
* Allow an active tool for every pointer present in X. (#Adrian -- no
support yet for Wacom tablets that have more than one stylus)
* File/Open should list all image types Krita can handle, and simply
import non-native images, instead of forcing the user to use the import
image menu item.
* Allow guides to be disabled. Allow diagonal guides (useful
for perspective drawings)
* Create templates for often-used image formats. Add save-as-template
* Check OASIS file saving.
Tools
* All tools must have a tool options tab (#Boudewijn, Adrian, Cyrille)
* Loading and saving of tool state (XXX: do we really want this? It is
horribly confusing in the Gimp)
* Implement the following tools:
- Elliptical selection (#Boudewijn)
- Crop (This is a must-have -- tried to do something with Krita
today and had to go to the Gimp)
- Freehand selection (#Boudewijn)
- Polygonal selection (#Boudewijn)
- Continguous selection (magic wand) (#Boudewijn)
- pen(cil) tool (same as brush, but not anti-aliased) (#Boudewijn,
done, except there's still a little ant-aliasing present, perhaps
dependent on the brush).
- fix airbrush tool (add rate option, add increase
of brush size if kept in one place)
- poly-line tool
- rectangle tool (#Clarence, still some work to with opacity and so on)
- ellipse too (#Clarence, still some work to with opacity and so on)
- polygon tool
- color changer, smudge tool,sharpen tool, blur
tool, dodge tool, burn tool, sponge tool (These
last are perhaps more generally: painting with
filters tool)
- stamp tool (paint with patttern/image selection) (#Cyrille)
- Text tool
- Measure tool
- Pan tool (hand)
- Gradient tool
* Pressure sensivitize all relevant tools (e.g. line tool)
* Add resize slider to freehand tools that resizes the mean brush size.
Plugins
* As many filters as possible :-)
* Fix filters to use current image, instead of first image in
the document.
* Make tools and color strategy plugins into ktrader managed
objects.
That's more or less all for version 1,0; afterwards I propose to move to:
Core
* Add bit-depth independence
* Completely hide data storage backend from the code behind
iterators.
* Add color models for LAB etc.
* Make pipe brushes pay attention to parasites
User interface
* Add action (macro) docker
* Add navigation/zoom docker
* Add scriptability
* Add third cursor mode: outline of current brush
* Rethink document model (perhaps add dynamic links between images)
* Use OpenGL if available to composite checkerboard with image so
while scrolling the checks can stay in place, and the partially
transparent image move. This maybe needs Qt 4.
Tools
* Implement path tools
* Calligraphic pen tool
* Sumi-e brush tool
* Natural media tools (chalk, ink, oil, watercolour -- fun!)