File indexing completed on 2024-05-12 16:01:48
0001 /* 0002 * SPDX-FileCopyrightText: 2018 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #ifndef KISFRAMECACHESWAPPER_H 0007 #define KISFRAMECACHESWAPPER_H 0008 0009 #include <QScopedPointer> 0010 0011 #include "KisAbstractFrameCacheSwapper.h" 0012 0013 class KisOpenGLUpdateInfoBuilder; 0014 0015 0016 /** 0017 * KisFrameCacheSwapper is the most highlevel facade of the frame 0018 * swapping infrastructure. The main responsibilities of the class: 0019 * 0020 * 1) Asynchronously predict and prefetch the pending frames from disk 0021 * and maintain a short in-memory cache of these frames (already 0022 * converted into KisOpenGLUpdateInfo) 0023 * 0024 * 2) Pass all the other requests to the lower-level API, 0025 * like KisFrameCacheStore 0026 */ 0027 0028 class KRITAUI_EXPORT KisFrameCacheSwapper : public KisAbstractFrameCacheSwapper 0029 { 0030 public: 0031 KisFrameCacheSwapper(const KisOpenGLUpdateInfoBuilder &builder); 0032 KisFrameCacheSwapper(const KisOpenGLUpdateInfoBuilder &builder, const QString &frameCachePath); 0033 ~KisFrameCacheSwapper(); 0034 0035 // WARNING: after transferring \p info to saveFrame() the object becomes invalid 0036 void saveFrame(int frameId, KisOpenGLUpdateInfoSP info, const QRect &imageBounds) override; 0037 KisOpenGLUpdateInfoSP loadFrame(int frameId) override; 0038 0039 void moveFrame(int srcFrameId, int dstFrameId) override; 0040 0041 void forgetFrame(int frameId) override; 0042 bool hasFrame(int frameId) const override; 0043 0044 int frameLevelOfDetail(int frameId) const override; 0045 0046 QRect frameDirtyRect(int frameId) const override; 0047 0048 private: 0049 struct Private; 0050 const QScopedPointer<Private> m_d; 0051 }; 0052 0053 #endif // KISFRAMECACHESWAPPER_H