File indexing completed on 2024-05-12 16:01:25
0001 /* 0002 * SPDX-FileCopyrightText: 2015 Jouni Pentikäinen <joupent@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef KIS_ANIMATION_FRAME_CACHE_H 0008 #define KIS_ANIMATION_FRAME_CACHE_H 0009 0010 #include <QImage> 0011 #include <QObject> 0012 0013 #include "kritaui_export.h" 0014 #include "kis_types.h" 0015 #include "kis_shared.h" 0016 0017 class KisImage; 0018 class KisImageAnimationInterface; 0019 class KisTimeSpan; 0020 class KisRegion; 0021 0022 class KisOpenGLImageTextures; 0023 typedef KisSharedPtr<KisOpenGLImageTextures> KisOpenGLImageTexturesSP; 0024 0025 class KisOpenGLUpdateInfo; 0026 typedef KisSharedPtr<KisOpenGLUpdateInfo> KisOpenGLUpdateInfoSP; 0027 0028 class KRITAUI_EXPORT KisAnimationFrameCache : public QObject, public KisShared 0029 { 0030 Q_OBJECT 0031 0032 public: 0033 0034 static KisAnimationFrameCacheSP getFrameCache(KisOpenGLImageTexturesSP textures); 0035 static const QList<KisAnimationFrameCache*> caches(); 0036 static const KisAnimationFrameCacheSP cacheForImage(KisImageWSP image); 0037 0038 KisAnimationFrameCache(KisOpenGLImageTexturesSP textures); 0039 ~KisAnimationFrameCache() override; 0040 0041 QImage getFrame(int time); 0042 bool uploadFrame(int time); 0043 0044 bool shouldUploadNewFrame(int newTime, int oldTime) const; 0045 0046 enum CacheStatus { 0047 Cached, 0048 Uncached, 0049 }; 0050 0051 CacheStatus frameStatus(int time) const; 0052 0053 KisImageWSP image(); 0054 0055 KisOpenGLUpdateInfoSP fetchFrameData(int time, KisImageSP image, const KisRegion &requestedRegion) const; 0056 void addConvertedFrameData(KisOpenGLUpdateInfoSP info, int time); 0057 0058 /** 0059 * Drops all the frames with worse level of detail values than the current 0060 * desired level of detail. 0061 */ 0062 void dropLowQualityFrames(const KisTimeSpan &range, const QRect ®ionOfInterest, const QRect &minimalRect); 0063 0064 bool framesHaveValidRoi(const KisTimeSpan &range, const QRect ®ionOfInterest); 0065 0066 Q_SIGNALS: 0067 void changed(); 0068 0069 private: 0070 0071 struct Private; 0072 QScopedPointer<Private> m_d; 0073 0074 private Q_SLOTS: 0075 void framesChanged(const KisTimeSpan &range, const QRect &rect); 0076 void slotConfigChanged(); 0077 }; 0078 0079 #endif