diff --git a/lib/dvb/teletext.cpp b/lib/dvb/teletext.cpp index de4c6d7..1c7579f 100644 --- a/lib/dvb/teletext.cpp +++ b/lib/dvb/teletext.cpp @@ -655,7 +655,7 @@ void eDVBTeletextParser::connectNewPage(const Slot1 #include #include - +#include +#ifdef WITH_SDL +#include +#endif +#include /* ok, here's much room for improvements. @@ -17,6 +21,16 @@ eSubtitleWidget::eSubtitleWidget(eWidget *parent) m_page_ok = 0; m_dvb_page_ok = 0; m_pango_page_ok = 0; +#ifdef WITH_SDL + ePtr my_dc; + gSDLDC::getInstance(my_dc); +#else + ePtr my_dc; + gFBDC::getInstance(my_dc); +#endif + fontSize = std::ceil(28 * my_dc->getVerticalResolution() / 576); // PAL (576 lines) is default. For HD (more vertical resolution) we will increase font size, for NTSC we will decrease. + lineHeight = std::ceil(fontSize * 1.3); + //eDebug("Subtitle font size is %d", fontSize); CONNECT(m_hide_subtitles_timer->timeout, eSubtitleWidget::clearPage); } @@ -53,13 +67,13 @@ void eSubtitleWidget::setPage(const eDVBTeletextSubtitlePage &p) void eSubtitleWidget::setPage(const eDVBSubtitlePage &p) { - eDebug("setPage"); + //eDebug("setPage"); m_dvb_page = p; invalidate(m_visible_region); // invalidate old visible regions m_visible_region.rects.clear(); for (std::list::iterator it(m_dvb_page.m_regions.begin()); it != m_dvb_page.m_regions.end(); ++it) { - eDebug("add %d %d %d %d", it->m_position.x(), it->m_position.y(), it->m_pixmap->size().width(), it->m_pixmap->size().height()); + //eDebug("add %d %d %d %d", it->m_position.x(), it->m_position.y(), it->m_pixmap->size().width(), it->m_pixmap->size().height()); m_visible_region.rects.push_back(eRect(it->m_position, it->m_pixmap->size())); } m_dvb_page_ok = 1; @@ -100,7 +114,7 @@ void eSubtitleWidget::setPage(const ePangoSubtitlePage &p) void eSubtitleWidget::clearPage() { - eDebug("subtitle timeout... hide"); + //eDebug("subtitle timeout... hide"); m_page_ok = 0; m_dvb_page_ok = 0; m_pango_page_ok = 0; @@ -131,7 +145,8 @@ int eSubtitleWidget::event(int event, void *data, void *data2) else if (m_page_ok) { int elements = m_page.m_elements.size(); - ePtr font = new gFont("Regular", 38); + bool didMove = false; + ePtr font = new gFont("Regular", fontSize); painter.setFont(font); for (int i=0; i font = new gFont("Regular", 38); + ePtr font = new gFont("Regular", fontSize); for (int i=0; i +#include +#ifdef WITH_SDL +#include +#endif +#include + #include #include @@ -1968,6 +1974,35 @@ PyObject *eDVBServiceBase::getAll(bool original) return ret; } +ePoint eDVBServicePlay::getDvbSubtitlesMover() +{ + //if (!dvbSubtitlesMover) + //{ +#ifdef WITH_SDL + ePtr my_dc; + gSDLDC::getInstance(my_dc); +#else + ePtr my_dc; + gFBDC::getInstance(my_dc); +#endif + int vRes = my_dc->getVerticalResolution(); + int hRes = my_dc->getHorizontalResolution(); + int marginLeft = (int)(hRes / 2 - 720 / 2); + if (marginLeft < 0) // Just to be sure... + { + marginLeft = 0; + } + int marginTop = 0; + if (vRes > 576) + { + marginTop = (int)(vRes/2 - 576 / 2); + } + eDebug("servicedvb.cpp: vRes = %i, hRes = %i, marginLeft = %i, marginTop = %i", vRes, hRes, marginLeft, marginTop); + dvbSubtitlesMover = ePoint(marginLeft, marginTop); + //} + return dvbSubtitlesMover; +} + int eDVBServicePlay::getNumberOfSubservices() { ePtr evt; @@ -2636,6 +2671,7 @@ RESULT eDVBServicePlay::enableSubtitles(eWidget *parent, ePyObject tuple) m_subtitle_widget = new eSubtitleWidget(parent); m_subtitle_widget->resize(parent->size()); /* full size */ + m_subtitle_widget->move(getDvbSubtitlesMover()); // Center 720x576 subtitles in HD skins. TODO: Scale DVB subtitles. m_subtitle_parser->start(pid, composition_page_id, ancillary_page_id); if (m_dvb_service) m_dvb_service->setCacheEntry(eDVBService::cSUBTITLE, ((pid&0xFFFF)<<16)|((composition_page_id&0xFF)<<8)|(ancillary_page_id&0xFF)); diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h index 43e4690..9e3c6a6 100644 --- a/lib/service/servicedvb.h +++ b/lib/service/servicedvb.h @@ -10,6 +10,7 @@ #include #include #include +#include class eStaticServiceDVBInformation; class eStaticServiceDVBBouquetInformation; @@ -182,6 +183,8 @@ public: // iStreamableService RESULT stream(ePtr &ptr); PyObject *getStreamingData(); + + ePoint getDvbSubtitlesMover(); private: friend class eServiceFactoryDVB; eServiceReference m_reference; @@ -272,6 +275,7 @@ private: void newDVBSubtitlePage(const eDVBSubtitlePage &p); ePtr m_new_dvb_subtitle_page_connection; std::list m_dvb_subtitle_pages; + ePoint dvbSubtitlesMover; ePtr m_subtitle_sync_timer; void checkSubtitleTiming();