diff --git a/libs/image/kis_paint_device.cc b/libs/image/kis_paint_device.cc --- a/libs/image/kis_paint_device.cc +++ b/libs/image/kis_paint_device.cc @@ -100,6 +100,8 @@ KisDefaultBoundsBaseSP defaultBounds; QScopedPointer basicStrategy; QScopedPointer wrappedStrategy; + QMutex m_wrappedStrategyMutex; + QScopedPointer framesInterface; bool isProjectionDevice; @@ -592,9 +594,16 @@ return basicStrategy.data(); } - QRect wrapRect = defaultBounds->bounds(); + const QRect wrapRect = defaultBounds->bounds(); + if (!wrappedStrategy || wrappedStrategy->wrapRect() != wrapRect) { - wrappedStrategy.reset(new KisPaintDeviceWrappedStrategy(wrapRect, q, this)); + QMutexLocker locker(&m_wrappedStrategyMutex); + + if (!wrappedStrategy) { + wrappedStrategy.reset(new KisPaintDeviceWrappedStrategy(wrapRect, q, this)); + } else if (wrappedStrategy->wrapRect() != wrapRect) { + wrappedStrategy->setWrapRect(wrapRect); + } } return wrappedStrategy.data(); diff --git a/libs/image/kis_paint_device_strategies.h b/libs/image/kis_paint_device_strategies.h --- a/libs/image/kis_paint_device_strategies.h +++ b/libs/image/kis_paint_device_strategies.h @@ -212,6 +212,10 @@ return m_wrapRect; } + void setWrapRect(const QRect &rc) { + m_wrapRect = rc; + } + void move(const QPoint& pt) override { QPoint offset (pt.x() - m_device->x(), pt.y() - m_device->y());