From 81f26a327d0266621c58a859ca62dd9d79e3c65c Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 18 Jan 2017 11:59:21 +0100 Subject: [PATCH] CComponentsFrmClock: add slot to handle enforced repaint of segments If clock removed from screen and instance is not destroyed, then we must ensure repaint of segments after painted background. This is required if segments are only will paint if their content was changed and attribut ct_force_text_paint = false. --- src/gui/components/cc_frm_clock.cpp | 25 ++++++++++++++++++------- src/gui/components/cc_frm_clock.h | 7 ++++++- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/gui/components/cc_frm_clock.cpp b/src/gui/components/cc_frm_clock.cpp index d1a9cbc7a..ff5a7c9be 100644 --- a/src/gui/components/cc_frm_clock.cpp +++ b/src/gui/components/cc_frm_clock.cpp @@ -30,7 +30,7 @@ #include "cc_frm_clock.h" #include - +#include #include #include #include @@ -98,7 +98,10 @@ CComponentsFrmClock::CComponentsFrmClock( const int& x_pos, initParent(parent); //init slot for running clock - cl_sl = sigc::mem_fun0(*this, &CComponentsFrmClock::ShowTime); + cl_sl_show = sigc::mem_fun0(*this, &CComponentsFrmClock::ShowTime); + + //init slot to ensure paint segments after painted background + cl_sl_repaint = sigc::bind<0>(sigc::mem_fun1(*this, &CComponentsFrmClock::forceSegemnentsPaint), true); //run clock already if required if (activ) @@ -297,6 +300,11 @@ void CComponentsFrmClock::initCCLockItems() x_lbl += v_cc_items[i-1]->getWidth(); v_cc_items[i]->setPos(x_lbl, y_lbl); } + + //init slot to handle repaint of segments if background was repainted + OnAfterPaintBg.clear(); + if (paint_bg) + OnAfterPaintBg.connect(cl_sl_repaint); } @@ -321,7 +329,7 @@ bool CComponentsFrmClock::startClock() cl_timer = new CComponentsTimer(0); if (cl_timer->OnTimer.empty()){ dprintf(DEBUG_INFO,"\033[33m[CComponentsFrmClock]\t[%s] init slot...\033[0m\n", __func__); - cl_timer->OnTimer.connect(cl_sl); + cl_timer->OnTimer.connect(cl_sl_show); } } cl_timer->setTimerInterval(cl_interval); @@ -338,6 +346,7 @@ bool CComponentsFrmClock::stopClock() if (cl_timer){ if (cl_timer->stopTimer()){ dprintf(DEBUG_INFO, "[CComponentsFrmClock] [%s] stopping clock...\n", __func__); + clear(); delete cl_timer; cl_timer = NULL; return true; @@ -374,10 +383,6 @@ void CComponentsFrmClock::paint(bool do_save_bg) //paint form contents CComponentsForm::paint(do_save_bg); -#if 0 //has no effect - if (may_blit) - frameBuffer->blit(); -#endif } void CComponentsFrmClock::setClockFont(Font *font, const int& style) @@ -450,3 +455,9 @@ bool CComponentsFrmClock::enableColBodyGradient(const int& enable_mode, const fb } return false; } + +void CComponentsFrmClock::forceSegemnentsPaint(bool force) +{ + for (size_t i = 0; i < v_cc_items.size(); i++) + static_cast (v_cc_items[i])->forceTextPaint(force); +} diff --git a/src/gui/components/cc_frm_clock.h b/src/gui/components/cc_frm_clock.h index ddc5abbbb..89ed33e91 100644 --- a/src/gui/components/cc_frm_clock.h +++ b/src/gui/components/cc_frm_clock.h @@ -52,7 +52,10 @@ class CComponentsFrmClock : public CComponentsForm, public CCTextScreen protected: ///slot for timer event, reserved for ShowTime() - sigc::slot0 cl_sl; + sigc::slot0 cl_sl_show; + + ///slot for background paint event, reserved for initCCLockItems() + sigc::slot0 cl_sl_repaint; ///refresh interval in seconds int cl_interval; @@ -90,6 +93,8 @@ class CComponentsFrmClock : public CComponentsForm, public CCTextScreen void toggleFormat(); ///init internal font void initClockFont(int dx, int dy); + ///force repaint of all segments + void forceSegemnentsPaint(bool force); public: