layer model: use Compositing-1's. Add mask modes.
authorAndrew Chadwick <andrewc-git@piffle.org>
Tue, 11 Feb 2014 12:27:32 +0000 (12:27 +0000)
committerAndrew Chadwick <andrewc-git@piffle.org>
Fri, 14 Feb 2014 11:18:41 +0000 (11:18 +0000)
commit4b42c87b507786b967ffe3a306386223c83a8700
tree2fedafaa161b1400d7d6277cc7c32256526b66c0
parentf8d17ca3d3260e1c01d8711939bc7a34ccf5f9c6
layer model: use Compositing-1's. Add mask modes.

Re-enable the useful group features that OpenRaster 0.0.2 doesn't allow,
like visibility, locking etc.

Implement a useful subset of compositing modes to allow masking, and use an
SVG-like layer stack rendering model similar to that defined by

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

Masking is achieved by making an isolated group containing a mask layer as
its uppermost layer, and setting the mask layer's mode to "Destination In"
or "Destination Out".  Yes, that's a bit fiddly at the moment. Yes, special
"Masked group" or "Masked layer" classes would probably be more usable.

Update the UI to make all this machinery available to the user.

These new rendering modes can be less efficient than just src-over
compositing on top of a solid background, but expose flags on the C++ mode
objects to allow the Python code to make smart decisions about whether to
skip things or invoke faster code paths.

Add test code for the speedup flags and general error-freeness of the new
layer mode code.
16 files changed:
gui/document.py
gui/layermodes.py
gui/layerswindow.py
gui/layerswindow.xml
gui/menu.xml
gui/resources.xml
gui/tileddrawwidget.py
lib/blending.hpp [new file with mode: 0644]
lib/blendmodes.hpp [deleted file]
lib/command.py
lib/compositing.hpp
lib/document.py
lib/layer.py
lib/pixops.hpp
lib/tiledsurface.py
tests/test_compositeops.py [new file with mode: 0644]