fix subtitle clipping
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 27 Oct 2006 15:59:14 +0000 (15:59 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 27 Oct 2006 15:59:14 +0000 (15:59 +0000)
add 5 seconds hide timeout for dvb subtitles

data/skin_default.xml
lib/gui/esubtitle.cpp
lib/gui/esubtitle.h

index 19d6d66..f2f1aba 100644 (file)
        <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" />
index 7e472b3..af96ef8 100644 (file)
        */      
 
 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);
                }
index ad4b523..4d65e17 100644 (file)
@@ -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