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