small code cleanup, fix memleaks
[enigma2.git] / lib / gui / esubtitle.h
index c88df0e689509bb1013a5a9208f04bba4e9b7f12..cdad7286cab7cd8e7ce3b7e29a4b4361b272440a 100644 (file)
@@ -8,26 +8,36 @@
 struct ePangoSubtitlePageElement
 {
        gRGB m_color;
+       bool m_have_color;
        std::string m_pango_line;
        eRect m_area;
        ePangoSubtitlePageElement(const gRGB &color, const std::string &text)
-               : m_color(color), m_pango_line(text)
+               : m_color(color), m_have_color(true), m_pango_line(text)
+       {
+       }
+       ePangoSubtitlePageElement(const std::string &text)
+               : m_have_color(false), m_pango_line(text)
        {
        }
 };
 
 struct ePangoSubtitlePage
 {
-       pts_t m_pts;
-       int m_have_pts;
+       pts_t m_show_pts;
        int m_timeout; /* in milliseconds */
        std::vector<ePangoSubtitlePageElement> m_elements;
        void clear() { m_elements.clear(); }
 };
 
+struct eVobSubtitlePage
+{
+       pts_t m_show_pts;
+       int m_timeout; /* in milliseconds */
+       ePtr<gPixmap> m_pixmap;
+};
+
 class eDVBTeletextSubtitlePage;
-class eDVBPangoSubtitlePage;
-class ePangoSubtitlePage;
+class eDVBSubtitlePage;
 
 class eSubtitleWidget: public eWidget, public Object
 {
@@ -38,11 +48,22 @@ public:
        void setPage(const eDVBSubtitlePage &p);
        void setPage(const ePangoSubtitlePage &p);
        void clearPage();
+       void setPixmap(ePtr<gPixmap> &pixmap, gRegion changed, eRect dest = eRect(0, 0, 720, 576));
+
+       typedef enum { Subtitle_TTX, Subtitle_Regular, Subtitle_Bold, Subtitle_Italic, Subtitle_MAX } subfont_t;
+       struct eSubtitleStyle
+       {
+               subfont_t face;
+               int have_foreground_color, have_shadow_color;
+               gRGB foreground_color, shadow_color;
+               ePoint shadow_offset;
+               ePtr<gFont> font;
+       };
+
+       static void setFontStyle(subfont_t face, gFont *font, int autoColor, const gRGB &col, const gRGB &shadowCol, const ePoint &shadowOffset);
 
-       void setPixmap(ePtr<gPixmap> &pixmap, gRegion changed);
 protected:
        int event(int event, void *data=0, void *data2=0);
-
 private:
        int m_page_ok;
        eDVBTeletextSubtitlePage m_page;
@@ -57,7 +78,10 @@ private:
 
        gRegion m_visible_region;
 
+       static eSubtitleStyle subtitleStyles[Subtitle_MAX];
+
        ePtr<gPixmap> m_pixmap;  // pixmap to paint on next evtPaint
+       eRect m_pixmap_dest;
 };
 
 #endif