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 "rect.h"
00009 #include "woopsistring.h"
00010
00011 namespace WoopsiUI {
00012
00013 class FontBase;
00014
00019 class Graphics {
00020 public:
00021
00027 Graphics(MutableBitmapBase* bitmap, const Rect& clipRect);
00028
00032 virtual inline ~Graphics() { };
00033
00039 void setClipRect(const Rect& clipRect);
00040
00046 void getClipRect(Rect& rect) const;
00047
00054 const u16 getPixel(s16 x, s16 y) const;
00055
00062 virtual void drawPixel(s16 x, s16 y, u16 colour);
00063
00072 virtual void drawFilledRect(s16 x, s16 y, u16 width, u16 height, u16 colour);
00073
00081 virtual void drawHorizLine(s16 x, s16 y, u16 width, u16 colour);
00082
00090 virtual void drawVertLine(s16 x, s16 y, u16 height, u16 colour);
00091
00100 virtual void drawRect(s16 x, s16 y, u16 width, u16 height, u16 colour);
00101
00109 virtual void drawXORPixel(s16 x, s16 y, u16 colour);
00110
00119 virtual void drawXORHorizLine(s16 x, s16 y, u16 width, u16 colour);
00120
00129 virtual void drawXORVertLine(s16 x, s16 y, u16 height, u16 colour);
00130
00140 virtual void drawFilledXORRect(s16 x, s16 y, u16 width, u16 height, u16 colour);
00141
00151 virtual void drawXORRect(s16 x, s16 y, u16 width, u16 height, u16 colour);
00152
00158 virtual void drawXORPixel(s16 x, s16 y);
00159
00166 virtual void drawXORHorizLine(s16 x, s16 y, u16 width);
00167
00174 virtual void drawXORVertLine(s16 x, s16 y, u16 height);
00175
00183 virtual void drawXORRect(s16 x, s16 y, u16 width, u16 height);
00184
00192 virtual void drawFilledXORRect(s16 x, s16 y, u16 width, u16 height);
00193
00204 virtual void drawBitmap(s16 x, s16 y, u16 width, u16 height, const BitmapBase* bitmap, s16 bitmapX, s16 bitmapY);
00205
00219 virtual void drawBitmap(s16 x, s16 y, u16 width, u16 height, const BitmapBase* bitmap, s16 bitmapX, s16 bitmapY, u16 transparentColour);
00220
00233 virtual void drawBitmapGreyScale(s16 x, s16 y, u16 width, u16 height, const BitmapBase* bitmap, s16 bitmapX, s16 bitmapY);
00234
00241 virtual void floodFill(s16 x, s16 y, u16 newColour);
00242
00257 void copy(s16 sourceX, s16 sourceY, s16 destX, s16 destY, u16 width, u16 height);
00258
00266 void dim(s16 x, s16 y, u16 width, u16 height);
00267
00276 virtual void drawLine(s16 x1, s16 y1, s16 x2, s16 y2, u16 colour);
00277
00286 virtual void drawCircle(s16 x0, s16 y0, u16 radius, u16 colour);
00287
00296 virtual void drawFilledCircle(s16 x0, s16 y0, u16 radius, u16 colour);
00297
00306 virtual void drawEllipse(s16 xCentre, s16 yCentre, s16 horizRadius, s16 vertRadius, u16 colour);
00307
00316 virtual void drawFilledEllipse(s16 xCentre, s16 yCentre, s16 horizRadius, s16 vertRadius, u16 colour);
00317
00325 void greyScale(s16 x, s16 y, u16 width, u16 height);
00326
00334 virtual void drawText(s16 x, s16 y, FontBase* font, const WoopsiString& string);
00335
00348 virtual void drawText(s16 x, s16 y, FontBase* font, const WoopsiString& string, s32 startIndex, s32 length, u16 colour);
00349
00360 virtual void drawText(s16 x, s16 y, FontBase* font, const WoopsiString& string, s32 startIndex, s32 length);
00361
00375 virtual void scroll(s16 x, s16 y, s16 xDistance, s16 yDistance, u16 width, u16 height, WoopsiArray<Rect>* revealedRects);
00376
00386 virtual void drawBevelledRect(s16 x, s16 y, u16 width, u16 height, u16 shineColour, u16 shadowColour);
00387
00388 protected:
00389 MutableBitmapBase* _bitmap;
00390 u16 _width;
00391 u16 _height;
00392 Rect _clipRect;
00401 bool clipBitmapCoordinates(s16* x, s16* y, u16* width, u16* height);
00402
00410 bool popStack(s16* x, s16* y, WoopsiArray<s32>* stack);
00411
00418 void pushStack(s16 x, s16 y, WoopsiArray<s32>* stack);
00419
00430 u8 getClipLineOutCode(s16 x, s16 y, s16 xMin, s16 yMin, s16 xMax, s16 yMax);
00431
00440 void drawClippedLine(s16 x1, s16 y1, s16 x2, s16 y2, u16 colour);
00441
00453 void drawClippedBitmapGreyScale(s16 x, s16 y, u16 width, u16 height, const BitmapBase* bitmap, s16 bitmapX, s16 bitmapY);
00454
00465 bool clipCoordinates(s16* x1, s16* y1, s16* x2, s16* y2, const Rect& clipRect);
00466
00470 inline Graphics(const Graphics& graphics) { };
00471 };
00472 }
00473
00474 #endif