Woopsi 1.0
GUI Framework for Nintendo DS Homebrew

rectcache.h

00001 #ifndef _RECT_CACHE_H_
00002 #define _RECT_CACHE_H_
00003 
00004 #include "woopsiarray.h"
00005 #include "gadget.h"
00006 
00007 namespace WoopsiUI {
00008 
00014         class RectCache {
00015         public:
00016 
00021                 RectCache(const Gadget* gadget);
00022 
00026                 inline ~RectCache() {
00027                         delete _foregroundRegions;
00028                         delete _backgroundRegions;
00029                 };
00030 
00034                 void cache();
00035 
00039                 inline void invalidate() {
00040                         _foregroundInvalid = true;
00041                         _backgroundInvalid = true;
00042                 };
00043 
00049                 inline WoopsiArray<Rect>* getBackgroundRegions() { return _backgroundRegions; };
00050 
00058                 inline WoopsiArray<Rect>* getForegroundRegions() { return _foregroundRegions; };
00059 
00071                 void splitRectangles(WoopsiArray<Rect>* invalidRectangles, WoopsiArray<Rect>* validRects) const;
00072 
00082                 void removeOverlappedRects(WoopsiArray<Rect>* visibleRects, WoopsiArray<Rect>* invisibleRects, const Gadget* gadget) const;
00083 
00090                 void markRectsDamaged() const;
00091                 
00098                 void markRectDamaged(const Rect& rect) const;
00099 
00100         private:
00101                 WoopsiArray<Rect>* _foregroundRegions;                          
00102                 WoopsiArray<Rect>* _backgroundRegions;                          
00103                 const Gadget* _gadget;                                                          
00104                 bool _foregroundInvalid;                                                        
00105                 bool _backgroundInvalid;                                                        
00110                 void cacheForegroundRegions();
00111 
00115                 void cacheBackgroundRegions();
00116 
00117         };
00118 }
00119 
00120 #endif