From 41558bc41a72c62a0c9fd4fbf28df23a2fc2fa44 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 2 Jun 2006 17:13:26 +0000 Subject: [PATCH 1/1] add subtitle widget --- lib/gui/Makefile.am | 3 +- lib/gui/esubtitle.cpp | 73 +++++++++++++++++++++++++++++++++++++++++++ lib/gui/esubtitle.h | 25 +++++++++++++++ 3 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 lib/gui/esubtitle.cpp create mode 100644 lib/gui/esubtitle.h diff --git a/lib/gui/Makefile.am b/lib/gui/Makefile.am index f8aa13bd..a011e07d 100644 --- a/lib/gui/Makefile.am +++ b/lib/gui/Makefile.am @@ -8,4 +8,5 @@ libenigma_gui_a_SOURCES = \ ebutton.cpp elabel.cpp eslider.cpp ewidget.cpp ewidgetdesktop.cpp \ ewindow.cpp ewindowstyle.cpp elistbox.cpp elistboxcontent.cpp \ epixmap.cpp ewindowstyleskinned.cpp einput.cpp einputstring.cpp einputnumber.cpp \ - ewidgetanimation.cpp epositiongauge.cpp evideo.cpp + ewidgetanimation.cpp epositiongauge.cpp evideo.cpp esubtitle.cpp + diff --git a/lib/gui/esubtitle.cpp b/lib/gui/esubtitle.cpp new file mode 100644 index 00000000..933a6c62 --- /dev/null +++ b/lib/gui/esubtitle.cpp @@ -0,0 +1,73 @@ +#include +#include + + /* + ok, here's much room for improvements. + + first, the placing of the individual elements is sub-optimal. + then maybe a colored background would be an option. + .... + */ + +eSubtitleWidget::eSubtitleWidget(eWidget *parent) + : eWidget(parent) +{ + setBackgroundColor(gRGB(0,0,0,255)); +} + +void eSubtitleWidget::addPage(const eDVBTeletextSubtitlePage &p) +{ + eDebug("ADD Subtitle Page!!"); + m_pages.clear(); + m_pages.push_back(p); + checkTiming(); +} + +void eSubtitleWidget::checkTiming() +{ + activatePage(); +} + +void eSubtitleWidget::activatePage() +{ + invalidate(); +} + +int eSubtitleWidget::event(int event, void *data, void *data2) +{ + switch (event) + { + case evtPaint: + { + ePtr style; + gPainter &painter = *(gPainter*)data2; + + getStyle(style); + + eWidget::event(event, data, data2); + ePtr font = new gFont("Regular", 30); + painter.setFont(font); + + std::list::iterator pi = m_pages.begin(); + if (pi == m_pages.end()) + painter.renderText(eRect(ePoint(0, 0), size()), "waiting for subtitles...", gPainter::RT_WRAP); + else + { + const eDVBTeletextSubtitlePage &page = *pi; + int elements = page.m_elements.size(); + int height = size().height(); + int size_per_element = height / (elements ? elements : 1); + for (int i=0; i +#include + +class eDVBTeletextSubtitlePage; + +class eSubtitleWidget: public eWidget +{ +public: + eSubtitleWidget(eWidget *parent); + + void addPage(const eDVBTeletextSubtitlePage &p); + void checkTiming(); + void activatePage(); + +protected: + int event(int event, void *data=0, void *data2=0); + +private: + std::list m_pages; +}; + +#endif -- 2.30.2