aboutsummaryrefslogtreecommitdiff
path: root/lib/gui/esubtitle.h
blob: 81f920ec386c4d422e5442b388c28096c54c32c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef __lib_gui_subtitle_h
#define __lib_gui_subtitle_h

#include <lib/gui/ewidget.h>
#include <lib/dvb/teletext.h>
#include <lib/dvb/subtitle.h>

struct ePangoSubtitlePageElement
{
	gRGB m_color;
	std::string m_pango_line;
	eRect m_area;
	ePangoSubtitlePageElement(const gRGB &color, const std::string &text)
		: m_color(color), m_pango_line(text)
	{
	}
};

struct ePangoSubtitlePage
{
	pts_t m_pts;
	int m_have_pts;
	int m_timeout; /* in milliseconds */
	std::vector<ePangoSubtitlePageElement> m_elements;
	void clear() { m_elements.clear(); }
};

class eDVBTeletextSubtitlePage;
class eDVBPangoSubtitlePage;
class ePangoSubtitlePage;

class eSubtitleWidget: public eWidget, public Object
{
public:
	eSubtitleWidget(eWidget *parent);
	
	void setPage(const eDVBTeletextSubtitlePage &p);
	void setPage(const eDVBSubtitlePage &p);
	void setPage(const ePangoSubtitlePage &p);
	void clearPage();

	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;

	int m_dvb_page_ok;
	eDVBSubtitlePage m_dvb_page;

	int m_pango_page_ok;
	ePangoSubtitlePage m_pango_page;

	eTimer m_hide_subtitles_timer;

	gRegion m_visible_region;

	ePtr<gPixmap> m_pixmap;  // pixmap to paint on next evtPaint
	std::string replace_all(const std::string &in, const std::string &entity, const std::string &symbol);
};

#endif