1 #include <lib/gui/esubtitle.h>
2 #include <lib/gdi/grc.h>
5 ok, here's much room for improvements.
7 first, the placing of the individual elements is sub-optimal.
8 then maybe a colored background would be an option.
12 eSubtitleWidget::eSubtitleWidget(eWidget *parent)
13 : eWidget(parent), m_hide_subtitles_timer(eApp)
15 setBackgroundColor(gRGB(0,0,0,255));
18 CONNECT(m_hide_subtitles_timer.timeout, eSubtitleWidget::clearPage);
21 void eSubtitleWidget::setPage(const eDVBTeletextSubtitlePage &p)
25 m_hide_subtitles_timer.start(5000, true);
26 invalidate(); // FIXME
29 void eSubtitleWidget::setPage(const eDVBSubtitlePage &p)
32 invalidate(m_visible_region); // invalidate old visible regions
33 m_visible_region.rects.clear();
34 for (std::list<eDVBSubtitleRegion>::iterator it(m_dvb_page.m_regions.begin()); it != m_dvb_page.m_regions.end(); ++it)
35 m_visible_region.rects.push_back(eRect(it->m_position, it->m_pixmap->size()));
37 m_hide_subtitles_timer.start(5000, true);
38 invalidate(m_visible_region); // invalidate new regions
41 void eSubtitleWidget::clearPage()
43 eDebug("subtitle timeout... hide");
46 invalidate(m_visible_region);
47 m_visible_region.rects.clear();
50 int eSubtitleWidget::event(int event, void *data, void *data2)
56 ePtr<eWindowStyle> style;
57 gPainter &painter = *(gPainter*)data2;
61 eWidget::event(event, data, data2);
62 ePtr<gFont> font = new gFont("Regular", 30);
63 painter.setFont(font);
65 /* if (!m_page_ok && !m_dvb_page_ok)
66 painter.renderText(eRect(ePoint(0, 0), size()), "waiting for subtitles...", gPainter::RT_WRAP);
69 int elements = m_page.m_elements.size();
70 int height = size().height();
71 int size_per_element = height / (elements ? elements : 1);
72 for (int i=0; i<elements; ++i)
74 painter.setForegroundColor(gRGB(0,0,0));
75 painter.renderText(eRect(2, size_per_element * i + 2, size().width(), size_per_element), m_page.m_elements[i].m_text, gPainter::RT_WRAP|gPainter::RT_VALIGN_CENTER|gPainter::RT_HALIGN_CENTER);
76 painter.setForegroundColor(m_page.m_elements[i].m_color);
77 painter.renderText(eRect(0, size_per_element * i, size().width(), size_per_element), m_page.m_elements[i].m_text, gPainter::RT_WRAP|gPainter::RT_VALIGN_CENTER|gPainter::RT_HALIGN_CENTER);
80 else if (m_dvb_page_ok)
82 for (std::list<eDVBSubtitleRegion>::iterator it(m_dvb_page.m_regions.begin()); it != m_dvb_page.m_regions.end(); ++it)
83 painter.blit(it->m_pixmap, it->m_position);
88 return eWidget::event(event, data, data2);