134 const QRect regionOfInterest =
138 const QRect minimalRect =
152 KisDecoratedNodeInterface* decoratedNode = dynamic_cast<KisDecoratedNodeInterface*>(node.data());
153 if (decoratedNode && decoratedNode->decorationsVisible()) {
154 decoratedNode->setDecorationsVisible(false, false);
155 m_disabledDecoratedNodes.append(node);
179 m_cancelStrokeConnections.clear();
182 if (m_canvas->frameCache()) {
183 m_canvas->setRenderingLimit(QRect());
185 KisImageBarrierLock lock(m_canvas->image());
186 Q_FOREACH(
KisNodeWSP disabledNode, m_disabledDecoratedNodes) {
192 m_disabledDecoratedNodes.clear();
212#include "KisCanvasAnimationState.moc"
247 if (m_d->canvas && m_d->canvas->image()) {
248 KisImageAnimationInterface* animInterface = m_d->canvas->image()->animationInterface();
250 if (animInterface && cfg.adaptivePlaybackRange()) {
251 KisTimeSpan desiredPlaybackRange = animInterface->documentPlaybackRange();
252 desiredPlaybackRange.include(time);
253 animInterface->setDocumentRange(desiredPlaybackRange);
260 connect(&m_d->m_statsTimer, SIGNAL(timeout()),
this, SIGNAL(sigPlaybackStatisticsUpdated()));
275 return boost::optional<QFileInfo>(*
m_d->media);
283 if (
m_d->canvas &&
m_d->canvas->imageView() &&
m_d->canvas->imageView()->document()) {
284 return m_d->canvas->imageView()->document()->getAudioLevel();
292 if (
m_d->playbackEnvironment) {
293 return boost::optional<int>(
m_d->playbackEnvironment->originFrame());
301 return m_d->displayProxy.data();
314 return m_d->playbackSpeed;
319 if (!
m_d->canvas || !
m_d->canvas->imageView()) {
331 QFileInfo toLoad = files.first();
333 m_d->media.reset(
new QFileInfo(toLoad));
345 m_d->displayProxy->displayFrame(frame, finalize);
350 if (!
m_d->canvas || !
m_d->canvas->image()) {
360 if (
m_d->state != p_state) {
361 m_d->state = p_state;
363 if (
m_d->playbackEnvironment) {
364 m_d->playbackEnvironment->prepare();
372 m_d->m_statsTimer.start();
376 m_d->playbackEnvironment.reset();
377 }
else if(
m_d->playbackEnvironment) {
378 m_d->playbackEnvironment->restore();
381 m_d->m_statsTimer.stop();
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
PlaybackEnvironment (Private) Constructs and deconstructs the necessary viewing conditions when anima...
QVector< KisNodeWSP > m_disabledDecoratedNodes
KisTimeSpan m_playbackRange
KisTimeSpan playbackRange() const
SingleShotSignal m_cancelTrigger
CanvasPlaybackEnvironment & operator=(const CanvasPlaybackEnvironment &)=delete
void sigPlaybackStatisticsUpdated()
CanvasPlaybackEnvironment()=delete
KisSignalAutoConnectionsStore m_cancelStrokeConnections
CanvasPlaybackEnvironment(int originFrame, KisCanvas2 *canvas, KisCanvasAnimationState *parent=nullptr)
void setPlaybackRange(KisTimeSpan p_playbackRange)
CanvasPlaybackEnvironment(const CanvasPlaybackEnvironment &)=delete
int m_originFrame
The frame user started playback from.
~CanvasPlaybackEnvironment()
void dropLowQualityFrames(const KisTimeSpan &range, const QRect ®ionOfInterest, const QRect &minimalRect)
virtual Result regenerateRange(KisViewManager *viewManager)
start generation of frames and (if not in batch mode) show the dialog
void setRegionOfInterest(const KisRegion &roi)
KisAnimationFrameCacheSP frameCache
KisCoordinatesConverter * coordinatesConverter
KisImageWSP image() const
KisViewManager * viewManager() const
QPointer< KisView > imageView() const
void setRenderingLimit(const QRect &rc)
The KisCanvasAnimationState class stores all of the canvas-specific animation state.
void sigAudioLevelChanged(qreal value)
void sigPlaybackStateChanged(PlaybackState state)
QScopedPointer< Private > m_d
boost::optional< QFileInfo > mediaInfo()
Get the media file info associated with this canvas, if available.
PlaybackState playbackState()
class KisFrameDisplayProxy * displayProxy()
void sigPlaybackMediaChanged()
qreal playbackSpeed() const
void setPlaybackState(PlaybackState state)
setPlaybackState changes the animation playback state for this canvas. KisPlaybackEngine should respo...
void showFrame(int frame, bool finalize=false)
KisTimeSpan activePlaybackRange()
void setupAudioTracks()
Sets up the audio tracks for a given animation. (The only reason this is public is because we have to...
void sigPlaybackStatisticsUpdated()
boost::optional< int > playbackOrigin()
Get the animation frame to return to (for this canvas) when playback is stopped, if available.
void setPlaybackSpeed(qreal value)
KisCanvasAnimationState(KisCanvas2 *canvas)
~KisCanvasAnimationState() override
void sigPlaybackSpeedChanged(qreal value)
QRectF widgetRectInImagePixels() const
QRect imageRectInImagePixels() const
virtual void setDecorationsVisible(bool value, bool update)=0
void sigAudioLevelChanged(qreal level)
void sigAudioTracksChanged()
QVector< QFileInfo > getAudioTracks() const
The KisFrameDisplayProxy class sits between the KisCanvas (within its KisCanvasAnimationState) and it...
KisImageWSP image() const
const KisTimeSpan & activePlaybackRange() const
activePlaybackRange
void sigKeyframeAdded(const KisKeyframeChannel *channel, int time)
bool useAnimationCacheFrameSizeLimit(bool defaultValue=false) const
int animationCacheFrameSizeLimit(bool defaultValue=false) const
bool useAnimationCacheRegionOfInterest(bool defaultValue=false) const
KisImageAnimationInterface * animationInterface() const
QRect bounds() const override
KisKeyframeChannel stores and manages KisKeyframes. Maps units of time to virtual keyframe values....
void upgradeToPlaybackEngineMLT(class KoCanvasBase *canvas)
static KisPart * instance()
void addConnection(Sender sender, Signal signal, Receiver receiver, Method method, Qt::ConnectionType type=Qt::AutoConnection)
static KisTimeSpan infinite(int start)
SingleShotSignal(QObject *parent=nullptr)
static bool qFuzzyCompare(half p1, half p2)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
auto maxDimension(Size size) -> decltype(size.width())
void recursiveApplyNodes(NodePointer node, Functor func)
QScopedPointer< QFileInfo > media
QScopedPointer< KisFrameDisplayProxy > displayProxy
Private(KisCanvas2 *p_canvas)
QScopedPointer< CanvasPlaybackEnvironment > playbackEnvironment