Fix artifacts when changing transform mask continuously
The patch implements multiple things:
-
Makes static cache storage in the transform mask thread-safe and encapsulated in a single structure.
-
Makes sure that KisRecalculateTransformMaskJob::run() cannot run twice for the same parameters. Now it is governed by m_mask->staticImageCacheIsValid() check in the beginnig of the function.
The multiple invocations could happen due to concurrent calls to KisTransformMask::slotDelayedStaticUpdate() (by the timer) and KisTransformMask::threadSafeForceStaticImageUpdate() (by an undo command). That could happen in the beginning of the transformation stroke. Now the two calls will be compressed by the cache validity check.
-
InplaceTransformStrokeStrategy does a better job in maintaining updates for the final lod0 update of the lodN stroke.
-
Implements a unittest for testing the inplace stroke strategy. Alas its results are not very stable, so it is marked as broken for now.