/* * copyright (c) 2006 Cyrille Berger * * this program is free software; you can redistribute it and/or modify * it under the terms of the gnu general public license as published by * the free software foundation; either version 2 of the license, or * (at your option) any later version. * * this program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. see the * gnu general public license for more details. * * you should have received a copy of the gnu general public license * along with this program; if not, write to the free software * foundation, inc., 675 mass ave, cambridge, ma 02139, usa. */ #ifndef KIS_TILED_RANDOM_ACCESSOR_H #define KIS_TILED_RANDOM_ACCESSOR_H #include #include #include #include class KisTile; class KisTiledRandomAccessor : public KShared { struct KisTileInfo { KisTile* tile; KisTile* oldtile; TQ_UINT8* data; const TQ_UINT8* oldData; TQ_INT32 area_x1, area_y1, area_x2, area_y2; }; public: KisTiledRandomAccessor(KisTiledDataManager *ktm, TQ_INT32 x, TQ_INT32 y, bool writable); ~KisTiledRandomAccessor(); private: inline TQ_UINT32 xToCol(TQ_UINT32 x) const { if (m_ktm) return m_ktm->xToCol(x); else return 0; }; inline TQ_UINT32 yToRow(TQ_UINT32 y) const { if (m_ktm) return m_ktm->yToRow(y); else return 0; }; KisTileInfo* fetchTileData(TQ_INT32 col, TQ_INT32 row); public: /// Move to a given x,y position, fetch tiles and data void moveTo(TQ_INT32 x, TQ_INT32 y); TQ_UINT8* rawData() const; const TQ_UINT8* oldRawData() const; private: KisTiledDataManager *m_ktm; KisTileInfo** m_tilesCache; TQ_UINT32 m_tilesCacheSize; TQ_INT32 m_pixelSize; TQ_UINT8* m_data; const TQ_UINT8* m_oldData; bool m_writable; static const TQ_UINT32 CACHESIZE; // Define the number of tiles we keep in cache }; #endif