Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_legacy_tile_compressor.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2010 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
9#include <QIODevice>
10
11#define TILE_DATA_SIZE(pixelSize) ((pixelSize) * KisTileData::WIDTH * KisTileData::HEIGHT)
12
16
20
22{
23 const qint32 tileDataSize = TILE_DATA_SIZE(tile->pixelSize());
24
25 const qint32 bufferSize = maxHeaderLength() + 1;
26 QScopedArrayPointer<quint8> headerBuffer(new quint8[bufferSize]);
27
28 bool retval = writeHeader(tile, headerBuffer.data());
29 Q_ASSERT(retval); // currently the code returns true unconditionally
30 if (!retval) {
31 return false;
32 }
33
34 store.write((char *)headerBuffer.data(), strlen((char *)headerBuffer.data()));
35
36 tile->lockForRead();
37 retval = store.write((char *)tile->data(), tileDataSize);
38 tile->unlockForRead();
39
40 return retval;
41}
42
44{
45 const qint32 tileDataSize = TILE_DATA_SIZE(pixelSize(dm));
46
47 const qint32 bufferSize = maxHeaderLength() + 1;
48 quint8 *headerBuffer = new quint8[bufferSize];
49
50 qint32 x, y;
51 qint32 width, height;
52
53 stream->readLine((char *)headerBuffer, bufferSize);
54 sscanf((char *) headerBuffer, "%d,%d,%d,%d", &x, &y, &width, &height);
55
56 qint32 row = yToRow(dm, y);
57 qint32 col = xToCol(dm, x);
58
59 KisTileSP tile = dm->getTile(col, row, true);
60
61 tile->lockForWrite();
62 stream->read((char *)tile->data(), tileDataSize);
63 tile->unlockForWrite();
64
65 return true;
66}
67
69 quint8 *buffer,
70 qint32 bufferSize,
71 qint32 &bytesWritten)
72{
73 bytesWritten = 0;
74 const qint32 tileDataSize = TILE_DATA_SIZE(tileData->pixelSize());
75 Q_UNUSED(bufferSize);
76 Q_ASSERT(bufferSize >= tileDataSize);
77 memcpy(buffer, tileData->data(), tileDataSize);
78 bytesWritten += tileDataSize;
79}
80
82 qint32 bufferSize,
83 KisTileData *tileData)
84{
85 const qint32 tileDataSize = TILE_DATA_SIZE(tileData->pixelSize());
86 if (bufferSize >= tileDataSize) {
87 memcpy(tileData->data(), buffer, tileDataSize);
88 return true;
89 }
90 return false;
91}
92
94{
95 return TILE_DATA_SIZE(tileData->pixelSize());
96}
97
99{
100 static const qint32 LEGACY_MAGIC_NUMBER = 79;
101 return LEGACY_MAGIC_NUMBER;
102}
103
105 quint8 *buffer)
106{
107 qint32 x, y;
108 qint32 width, height;
109
110 tile->extent().getRect(&x, &y, &width, &height);
111 sprintf((char *)buffer, "%d,%d,%d,%d\n", x, y, width, height);
112
113 return true;
114}
qint32 xToCol(KisTiledDataManager *dm, qint32 x)
qint32 yToRow(KisTiledDataManager *dm, qint32 y)
qint32 pixelSize(KisTiledDataManager *dm)
bool writeTile(KisTileSP tile, KisPaintDeviceWriter &store) override
bool writeHeader(KisTileSP tile, quint8 *buffer)
bool decompressTileData(quint8 *buffer, qint32 bufferSize, KisTileData *tileData) override
qint32 tileDataBufferSize(KisTileData *tileData) override
bool readTile(QIODevice *stream, KisTiledDataManager *dm) override
void compressTileData(KisTileData *tileData, quint8 *buffer, qint32 bufferSize, qint32 &bytesWritten) override
virtual bool write(const QByteArray &data)=0
quint32 pixelSize() const
quint8 * data() const
void lockForWrite()
Definition kis_tile.cc:221
void lockForRead() const
Definition kis_tile.cc:208
QRect extent() const
Definition kis_tile.h:99
void unlockForWrite()
Definition kis_tile.cc:264
void unlockForRead() const
Definition kis_tile.cc:275
quint8 * data() const
Definition kis_tile.h:85
qint32 pixelSize() const
Definition kis_tile.h:113
KisTileSP getTile(qint32 col, qint32 row, bool writable)
#define TILE_DATA_SIZE(pixelSize)