00001 #ifndef _GRAPHICS_PORT_H_ 00002 #define _GRAPHICS_PORT_H_ 00003 00004 #include <nds.h> 00005 #include "gadget.h" 00006 #include "woopsiarray.h" 00007 #include "graphics.h" 00008 00009 namespace WoopsiUI { 00010 00011 class FontBase; 00012 class FrameBuffer; 00013 class BitmapBase; 00014 00044 class GraphicsPort { 00045 public: 00046 00089 GraphicsPort(const s16 x, const s16 y, const u16 width, const u16 height, const bool isEnabled, FrameBuffer* bitmap, const WoopsiArray<Rect>* clipRectList, const Rect* clipRect); 00090 00094 virtual inline ~GraphicsPort() { 00095 delete _graphics; 00096 }; 00097 00107 void setClipRect(const Rect& clipRect); 00108 00116 void getClipRect(Rect& rect) const; 00117 00122 inline const s16 getX() const { return _rect.x; }; 00123 00128 const s16 getY() const { return _rect.y; }; 00129 00136 void drawPixel(s16 x, s16 y, u16 colour); 00137 00146 void drawFilledRect(s16 x, s16 y, u16 width, u16 height, u16 colour); 00147 00155 void drawHorizLine(s16 x, s16 y, s16 width, u16 colour); 00156 00164 void drawVertLine(s16 x, s16 y, s16 height, u16 colour); 00165 00174 void drawRect(s16 x, s16 y, u16 width, u16 height, u16 colour); 00175 00185 void drawBevelledRect(s16 x, s16 y, u16 width, u16 height, u16 shineColour, u16 shadowColour); 00186 00194 virtual void drawCircle(s16 x0, s16 y0, u16 radius, u16 colour); 00195 00203 void drawFilledCircle(s16 x0, s16 y0, u16 radius, u16 colour); 00204 00212 virtual void drawXORPixel(s16 x, s16 y, u16 colour); 00213 00222 virtual void drawXORHorizLine(s16 x, s16 y, u16 width, u16 colour); 00223 00232 virtual void drawXORVertLine(s16 x, s16 y, u16 height, u16 colour); 00233 00243 virtual void drawXORRect(s16 x, s16 y, u16 width, u16 height, u16 colour); 00244 00254 virtual void drawFilledXORRect(s16 x, s16 y, u16 width, u16 height, u16 colour); 00255 00261 virtual void drawXORPixel(s16 x, s16 y); 00262 00269 void drawXORHorizLine(s16 x, s16 y, u16 width); 00270 00277 void drawXORVertLine(s16 x, s16 y, u16 height); 00278 00286 void drawXORRect(s16 x, s16 y, u16 width, u16 height); 00287 00295 void drawFilledXORRect(s16 x, s16 y, u16 width, u16 height); 00296 00304 void drawText(s16 x, s16 y, FontBase* font, const WoopsiString& string); 00305 00317 void drawText(s16 x, s16 y, FontBase* font, const WoopsiString& string, s32 startIndex, s32 length, u16 colour); 00318 00329 void drawText(s16 x, s16 y, FontBase* font, const WoopsiString& string, s32 startIndex, s32 length); 00330 00343 void drawBitmap(s16 x, s16 y, u16 width, u16 height, const BitmapBase* bitmap, s16 bitmapX, s16 bitmapY); 00344 00361 void drawBitmap(s16 x, s16 y, u16 width, u16 height, const BitmapBase* bitmap, s16 bitmapX, s16 bitmapY, u16 transparentColour); 00362 00377 virtual void drawBitmapGreyScale(s16 x, s16 y, u16 width, u16 height, const BitmapBase* bitmap, s16 bitmapX, s16 bitmapY); 00378 00387 void drawLine(s16 x1, s16 y1, s16 x2, s16 y2, u16 colour); 00388 00403 void copy(s16 sourceX, s16 sourceY, s16 destX, s16 destY, u16 width, u16 height); 00404 00418 void scroll(s16 x, s16 y, s16 xDistance, s16 yDistance, u16 width, u16 height, WoopsiArray<Rect>* revealedRects); 00419 00427 void dim(s16 x, s16 y, u16 width, u16 height); 00428 00436 void greyScale(s16 x, s16 y, u16 width, u16 height); 00437 00446 virtual void drawEllipse(s16 xCentre, s16 yCentre, s16 horizRadius, s16 vertRadius, u16 colour); 00447 00456 virtual void drawFilledEllipse(s16 xCentre, s16 yCentre, s16 horizRadius, s16 vertRadius, u16 colour); 00457 00458 private: 00459 WoopsiArray<Rect> _clipRectList; 00460 Rect _rect; 00461 bool _isEnabled; 00462 Graphics* _graphics; 00464 void convertPortToScreenSpace(s16* x, s16* y); 00465 void addClipRect(const Rect& clipRect); 00466 }; 00467 } 00468 00469 #endif