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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
/*
* $Id: render.h,v 1.5 2004/12/08 18:47:37 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_RENDER_H
#define VDR_TEXT2SKIN_RENDER_H
#include "common.h"
#include "scroller.h"
#include "xml/skin.h"
#include "xml/type.h"
#include <vdr/osd.h>
#include <vdr/skins.h>
#include <vdr/thread.h>
class cChannel;
class cEvent;
class cText2SkinLoader;
class cText2SkinI18n;
class cText2SkinTheme;
class cText2SkinScreen;
class cText2SkinRender: public cThread {
friend class cText2SkinDisplayChannel;
friend class cText2SkinDisplayVolume;
friend class cText2SkinDisplayReplay;
friend class cText2SkinDisplayMessage;
friend class cText2SkinDisplayMenu;
/* Skin Editor */
friend class VSkinnerScreen;
private:
static cText2SkinRender *mRender;
cxSkin *mSkin;
cxDisplay *mDisplay;
cText2SkinI18n *mI18n;
cText2SkinTheme *mTheme;
cText2SkinScreen *mScreen;
cText2SkinScroller *mScroller;
std::string mBasePath;
bool mDirty;
// update thread
bool mActive;
cCondVar mDoUpdate;
cMutex mMutex;
cCondVar mStarted;
int mUpdateIn;
// coordinate transformation
txSize mBaseSize;
protected:
// Update thread
void Lock(void) { mMutex.Lock(); }
void Unlock(void) { mMutex.Unlock(); }
virtual void Action(void);
// Drawing operations
void DrawObject(const cxObject *Object);
void DrawBackground(const txPoint &Pos, const txSize &Size, const tColor *Bg, const tColor *Fg,
int Alpha, const std::string &Path);
void DrawImage(const txPoint &Pos, const tColor *Bg, const tColor *Fg, int Alpha,
const std::string &Path);
void DrawText(const txPoint &Pos, const txSize &Size, const tColor *Fg,
const std::string &Text, const cFont *Font, int Align);
void DrawRectangle(const txPoint &Pos, const txSize &Size,
const tColor *Fg);
void DrawEllipse(const txPoint &Pos, const txSize &Size, const tColor *Fg,
int Arc);
void DrawSlope(const txPoint &Pos, const txSize &Size, const tColor *Fg,
int Arc);
void DrawProgressbar(const txPoint &Pos, const txSize &Size, int Current,
int Total, const tColor *Fg, const tColor *Bg,
const tColor *Selected, const tColor *Mark, const tColor *Cur,
const cMarks *Marks = NULL);
void DrawMark(const txPoint &Pos, const txSize &Size, bool Start,
bool Current, bool Horizontal, const tColor *Mark,
const tColor *Cur);
void DrawScrolltext(const txPoint &Pos, const txSize &Size,
const tColor *Fg, const std::string &Text, const cFont *Font, int Align);
void DrawScrollbar(const txPoint &Pos, const txSize &Size, const tColor *Bg, const tColor *Fg);
void Update(void);
// all renderers shall return appropriate data for the tokens
virtual cxType GetTokenData(const txToken &Token);
// the replay renderer shall return its marks here
virtual const cMarks *GetMarks(void) const { return NULL; }
// the menu renderer shall return its tab information here
virtual int GetTab(int n) { return 0; }
virtual bool HasTabText(int Index, int n) { return false; }
virtual void SetEditableWidth(int Width) {}
// functions for display renderer to control behaviour
void Flush(bool Force = false);
void SetDirty(void) { mDirty = true; }
void Scroll(bool Up, bool Page) { if (mScroller) mScroller->Scroll(Up, Page); }
void Clear(void) { DELETENULL(mScroller); }
public:
cText2SkinRender(cText2SkinLoader *Loader, cxDisplay::eType Section, const std::string &BasePath = "",
bool OffScreen = false);
virtual ~cText2SkinRender();
// functions for object classes to obtain dynamic item information
static txPoint Transform(const txPoint &Pos);
static bool ItemColor(const std::string &Color, tColor &Result);
static std::string ImagePath(const std::string &Filename);
static cxType GetToken(const txToken &Token);
};
inline void cText2SkinRender::Flush(bool Force) {
if (mDirty || Force) {
Lock();
mDoUpdate.Broadcast();
Unlock();
mDirty = false;
}
}
#endif // VDR_TEXT2SKIN_RENDER_H
|