summaryrefslogtreecommitdiff
path: root/render.h
diff options
context:
space:
mode:
Diffstat (limited to 'render.h')
-rw-r--r--render.h18
1 files changed, 12 insertions, 6 deletions
diff --git a/render.h b/render.h
index c51bed7..241e908 100644
--- a/render.h
+++ b/render.h
@@ -48,7 +48,8 @@ private:
tTokenCache mTokenCache;
std::string mBasePath;
- bool mDirty;
+ uint mDirty; // bit mask of required updates - set by SetDirty()
+ std::vector<int> mDirtyItems;
uint mMaxItems;
cSkin *mFallback;
@@ -60,6 +61,7 @@ private:
cCondVar mStarted;
uint mUpdateIn;
uint mNow; // timestamp to calculate update timings
+ bool mFirst; // First drawing of the display -> draw everything
// coordinate transformation
txSize mBaseSize;
@@ -90,7 +92,7 @@ protected:
// Drawing operations
void DrawObject(cxObject *Object, const txPoint &BaseOffset=txPoint(-1,-1),
const txSize &BaseSize=txSize(-1,-1),
- int ListItem=-1 );
+ int ListItem=-1, bool ForceUpdate=false);
void DrawItemText(cxObject *o, int i, const txPoint &ListOffset, const txSize &ListSize);
void DrawBackground(const txPoint &Pos, const txSize &Size, const tColor *Bg, const tColor *Fg,
@@ -130,7 +132,8 @@ protected:
// functions for display renderer to control behaviour
void Flush(bool Force = false);
- void SetDirty(void) { mDirty = true; }
+ void SetDirty( cxRefresh::eRefreshType type=cxRefresh::all) {
+ mDirty |= 1<<type; }
void Scroll(bool Up, bool Page) { if (mScroller != NULL) mScroller->Scroll(Up, Page); }
void Clear(void) { DELETENULL(mScroller); }
cSkin *Fallback(void) const { return mFallback; }
@@ -179,14 +182,17 @@ public:
inline void cText2SkinRender::Flush(bool Force)
{
- if (mDirty || Force) {
+ if( Force ) {
+ // do a full redraw
+ mDirty = (1 << cxRefresh::all);
+ }
+
+ if (mDirty>0) {
mTokenCache.clear();
UpdateLock();
mDoUpdate.Broadcast();
UpdateUnlock();
-
- mDirty = false;
}
}