Merge branch 'bug_537_vobsub' into experimental
[vuplus_dvbapp] / lib / gui / esubtitle.h
1 #ifndef __lib_gui_subtitle_h
2 #define __lib_gui_subtitle_h
3
4 #include <lib/gui/ewidget.h>
5 #include <lib/dvb/teletext.h>
6 #include <lib/dvb/subtitle.h>
7
8 struct ePangoSubtitlePageElement
9 {
10         gRGB m_color;
11         bool m_have_color;
12         std::string m_pango_line;
13         eRect m_area;
14         ePangoSubtitlePageElement(const gRGB &color, const std::string &text)
15                 : m_color(color), m_have_color(true), m_pango_line(text)
16         {
17         }
18         ePangoSubtitlePageElement(const std::string &text)
19                 : m_have_color(false), m_pango_line(text)
20         {
21         }
22 };
23
24 struct ePangoSubtitlePage
25 {
26         pts_t show_pts;
27         int m_timeout; /* in milliseconds */
28         std::vector<ePangoSubtitlePageElement> m_elements;
29         void clear() { m_elements.clear(); }
30 };
31
32 struct eVobSubtitlePage
33 {
34         pts_t show_pts;
35         int m_timeout; /* in milliseconds */
36         ePtr<gPixmap> m_pixmap;
37 };
38
39 class eDVBTeletextSubtitlePage;
40 class eDVBPangoSubtitlePage;
41 class ePangoSubtitlePage;
42 class eVobSubtitlePage;
43
44 class eSubtitleWidget: public eWidget, public Object
45 {
46 public:
47         eSubtitleWidget(eWidget *parent);
48         
49         void setPage(const eDVBTeletextSubtitlePage &p);
50         void setPage(const eDVBSubtitlePage &p);
51         void setPage(const ePangoSubtitlePage &p);
52         void clearPage();
53         void setPixmap(ePtr<gPixmap> &pixmap, gRegion changed, eRect dest = eRect(0, 0, 720, 576));
54
55         typedef enum { Subtitle_TTX, Subtitle_Regular, Subtitle_Bold, Subtitle_Italic, Subtitle_MAX } subfont_t;
56         struct eSubtitleStyle
57         {
58                 subfont_t face;
59                 int have_foreground_color, have_shadow_color;
60                 gRGB foreground_color, shadow_color;
61                 ePoint shadow_offset;
62                 ePtr<gFont> font;
63         };
64
65         static void setFontStyle(subfont_t face, gFont *font, int autoColor, const gRGB &col, const gRGB &shadowCol, const ePoint &shadowOffset);
66
67 protected:
68         int event(int event, void *data=0, void *data2=0);
69 private:
70         int m_page_ok;
71         eDVBTeletextSubtitlePage m_page;
72
73         int m_dvb_page_ok;
74         eDVBSubtitlePage m_dvb_page;
75
76         int m_pango_page_ok;
77         ePangoSubtitlePage m_pango_page;
78
79         ePtr<eTimer> m_hide_subtitles_timer;
80
81         gRegion m_visible_region;
82
83         static eSubtitleStyle subtitleStyles[Subtitle_MAX];
84
85         ePtr<gPixmap> m_pixmap;  // pixmap to paint on next evtPaint
86         eRect m_pixmap_dest;
87 };
88
89 #endif