<screen name="PictureInPicture" position="400,60" size="240,192" zPosition="-1" flags="wfNoBorder" >
<widget name="video" position="0,0" size="240,192" />
</screen>
- <screen name="SubtitleDisplay" position="50,300" size="620,200" zPosition="-1" flags="wfNoBorder" >
+ <screen name="SubtitleDisplay" position="0,0" size="720,568" zPosition="-1" flags="wfNoBorder" >
</screen>
<screen name="PiPSetup" backgroundColor="transparent" position="70,400" size="600,150" title="PiPSetup" flags="wfNoBorder">
<widget name="text" position="0,0" size="600,150" font="Regular;23" />
*/
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)
}
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);
}
class eDVBTeletextSubtitlePage;
-class eSubtitleWidget: public eWidget
+class eSubtitleWidget: public eWidget, public Object
{
public:
eSubtitleWidget(eWidget *parent);
void setPage(const eDVBTeletextSubtitlePage &p);
void setPage(const eDVBSubtitlePage &p);
void clearPage();
-
+
protected:
int event(int event, void *data=0, void *data2=0);
int m_dvb_page_ok;
eDVBSubtitlePage m_dvb_page;
+
+ eTimer m_hide_subtitles_timer;
+
+ gRegion m_visible_region;
};
#endif