diff --git a/src/gui/components/cc_draw.cpp b/src/gui/components/cc_draw.cpp index eedd3c3f1..87cec83a1 100644 --- a/src/gui/components/cc_draw.cpp +++ b/src/gui/components/cc_draw.cpp @@ -629,16 +629,32 @@ void CCDraw::paintFbItems(bool do_save_bg) fbdata.pixbuf = getScreen(fbdata.x, fbdata.y, fbdata.dx, fbdata.dy); } } - is_painted = v_fbdata[i].is_painted = true; + v_fbdata[i].is_painted = true; OnAfterPaintBg(); } } } } + + //set is_painted attribut. if any layer was painted set it to true; + is_painted = isPainted(); + //pick up signal if filled OnAfterPaintLayers(); } + bool CCDraw::isPainted() + { + if (firstPaint) + return false; + + for(size_t i=0; i< v_fbdata.size(); i++) + if (v_fbdata[i].is_painted) + return true; + + return false; + } + void CCDraw::hide() { OnBeforeHide(); @@ -653,8 +669,8 @@ void CCDraw::hide() } } } - is_painted = false; firstPaint = true; + is_painted = isPainted(); OnAfterHide(); } @@ -700,7 +716,7 @@ void CCDraw::kill(const fb_pixel_t& bg_color, const int& corner_radius, const in if (fblayer_type == CC_FBDATA_TYPES){ firstPaint = true; - is_painted = false; + is_painted = isPainted(); } } diff --git a/src/gui/components/cc_draw.h b/src/gui/components/cc_draw.h index 47702562f..4220ec5a3 100644 --- a/src/gui/components/cc_draw.h +++ b/src/gui/components/cc_draw.h @@ -114,7 +114,7 @@ class CCDraw : public COSDFader, public CComponentsSignals ///status: true=component was painted for 1st time bool firstPaint; ///status: true=component was rendered - bool is_painted; +// bool is_painted; ///mode: true=activate rendering of basic elements (frame, shadow and body) bool paint_bg; ///mode: true=activate rendering of frame @@ -268,7 +268,7 @@ class CCDraw : public COSDFader, public CComponentsSignals virtual void disablePaintCache(){enablePaintCache(false);} ///returns paint mode, true=item was painted - virtual bool isPainted(){return is_painted;} + virtual bool isPainted(); ///allows paint of elementary item parts (shadow, frame and body), similar as background, set it usually to false, if item used in a form, returns true, if mode has changed, also cleans screnn buffer virtual bool doPaintBg(bool do_paint); ///allows paint frame around body, default true , NOTE: ignored if frame width = 0 diff --git a/src/gui/components/cc_frm.cpp b/src/gui/components/cc_frm.cpp index 5bba0af59..d8b132529 100644 --- a/src/gui/components/cc_frm.cpp +++ b/src/gui/components/cc_frm.cpp @@ -335,7 +335,8 @@ void CComponentsForm::exchangeCCItem(CComponentsItem* item_a, CComponentsItem* i void CComponentsForm::paintForm(bool do_save_bg) { //paint body - paintInit(do_save_bg); + if (!is_painted) + paintInit(do_save_bg); //paint paintCCItems(); diff --git a/src/gui/components/cc_frm_header.cpp b/src/gui/components/cc_frm_header.cpp index faef78453..28953cc17 100644 --- a/src/gui/components/cc_frm_header.cpp +++ b/src/gui/components/cc_frm_header.cpp @@ -362,10 +362,12 @@ void CComponentsHeader::enableClock(bool enable, const char* format, const char* { cch_cl_enable = enable; cch_cl_format = format; + if (cch_cl_obj && cch_cl_enable) + cch_cl_obj->clear(); if (sec_format_str) cch_cl_sec_format = sec_format_str; cch_cl_enable_run = run; - if (!enable){ + if (!cch_cl_enable){ if (cch_cl_obj){ cch_cl_enable_run = false; removeCCItem(cch_cl_obj); @@ -544,7 +546,7 @@ void CComponentsHeader::paint(bool do_save_bg) initCCItems(); //paint form contents - paintForm(do_save_bg); + CComponentsForm::paint(do_save_bg); //start clock if enabled if (cch_cl_obj){ diff --git a/src/gui/infoclock.cpp b/src/gui/infoclock.cpp index fa4f66c5b..23aa8e290 100644 --- a/src/gui/infoclock.cpp +++ b/src/gui/infoclock.cpp @@ -107,6 +107,7 @@ bool CInfoClock::StopInfoClock() { bool ret = Stop(); kill(); + clear(); return ret; } diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index aac4cdc7e..c40439fbc 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -252,6 +252,7 @@ void CInfoViewer::initClock() } CInfoClock::getInstance()->disableInfoClock(); + clock->clear(); clock->enableColBodyGradient(gradient_top, COL_INFOBAR_PLUS_0); clock->doPaintBg(!gradient_top); clock->enableTboxSaveScreen(gradient_top);