File indexing completed on 2024-05-12 16:01:50

0001 /*
0002  *  SPDX-FileCopyrightText: 2018 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisInMemoryFrameCacheSwapper.h"
0007 
0008 #include <QMap>
0009 #include <kis_update_info.h>
0010 
0011 
0012 struct KRITAUI_NO_EXPORT KisInMemoryFrameCacheSwapper::Private
0013 {
0014     QMap<int, KisOpenGLUpdateInfoSP> framesMap;
0015 };
0016 
0017 KisInMemoryFrameCacheSwapper::KisInMemoryFrameCacheSwapper()
0018     : m_d(new Private)
0019 {
0020 }
0021 
0022 KisInMemoryFrameCacheSwapper::~KisInMemoryFrameCacheSwapper()
0023 {
0024 }
0025 
0026 void KisInMemoryFrameCacheSwapper::saveFrame(int frameId, KisOpenGLUpdateInfoSP info, const QRect &imageBounds)
0027 {
0028     Q_UNUSED(imageBounds);
0029     KIS_SAFE_ASSERT_RECOVER_NOOP(!m_d->framesMap.contains(frameId));
0030 
0031     m_d->framesMap.insert(frameId, info);
0032 }
0033 
0034 KisOpenGLUpdateInfoSP KisInMemoryFrameCacheSwapper::loadFrame(int frameId)
0035 {
0036     KIS_SAFE_ASSERT_RECOVER_NOOP(m_d->framesMap.contains(frameId));
0037     return m_d->framesMap.value(frameId, KisOpenGLUpdateInfoSP());
0038 }
0039 
0040 void KisInMemoryFrameCacheSwapper::moveFrame(int srcFrameId, int dstFrameId)
0041 {
0042     KIS_SAFE_ASSERT_RECOVER_RETURN(m_d->framesMap.contains(srcFrameId));
0043     KIS_SAFE_ASSERT_RECOVER_NOOP(!m_d->framesMap.contains(dstFrameId));
0044 
0045     m_d->framesMap[dstFrameId] = m_d->framesMap[srcFrameId];
0046     m_d->framesMap.remove(srcFrameId);
0047 }
0048 
0049 void KisInMemoryFrameCacheSwapper::forgetFrame(int frameId)
0050 {
0051     KIS_SAFE_ASSERT_RECOVER_RETURN(m_d->framesMap.contains(frameId));
0052     m_d->framesMap.remove(frameId);
0053 }
0054 
0055 bool KisInMemoryFrameCacheSwapper::hasFrame(int frameId) const
0056 {
0057     return m_d->framesMap.contains(frameId);
0058 }
0059 
0060 int KisInMemoryFrameCacheSwapper::frameLevelOfDetail(int frameId) const
0061 {
0062     KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(m_d->framesMap.contains(frameId), 0);
0063     KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(!m_d->framesMap[frameId].isNull(), 0);
0064     return m_d->framesMap[frameId]->levelOfDetail();
0065 }
0066 
0067 QRect KisInMemoryFrameCacheSwapper::frameDirtyRect(int frameId) const
0068 {
0069     KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(m_d->framesMap.contains(frameId), QRect());
0070     KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(!m_d->framesMap[frameId].isNull(), QRect());
0071     return m_d->framesMap[frameId]->dirtyImageRect();
0072 }