File indexing completed on 2024-06-09 04:22:22
0001 /* 0002 * SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef _KIS_HLINE_ITERATOR_H_ 0008 #define _KIS_HLINE_ITERATOR_H_ 0009 0010 #include "kis_base_iterator.h" 0011 #include "kritaimage_export.h" 0012 #include "kis_iterator_ng.h" 0013 0014 class KRITAIMAGE_EXPORT KisHLineIterator2 : public KisHLineIteratorNG, public KisBaseIterator { 0015 KisHLineIterator2(const KisHLineIterator2&); 0016 KisHLineIterator2& operator=(const KisHLineIterator2&); 0017 0018 public: 0019 struct KisTileInfo { 0020 KisTileSP tile; 0021 KisTileSP oldtile; 0022 quint8* data {nullptr}; 0023 quint8* oldData {nullptr}; 0024 }; 0025 0026 0027 public: 0028 KisHLineIterator2(KisDataManager *dataManager, qint32 x, qint32 y, qint32 w, qint32 offsetX, qint32 offsetY, bool writable, KisIteratorCompleteListener *listener); 0029 ~KisHLineIterator2() override; 0030 0031 bool nextPixel() override; 0032 void nextRow() override; 0033 const quint8* oldRawData() const override; 0034 const quint8* rawDataConst() const override; 0035 quint8* rawData() override; 0036 qint32 nConseqPixels() const override; 0037 bool nextPixels(qint32 n) override; 0038 qint32 x() const override; 0039 qint32 y() const override; 0040 0041 void resetPixelPos() override; 0042 void resetRowPos() override; 0043 0044 private: 0045 qint32 m_offsetX {0}; 0046 qint32 m_offsetY {0}; 0047 0048 qint32 m_x {0}; // current x position 0049 qint32 m_y {0}; // current y position 0050 qint32 m_row {0}; // current row in tilemgr 0051 quint32 m_index {0}; // current col in tilemgr 0052 quint32 m_tileWidth {0}; 0053 quint8 *m_data {nullptr}; 0054 quint8 *m_oldData {nullptr}; 0055 bool m_havePixels {false}; 0056 0057 qint32 m_right {0}; 0058 qint32 m_left {0}; 0059 qint32 m_top {0}; 0060 qint32 m_leftCol {0}; 0061 qint32 m_rightCol {0}; 0062 0063 qint32 m_rightmostInTile {0}; // limited by the current tile border only 0064 0065 qint32 m_leftInLeftmostTile {0}; 0066 qint32 m_yInTile {0}; 0067 0068 QVector<KisTileInfo> m_tilesCache; 0069 quint32 m_tilesCacheSize {0}; 0070 0071 private: 0072 0073 void switchToTile(qint32 xInTile); 0074 void fetchTileDataForCache(KisTileInfo& kti, qint32 col, qint32 row); 0075 void preallocateTiles(); 0076 }; 0077 #endif