00001 #ifndef _GRAPHICS_H_
00002 #define _GRAPHICS_H_
00003
00004 #include <nds.h>
00005 #include "woopsiarray.h"
00006 #include "bitmapbase.h"
00007 #include "mutablebitmapbase.h"
00008 #include "graphicsunclipped.h"
00009
00010 namespace WoopsiUI {
00011
00012 class FontBase;
00013
00018 class Graphics : public GraphicsUnclipped {
00019 public:
00020
00025 Graphics(MutableBitmapBase* bitmap);
00026
00030 virtual inline ~Graphics() { };
00031
00038 const u16 getPixel(s16 x, s16 y) const;
00039
00046 virtual void drawPixel(s16 x, s16 y, u16 colour);
00047
00056 virtual void drawFilledRect(s16 x, s16 y, u16 width, u16 height, u16 colour);
00057
00065 virtual void drawHorizLine(s16 x, s16 y, u16 width, u16 colour);
00066
00074 virtual void drawVertLine(s16 x, s16 y, u16 height, u16 colour);
00075
00081 virtual void drawXORPixel(s16 x, s16 y);
00082
00089 virtual void drawXORHorizLine(s16 x, s16 y, u16 width);
00090
00097 virtual void drawXORVertLine(s16 x, s16 y, u16 height);
00098
00109 virtual void drawBitmap(s16 x, s16 y, u16 width, u16 height, const BitmapBase* bitmap, s16 bitmapX, s16 bitmapY);
00110
00124 virtual void drawBitmap(s16 x, s16 y, u16 width, u16 height, const BitmapBase* bitmap, s16 bitmapX, s16 bitmapY, u16 transparentColour);
00125
00132 virtual void floodFill(s16 x, s16 y, u16 newColour);
00133
00148 void copy(s16 sourceX, s16 sourceY, s16 destX, s16 destY, u16 width, u16 height);
00149
00157 void dim(s16 x, s16 y, u16 width, u16 height);
00158
00167 virtual void drawLine(s16 x1, s16 y1, s16 x2, s16 y2, u16 colour);
00168
00169 protected:
00170
00178 bool clipBitmapCoordinates(s16* x, s16* y, u16* width, u16* height);
00179
00187 bool popStack(s16* x, s16* y, WoopsiArray<s32>* stack);
00188
00195 void pushStack(s16 x, s16 y, WoopsiArray<s32>* stack);
00196
00207 u8 getClipLineOutCode(s16 x, s16 y, s16 xMin, s16 yMin, s16 xMax, s16 yMax);
00208
00212 inline Graphics(const Graphics& graphics) : GraphicsUnclipped(graphics) { };
00213 };
00214 }
00215
00216 #endif