blend modes: add missing ones, redo as templates
authorAndrew Chadwick <andrewc-git@piffle.org>
Wed, 7 Nov 2012 20:48:11 +0000 (20:48 +0000)
committerAndrew Chadwick <andrewc-git@piffle.org>
Wed, 7 Nov 2012 22:58:00 +0000 (22:58 +0000)
commitbb77d164fcc5589f1d448bfba2f98f96385f7ea3
treef7fb18c42e654d50849a19495867bb5351d32536
parent3d0a933c8334b5700b587b15cdac4a841f7b55a4
blend modes: add missing ones, redo as templates

Implement all the missing layer blend modes from the recently published

  http://www.w3.org/TR/compositing/

Specifically this adds Darken, Lighten, Difference, Exclusion, Hue, and
Saturation layer blend modes.

Added human-readable explanatory tooltips to the blend mode dropdown in
the Layers subwindow.

Fairly deep internal changes to the way layer compositing works: we now
use templates which inline blend mode functors working with *non*-
premultiplied components in place of the messy arrangement of macros and
functions operating on premultiplied components. This should make it
easier to implement pluggable compositing methods other than src-over at
a later date, if that's what we decide OpenRaster needs.

There's one template specialization already for the most common editing
case, Normal + Src-Over. We can add more as needed for other blend modes
which can be reduced down sanely to faster forms, using premultiplied
operation or something else.

Time: < ±1% - though that's really only the tweaked Normal + Src-Over.
We should add more blendmode-specific tests to tests/test_performance.py

We also now insist on contiguous data within tiles, but this should
already have been the case for all layers.
gui/layerswindow.py
lib/blendmodes.hpp [new file with mode: 0644]
lib/composite.hpp [deleted file]
lib/composite_rgbx.hpp [deleted file]
lib/compositing.hpp [new file with mode: 0644]
lib/fix15.hpp
lib/layer.py
lib/pixops.hpp
lib/tiledsurface.py