// LineStencil.h #ifndef LineStencilh #define LineStencilh #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "PixelBlock.h" class CLineStencil { virtual WORD GetWidth() const =0; virtual WORD GetHeight() const =0; virtual DWORD* GetPointer(WORD x, WORD y) const =0; virtual void SetPixel(WORD x, WORD y, DWORD Colour) =0; virtual void BlendPixel(WORD x, WORD y, DWORD Colour, BYTE Transparency) =0; void Swap(WORD& a, WORD& b) {WORD t=a; a=b; b=t;} public: void Line(const CPoint& S, const CPoint& E, DWORD Colour); void Line(WORD x0, WORD y0, WORD x1, WORD y1, DWORD Colour); }; class CLinePainter : public CPixelPainter, public CLineStencil { // Plug LineStencil into PixelPainter: WORD GetWidth () const {return CPixelPainter::GetWidth();} WORD GetHeight () const {return CPixelPainter::GetHeight();} void SetPixel (WORD x, WORD y, DWORD Colour) {CPixelPainter::SetPixel(x,y,Colour);} DWORD GetPixel (WORD x, WORD y, DWORD Colour=0) const {return CPixelPainter::GetPixel(x,y,Colour);} DWORD* GetPointer(WORD x, WORD y) const {return CPixelPainter::GetPointer(x,y);} void BlendPixel(WORD x, WORD y, DWORD Colour, BYTE Transparency) {CPixelPainter::BlendPixel(x,y, Colour, Transparency);} public: CLinePainter() {} virtual ~CLinePainter() {} }; #endif // ndef LineStencilh