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