20#ifndef KIS_RANDOM_ACCESSOR_H
21#define KIS_RANDOM_ACCESSOR_H
23#include <ksharedptr.h>
25#include <kis_global.h>
27class KisTiledRandomAccessor;
28typedef TDESharedPtr<KisTiledRandomAccessor> KisTiledRandomAccessorSP;
30class KisTiledDataManager;
32class KisRandomAccessor{
34 KisRandomAccessor(KisTiledDataManager *ktm, TQ_INT32 x, TQ_INT32 y, TQ_INT32 offsetx, TQ_INT32 offsety,
bool writable);
35 KisRandomAccessor(
const KisRandomAccessor& rhs);
39 void moveTo(TQ_INT32 x, TQ_INT32 y);
40 TQ_UINT8* rawData()
const;
41 const TQ_UINT8* oldRawData()
const;
43 KisTiledRandomAccessorSP m_accessor;
44 TQ_INT32 m_offsetx, m_offsety;
47class KisRandomAccessorPixelTrait {
49 inline KisRandomAccessorPixelTrait(KisRandomAccessor* underlyingAccessor, KisRandomAccessor* selectionAccessor) : m_underlyingAccessor(underlyingAccessor), m_selectionAccessor(selectionAccessor)
52 ~KisRandomAccessorPixelTrait() {
53 if(m_selectionAccessor)
54 delete m_selectionAccessor;
56 inline bool isSelected()
const
58 return (m_selectionAccessor) ? *(m_selectionAccessor->rawData()) > SELECTION_THRESHOLD : true;
60 inline TQ_UINT8 operator[](
int index)
const
61 {
return m_underlyingAccessor->rawData()[index]; };
65 inline TQ_UINT8 selectedness()
const
67 return (m_selectionAccessor) ? *(m_selectionAccessor->rawData()) : MAX_SELECTED;
75 inline TQ_UINT8 * selectionMask()
const
77 return ( m_selectionAccessor ) ? m_selectionAccessor->rawData() : 0;
80 inline void moveTo(TQ_INT32 x, TQ_INT32 y) {
if(m_selectionAccessor) m_selectionAccessor->moveTo(x,y); }
83 KisRandomAccessor* m_underlyingAccessor;
84 KisRandomAccessor* m_selectionAccessor;
87class KisRandomAccessorPixel :
public KisRandomAccessor,
public KisRandomAccessorPixelTrait {
89 KisRandomAccessorPixel(KisTiledDataManager *ktm, KisTiledDataManager *ktmselect, TQ_INT32 x, TQ_INT32 y, TQ_INT32 offsetx, TQ_INT32 offsety,
bool writable);
91 inline void moveTo(TQ_INT32 x, TQ_INT32 y) { KisRandomAccessor::moveTo(x,y); KisRandomAccessorPixelTrait::moveTo(x,y); }