aboutsummaryrefslogtreecommitdiff
path: root/lib/gui/esubtitle.cpp
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-10-27 15:59:14 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-10-27 15:59:14 +0000
commit5269c92e934374c44e770bfc2831a7164d3fefca (patch)
treed2a6dd5c0c8b653b22bfe37f00df2f042243f09c /lib/gui/esubtitle.cpp
parentf1ba8813bfe7a7ceedbf9175126264158ed85409 (diff)
downloadenigma2-5269c92e934374c44e770bfc2831a7164d3fefca.tar.gz
enigma2-5269c92e934374c44e770bfc2831a7164d3fefca.zip
fix subtitle clipping
add 5 seconds hide timeout for dvb subtitles
Diffstat (limited to 'lib/gui/esubtitle.cpp')
-rw-r--r--lib/gui/esubtitle.cpp18
1 files changed, 13 insertions, 5 deletions
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<eDVBSubtitleRegion>::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<eDVBSubtitleRegion>::iterator it(m_dvb_page.m_regions.begin()); it != m_dvb_page.m_regions.end(); ++it)
painter.blit(it->m_pixmap, it->m_position);
}