Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_memento.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2005 C. Boemann <cbo@boemann.dk>
3 * (c) 2009 Dmitry Kazakov <dimula73@gmail.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#ifndef KIS_MEMENTO_H_
9#define KIS_MEMENTO_H_
10
11#include <QtGlobal>
12#include <QRect>
13
14#include "kis_global.h"
15
16#include <kis_shared.h>
17#include <kis_shared_ptr.h>
18
19
21
22class KisMemento;
24
25
26class KisMemento : public KisShared
27{
28public:
38
39 inline ~KisMemento() {
40 delete[] m_oldDefaultPixel;
41 delete[] m_newDefaultPixel;
42 }
43
44 inline void extent(qint32 &x, qint32 &y, qint32 &w, qint32 &h) {
45 const bool extentIsValid =
47
48 if (extentIsValid) {
49 x = m_extentMinX;
50 y = m_extentMinY;
51 w = m_extentMaxX - m_extentMinX + 1;
52 h = m_extentMaxY - m_extentMinY + 1;
53 } else {
54 x = 0;
55 y = 0;
56 w = 0;
57 h = 0;
58 }
59 }
60
61 inline QRect extent() {
62 qint32 x, y, w, h;
63 extent(x, y, w, h);
64 return QRect(x, y, w, h);
65 }
66
67 void saveOldDefaultPixel(const quint8* pixel, quint32 pixelSize) {
68 m_oldDefaultPixel = new quint8[pixelSize];
69 memcpy(m_oldDefaultPixel, pixel, pixelSize);
70 }
71
72 void saveNewDefaultPixel(const quint8* pixel, quint32 pixelSize) {
73 m_newDefaultPixel = new quint8[pixelSize];
74 memcpy(m_newDefaultPixel, pixel, pixelSize);
75 }
76
77 const quint8* oldDefaultPixel() const {
78 return m_oldDefaultPixel;
79 }
80
81 const quint8* newDefaultPixel() const {
82 return m_newDefaultPixel;
83 }
84
85private:
86 friend class KisMementoManager;
87
88 inline void updateExtent(qint32 col, qint32 row, QMutex *currentMementoExtentLock) {
89 const qint32 tileMinX = col * KisTileData::WIDTH;
90 const qint32 tileMinY = row * KisTileData::HEIGHT;
91 const qint32 tileMaxX = tileMinX + KisTileData::WIDTH - 1;
92 const qint32 tileMaxY = tileMinY + KisTileData::HEIGHT - 1;
93
94 {
103 QMutexLocker l(currentMementoExtentLock);
104 m_extentMinX = qMin(m_extentMinX, tileMinX);
105 m_extentMaxX = qMax(m_extentMaxX, tileMaxX);
106 m_extentMinY = qMin(m_extentMinY, tileMinY);
107 m_extentMaxY = qMax(m_extentMaxY, tileMaxY);
108 }
109 }
110
111private:
114
119};
120
121#endif // KIS_MEMENTO_H_
QRect extent()
Definition kis_memento.h:61
void extent(qint32 &x, qint32 &y, qint32 &w, qint32 &h)
Definition kis_memento.h:44
const quint8 * newDefaultPixel() const
Definition kis_memento.h:81
KisMemento(KisMementoManager *)
Definition kis_memento.h:29
const quint8 * oldDefaultPixel() const
Definition kis_memento.h:77
void saveNewDefaultPixel(const quint8 *pixel, quint32 pixelSize)
Definition kis_memento.h:72
quint8 * m_newDefaultPixel
qint32 m_extentMaxY
qint32 m_extentMinX
quint8 * m_oldDefaultPixel
void saveOldDefaultPixel(const quint8 *pixel, quint32 pixelSize)
Definition kis_memento.h:67
qint32 m_extentMaxX
void updateExtent(qint32 col, qint32 row, QMutex *currentMementoExtentLock)
Definition kis_memento.h:88
qint32 m_extentMinY
static const qint32 HEIGHT
static const qint32 WIDTH
const qint32 qint32_MIN
Definition kis_global.h:30
const qint32 qint32_MAX
Definition kis_global.h:29
KisSharedPtr< KisMemento > KisMementoSP
Definition kis_memento.h:23