Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_hline_iterator.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef _KIS_HLINE_ITERATOR_H_
8#define _KIS_HLINE_ITERATOR_H_
9
10#include "kis_base_iterator.h"
11#include "kritaimage_export.h"
12#include "kis_iterator_ng.h"
13
14class KRITAIMAGE_EXPORT KisHLineIterator2 : public KisHLineIteratorNG, public KisBaseIterator {
17
18public:
19 struct KisTileInfo {
22 quint8* data {nullptr};
23 quint8* oldData {nullptr};
24 };
25
26
27public:
28 KisHLineIterator2(KisDataManager *dataManager, qint32 x, qint32 y, qint32 w, qint32 offsetX, qint32 offsetY, bool writable, KisIteratorCompleteListener *listener);
29 ~KisHLineIterator2() override;
30
31 bool nextPixel() override;
32 void nextRow() override;
33 const quint8* oldRawData() const override;
34 const quint8* rawDataConst() const override;
35 quint8* rawData() override;
36 qint32 nConseqPixels() const override;
37 bool nextPixels(qint32 n) override;
38 qint32 x() const override;
39 qint32 y() const override;
40
41 void resetPixelPos() override;
42 void resetRowPos() override;
43
44private:
45 qint32 m_offsetX {0};
46 qint32 m_offsetY {0};
47
48 qint32 m_x {0}; // current x position
49 qint32 m_y {0}; // current y position
50 qint32 m_row {0}; // current row in tilemgr
51 quint32 m_index {0}; // current col in tilemgr
52 quint32 m_tileWidth {0};
53 quint8 *m_data {nullptr};
54 quint8 *m_oldData {nullptr};
55 bool m_havePixels {false};
56
57 qint32 m_right {0};
58 qint32 m_left {0};
59 qint32 m_top {0};
60 qint32 m_leftCol {0};
61 qint32 m_rightCol {0};
62
63 qint32 m_rightmostInTile {0}; // limited by the current tile border only
64
65 qint32 m_leftInLeftmostTile {0};
66 qint32 m_yInTile {0};
67
69 quint32 m_tilesCacheSize {0};
70
71private:
72
73 void switchToTile(qint32 xInTile);
74 void fetchTileDataForCache(KisTileInfo& kti, qint32 col, qint32 row);
75 void preallocateTiles();
76};
77#endif
virtual quint8 * rawData()=0
virtual qint32 y() const =0
virtual const quint8 * oldRawData() const =0
virtual const quint8 * rawDataConst() const =0
virtual qint32 x() const =0
virtual qint32 nConseqPixels() const =0
virtual bool nextPixel()=0
virtual bool nextPixels(qint32 n)=0
virtual void nextRow()=0
virtual void resetPixelPos()=0
virtual void resetRowPos()=0
QVector< KisTileInfo > m_tilesCache
KisHLineIterator2(const KisHLineIterator2 &)
KisHLineIterator2 & operator=(const KisHLineIterator2 &)
The KisIteratorCompleteListener struct is a special interface for notifying the paint device that an ...