From: Andreas Monzner Date: Fri, 27 Oct 2006 15:59:14 +0000 (+0000) Subject: fix subtitle clipping X-Git-Tag: 2.6.0~2833 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/5269c92e934374c44e770bfc2831a7164d3fefca fix subtitle clipping add 5 seconds hide timeout for dvb subtitles --- diff --git a/data/skin_default.xml b/data/skin_default.xml index 19d6d666..f2f1aba5 100644 --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -310,7 +310,7 @@ - + diff --git a/lib/gui/esubtitle.cpp b/lib/gui/esubtitle.cpp index 7e472b36..af96ef8c 100644 --- a/lib/gui/esubtitle.cpp +++ b/lib/gui/esubtitle.cpp @@ -10,32 +10,41 @@ */ eSubtitleWidget::eSubtitleWidget(eWidget *parent) - : eWidget(parent) + : eWidget(parent), m_hide_subtitles_timer(eApp) { setBackgroundColor(gRGB(0,0,0,255)); m_page_ok = 0; m_dvb_page_ok = 0; + CONNECT(m_hide_subtitles_timer.timeout, eSubtitleWidget::clearPage); } void eSubtitleWidget::setPage(const eDVBTeletextSubtitlePage &p) { m_page = p; m_page_ok = 1; - invalidate(); + m_hide_subtitles_timer.start(5000, true); + invalidate(); // FIXME } void eSubtitleWidget::setPage(const eDVBSubtitlePage &p) { m_dvb_page = p; + invalidate(m_visible_region); // invalidate old visible regions + m_visible_region.rects.clear(); + for (std::list::iterator it(m_dvb_page.m_regions.begin()); it != m_dvb_page.m_regions.end(); ++it) + m_visible_region.rects.push_back(eRect(it->m_position, it->m_pixmap->size())); m_dvb_page_ok = 1; - invalidate(); + m_hide_subtitles_timer.start(5000, true); + invalidate(m_visible_region); // invalidate new regions } void eSubtitleWidget::clearPage() { + eDebug("subtitle timeout... hide"); m_page_ok = 0; m_dvb_page_ok = 0; - invalidate(); + invalidate(m_visible_region); + m_visible_region.rects.clear(); } int eSubtitleWidget::event(int event, void *data, void *data2) @@ -70,7 +79,6 @@ int eSubtitleWidget::event(int event, void *data, void *data2) } else if (m_dvb_page_ok) { - painter.setOffset(ePoint(0,0)); for (std::list::iterator it(m_dvb_page.m_regions.begin()); it != m_dvb_page.m_regions.end(); ++it) painter.blit(it->m_pixmap, it->m_position); } diff --git a/lib/gui/esubtitle.h b/lib/gui/esubtitle.h index ad4b523b..4d65e177 100644 --- a/lib/gui/esubtitle.h +++ b/lib/gui/esubtitle.h @@ -7,7 +7,7 @@ class eDVBTeletextSubtitlePage; -class eSubtitleWidget: public eWidget +class eSubtitleWidget: public eWidget, public Object { public: eSubtitleWidget(eWidget *parent); @@ -15,7 +15,7 @@ public: void setPage(const eDVBTeletextSubtitlePage &p); void setPage(const eDVBSubtitlePage &p); void clearPage(); - + protected: int event(int event, void *data=0, void *data2=0); @@ -25,6 +25,10 @@ private: int m_dvb_page_ok; eDVBSubtitlePage m_dvb_page; + + eTimer m_hide_subtitles_timer; + + gRegion m_visible_region; }; #endif