Krita Source Code Documentation
Loading...
Searching...
No Matches
CanvasPlaybackEnvironment Class Reference

PlaybackEnvironment (Private) Constructs and deconstructs the necessary viewing conditions when animation playback begins and ends. This includes disabling and enabling onion skins based on playback condition and other such tasks. Also keeps track of original origin frame of initial play command, so play/pause can work while stop will always return to the origin of playback (where the user first pressed play from the stopped state.) More...

+ Inheritance diagram for CanvasPlaybackEnvironment:

Signals

void sigPlaybackStatisticsUpdated ()
 

Public Member Functions

 CanvasPlaybackEnvironment ()=delete
 
 CanvasPlaybackEnvironment (const CanvasPlaybackEnvironment &)=delete
 
 CanvasPlaybackEnvironment (int originFrame, KisCanvas2 *canvas, KisCanvasAnimationState *parent=nullptr)
 
CanvasPlaybackEnvironmentoperator= (const CanvasPlaybackEnvironment &)=delete
 
int originFrame ()
 
KisTimeSpan playbackRange () const
 
void prepare ()
 
void restore ()
 
void setPlaybackRange (KisTimeSpan p_playbackRange)
 
 ~CanvasPlaybackEnvironment ()
 

Private Attributes

KisSignalAutoConnectionsStore m_cancelStrokeConnections
 
SingleShotSignal m_cancelTrigger
 
KisCanvas2m_canvas
 
QVector< KisNodeWSPm_disabledDecoratedNodes
 
int m_originFrame
 The frame user started playback from.
 
KisTimeSpan m_playbackRange
 

Detailed Description

PlaybackEnvironment (Private) Constructs and deconstructs the necessary viewing conditions when animation playback begins and ends. This includes disabling and enabling onion skins based on playback condition and other such tasks. Also keeps track of original origin frame of initial play command, so play/pause can work while stop will always return to the origin of playback (where the user first pressed play from the stopped state.)

Definition at line 87 of file KisCanvasAnimationState.cpp.

Constructor & Destructor Documentation

◆ CanvasPlaybackEnvironment() [1/3]

CanvasPlaybackEnvironment::CanvasPlaybackEnvironment ( int originFrame,
KisCanvas2 * canvas,
KisCanvasAnimationState * parent = nullptr )
inline

Definition at line 90 of file KisCanvasAnimationState.cpp.

91 : QObject(parent)
93 , m_canvas(canvas)
94 {
95 connect(&m_cancelTrigger, SIGNAL(output()), parent, SIGNAL(sigCancelPlayback()));
96
97 prepare();
98 }
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
int m_originFrame
The frame user started playback from.

References connect(), m_cancelTrigger, and prepare().

◆ ~CanvasPlaybackEnvironment()

CanvasPlaybackEnvironment::~CanvasPlaybackEnvironment ( )
inline

Definition at line 100 of file KisCanvasAnimationState.cpp.

References restore().

◆ CanvasPlaybackEnvironment() [2/3]

CanvasPlaybackEnvironment::CanvasPlaybackEnvironment ( )
delete

◆ CanvasPlaybackEnvironment() [3/3]

CanvasPlaybackEnvironment::CanvasPlaybackEnvironment ( const CanvasPlaybackEnvironment & )
delete

Member Function Documentation

◆ operator=()

CanvasPlaybackEnvironment & CanvasPlaybackEnvironment::operator= ( const CanvasPlaybackEnvironment & )
delete

◆ originFrame()

int CanvasPlaybackEnvironment::originFrame ( )
inline

Definition at line 108 of file KisCanvasAnimationState.cpp.

108{ return m_originFrame; }

References m_originFrame.

◆ playbackRange()

KisTimeSpan CanvasPlaybackEnvironment::playbackRange ( ) const
inline

Definition at line 110 of file KisCanvasAnimationState.cpp.

110 {
111 return m_playbackRange;
112 }

References m_playbackRange.

◆ prepare()

void CanvasPlaybackEnvironment::prepare ( )
inline

Definition at line 118 of file KisCanvasAnimationState.cpp.

119 {
120 KIS_ASSERT(m_canvas); // Sanity check...
121
123 setPlaybackRange(range);
124
125 // Initialize and optimize playback environment...
126 if (m_canvas->frameCache()) {
127 KisImageConfig cfg(true);
128
129 const int dimensionLimit = cfg.useAnimationCacheFrameSizeLimit() ?
130 cfg.animationCacheFrameSizeLimit() : std::numeric_limits<int>::max();
131
132 const int largestDimension = KisAlgebra2D::maxDimension(m_canvas->image()->bounds());
133
134 const QRect regionOfInterest =
135 cfg.useAnimationCacheRegionOfInterest() && largestDimension > dimensionLimit ?
137
138 const QRect minimalRect =
141
142 m_canvas->frameCache()->dropLowQualityFrames(range, regionOfInterest, minimalRect);
143 m_canvas->setRenderingLimit(regionOfInterest);
144
145 // Preemptively cache all frames...
147 dlg.setRegionOfInterest(regionOfInterest);
148 dlg.regenerateRange(m_canvas->viewManager());
149 } else {
150 KisImageBarrierLock lock(m_canvas->image());
152 KisDecoratedNodeInterface* decoratedNode = dynamic_cast<KisDecoratedNodeInterface*>(node.data());
153 if (decoratedNode && decoratedNode->decorationsVisible()) {
154 decoratedNode->setDecorationsVisible(false, false);
155 m_disabledDecoratedNodes.append(node);
156 }
157 });
158 }
159
160 // Setup appropriate interrupt connections...
162 m_canvas->image().data(), SIGNAL(sigUndoDuringStrokeRequested()),
163 &m_cancelTrigger, SLOT(tryFire()));
164
166 m_canvas->image().data(), SIGNAL(sigStrokeCancellationRequested()),
167 &m_cancelTrigger, SLOT(tryFire()));
168
169 // We only want to stop on stroke end when running on a system
170 // without cache / opengl / graphics driver support!
171 if (m_canvas->frameCache()) {
173 m_canvas->image().data(), SIGNAL(sigStrokeEndRequested()),
174 &m_cancelTrigger, SLOT(tryFire()));
175 }
176 }
KisSignalAutoConnectionsStore m_cancelStrokeConnections
void setPlaybackRange(KisTimeSpan p_playbackRange)
void dropLowQualityFrames(const KisTimeSpan &range, const QRect &regionOfInterest, const QRect &minimalRect)
QRect regionOfInterest
KisAnimationFrameCacheSP frameCache
KisCoordinatesConverter * coordinatesConverter
KisImageWSP image() const
KisViewManager * viewManager() const
void setRenderingLimit(const QRect &rc)
const KisTimeSpan & activePlaybackRange() const
activePlaybackRange
KisImageAnimationInterface * animationInterface() const
QRect bounds() const override
void addConnection(Sender sender, Signal signal, Receiver receiver, Method method, Qt::ConnectionType type=Qt::AutoConnection)
#define KIS_ASSERT(cond)
Definition kis_assert.h:33
auto maxDimension(Size size) -> decltype(size.width())
void recursiveApplyNodes(NodePointer node, Functor func)

References KisImageAnimationInterface::activePlaybackRange(), KisImageConfig::animationCacheFrameSizeLimit(), KisImage::animationInterface(), KisImage::bounds(), KisCanvas2::coordinatesConverter, KisAnimationFrameCache::dropLowQualityFrames(), KisCanvas2::frameCache, KisCanvas2::image(), KisCoordinatesConverter::imageRectInImagePixels(), KIS_ASSERT, m_canvas, KisAlgebra2D::maxDimension(), KisLayerUtils::recursiveApplyNodes(), KisAsyncAnimationRenderDialogBase::regenerateRange(), KisCanvas2::regionOfInterest, KisNodeFacade::root, setPlaybackRange(), KisAsyncAnimationRenderDialogBase::setRegionOfInterest(), KisCanvas2::setRenderingLimit(), KisImageConfig::useAnimationCacheFrameSizeLimit(), KisImageConfig::useAnimationCacheRegionOfInterest(), KisCanvas2::viewManager(), and KisCoordinatesConverter::widgetRectInImagePixels().

◆ restore()

void CanvasPlaybackEnvironment::restore ( )
inline

Definition at line 178 of file KisCanvasAnimationState.cpp.

178 {
180
181 if (m_canvas) {
182 if (m_canvas->frameCache()) {
183 m_canvas->setRenderingLimit(QRect());
184 } else {
185 KisImageBarrierLock lock(m_canvas->image());
186 Q_FOREACH(KisNodeWSP disabledNode, m_disabledDecoratedNodes) {
187 KisDecoratedNodeInterface* decoratedNode = dynamic_cast<KisDecoratedNodeInterface*>(disabledNode.data());
188 if (decoratedNode) {
189 decoratedNode->setDecorationsVisible(true, true);
190 }
191 }
193 }
194 }
195 }
QVector< KisNodeWSP > m_disabledDecoratedNodes
virtual void setDecorationsVisible(bool value, bool update)=0

References KisWeakSharedPtr< T >::data(), and KisDecoratedNodeInterface::setDecorationsVisible().

◆ setPlaybackRange()

void CanvasPlaybackEnvironment::setPlaybackRange ( KisTimeSpan p_playbackRange)
inline

Definition at line 114 of file KisCanvasAnimationState.cpp.

114 {
115 m_playbackRange = p_playbackRange;
116 }

References m_playbackRange.

◆ sigPlaybackStatisticsUpdated

void CanvasPlaybackEnvironment::sigPlaybackStatisticsUpdated ( )
signal

Member Data Documentation

◆ m_cancelStrokeConnections

KisSignalAutoConnectionsStore CanvasPlaybackEnvironment::m_cancelStrokeConnections
private

Definition at line 202 of file KisCanvasAnimationState.cpp.

◆ m_cancelTrigger

SingleShotSignal CanvasPlaybackEnvironment::m_cancelTrigger
private

Definition at line 203 of file KisCanvasAnimationState.cpp.

◆ m_canvas

KisCanvas2* CanvasPlaybackEnvironment::m_canvas
private

Definition at line 206 of file KisCanvasAnimationState.cpp.

◆ m_disabledDecoratedNodes

QVector<KisNodeWSP> CanvasPlaybackEnvironment::m_disabledDecoratedNodes
private

Definition at line 204 of file KisCanvasAnimationState.cpp.

◆ m_originFrame

int CanvasPlaybackEnvironment::m_originFrame
private

The frame user started playback from.

Definition at line 201 of file KisCanvasAnimationState.cpp.

◆ m_playbackRange

KisTimeSpan CanvasPlaybackEnvironment::m_playbackRange
private

Definition at line 208 of file KisCanvasAnimationState.cpp.


The documentation for this class was generated from the following file: