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 }