openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
grc.h
Go to the documentation of this file.
1 #ifndef __grc_h
2 #define __grc_h
3 
4 /*
5  gPainter ist die high-level version. die highlevel daten werden zu low level opcodes ueber
6  die gRC-queue geschickt und landen beim gDC der hardwarespezifisch ist, meist aber auf einen
7  gPixmap aufsetzt (und damit unbeschleunigt ist).
8 */
9 
10 // for debugging use:
11 //#define SYNC_PAINT
12 #undef SYNC_PAINT
13 
14 #include <pthread.h>
15 #include <stack>
16 #include <list>
17 
18 #include <string>
19 #include <lib/base/elock.h>
20 #include <lib/base/message.h>
21 #include <lib/gdi/erect.h>
22 #include <lib/gdi/gpixmap.h>
23 #include <lib/gdi/region.h>
24 #include <lib/gdi/gfont.h>
25 #include <lib/gdi/compositing.h>
26 
27 class eTextPara;
28 
29 class gDC;
30 struct gOpcode
31 {
32  enum Opcode
33  {
37 
40 
43 
45 
48 
51 
53 
55 
57 
61 
63 
65 
69 #ifdef USE_LIBVUGLES2
70  sendShowItem,
71  setFlush,
72  setView,
73 #endif
74  } opcode;
75 
76  gDC *dc;
77  union para
78  {
79  struct pfillRect
80  {
82  } *fill;
83 
84  struct pfillRegion
85  {
88 
89  struct prenderText
90  {
92  char *text;
93  int flags;
94  int border;
96  int markedpos;
97  int scrollpos;
98  int *offset;
100 
101  struct prenderPara
102  {
106 
107  struct psetFont
108  {
111 
112  struct psetPalette
113  {
116 
117  struct pblit
118  {
120  int flags;
123  } *blit;
124 
126  {
129 
130  struct pline
131  {
133  } *line;
134 
135  struct psetClip
136  {
138  } *clip;
139 
140  struct psetColor
141  {
144 
146  {
149 
150  struct psetOffset
151  {
153  int rel;
155 
157 
159  {
163 #ifdef USE_LIBVUGLES2
164  struct psetShowItemInfo
165  {
166  long dir;
167  ePoint point;
168  eSize size;
169  } *setShowItemInfo;
170 
171  struct psetFlush
172  {
173  bool enable;
174  } *setFlush;
175 
176  struct psetViewInfo
177  {
178  eSize size;
179  } *setViewInfo;
180 #endif
181  } parm;
182 };
183 
184 #define MAXSIZE 2048
185 
186  /* gRC is the singleton which controls the fifo and dispatches commands */
187 class gRC: public iObject, public sigc::trackable
188 {
189  DECLARE_REF(gRC);
190  friend class gPainter;
191  static gRC *instance;
192 
193 #ifndef SYNC_PAINT
194  static void *thread_wrapper(void *ptr);
195  pthread_t the_thread;
196  pthread_mutex_t mutex;
197  pthread_cond_t cond;
198 #endif
199  void *thread();
200 
201  gOpcode queue[MAXSIZE];
202  int rp, wp;
203 
204  eFixedMessagePump<int> m_notify_pump;
205  void recv_notify(const int &i);
206 
207  ePtr<gDC> m_spinner_dc;
208  int m_spinner_enabled;
209 
210  int m_spinneronoff;
211 
212  void enableSpinner();
213  void disableSpinner();
214 
215  ePtr<gCompositingData> m_compositing;
216 
217  int m_prev_idle_count;
218 public:
219  gRC();
220  virtual ~gRC();
221 
222  void submit(const gOpcode &o);
223 
224 #ifdef CONFIG_ION
225  void lock();
226  void unlock();
227 #endif
228 
229  sigc::signal0<void> notify;
230 
231  void setSpinnerDC(gDC *dc) { m_spinner_dc = dc; }
232  void setSpinnerOnOff(int onoff) { m_spinneronoff = onoff; }
233 
234  static gRC *getInstance();
235 };
236 
237  /* gPainter is the user frontend, which in turn sends commands through gRC */
238 class gPainter
239 {
240  ePtr<gDC> m_dc;
241  ePtr<gRC> m_rc;
242  friend class gRC;
243 
244  gOpcode *beginptr;
245  void begin(const eRect &rect);
246  void end();
247 public:
248  gPainter(gDC *dc, eRect rect=eRect());
249  virtual ~gPainter();
250 
251  void setBackgroundColor(const gColor &color);
252  void setForegroundColor(const gColor &color);
253 
254  void setBackgroundColor(const gRGB &color);
255  void setForegroundColor(const gRGB &color);
256 
257  void setFont(gFont *font);
258  /* flags only THESE: */
259  enum
260  {
261  // todo, make mask. you cannot align both right AND center AND block ;)
262  RT_HALIGN_BIDI = 0, /* default */
267 
268  RT_VALIGN_TOP = 0, /* default */
271 
272  RT_WRAP = 64
273  };
274  void renderText(const eRect &position, const std::string &string, int flags=0, gRGB bordercolor=gRGB(), int border=0, int markedpos=-1, int *offset=0);
275 
276  void renderPara(eTextPara *para, ePoint offset=ePoint(0, 0));
277 
278  void fill(const eRect &area);
279  void fill(const gRegion &area);
280 
281  void clear();
282 
283  enum
284  {
287  BT_SCALE = 4, /* will be automatically set by blitScale */
293  BT_VALIGN_BOTTOM = 128
294  };
295 
296  void blitScale(gPixmap *pixmap, const eRect &pos, const eRect &clip=eRect(), int flags=0, int aflags = BT_SCALE);
297  void blit(gPixmap *pixmap, ePoint pos, const eRect &clip=eRect(), int flags=0);
298  void blit(gPixmap *pixmap, const eRect &pos, const eRect &clip=eRect(), int flags=0);
299 
300  void setPalette(gRGB *colors, int start=0, int len=256);
301  void setPalette(gPixmap *source);
302  void mergePalette(gPixmap *target);
303 
304  void line(ePoint start, ePoint end);
305 
306  void setOffset(ePoint abs);
307  void moveOffset(ePoint rel);
308  void resetOffset();
309 
310  void resetClip(const gRegion &clip);
311  void clip(const gRegion &clip);
312  void clippop();
313 
314  void waitVSync();
315  void flip();
316  void notify();
317  void setCompositing(gCompositingData *comp);
318 
319  void flush();
320  void sendShow(ePoint point, eSize size);
321  void sendHide(ePoint point, eSize size);
322 #ifdef USE_LIBVUGLES2
323  void sendShowItem(long dir, ePoint point, eSize size);
324  void setFlush(bool val);
325  void setView(eSize size);
326 #endif
327 };
328 
329 class gDC: public iObject
330 {
331  DECLARE_REF(gDC);
332 protected:
334 
339 
340  std::stack<gRegion> m_clip_stack;
342 
347 public:
348  virtual void exec(const gOpcode *opcode);
349  gDC(gPixmap *pixmap);
350  gDC();
351  virtual ~gDC();
353  int getPixmap(ePtr<gPixmap> &pm) { pm = m_pixmap; return 0; }
354  gRGB getRGB(gColor col);
355  virtual eSize size() { return m_pixmap->size(); }
356  virtual int islocked() const { return 0; }
357 
358  virtual void enableSpinner();
359  virtual void disableSpinner();
360  virtual void incrementSpinner();
361  virtual void setSpinner(eRect pos, ePtr<gPixmap> *pic, int len);
362 };
363 
364 #endif
static int ptr
Definition: bcm.cpp:17
Definition: epoint.h:9
Definition: erect.h:11
Definition: esize.h:8
Definition: font.h:118
Definition: compositing.h:25
Definition: grc.h:330
ePtr< gPixmap > m_spinner_saved
Definition: grc.h:343
virtual void exec(const gOpcode *opcode)
Definition: grc.cpp:730
gDC()
Definition: grc.cpp:715
eRect m_spinner_pos
Definition: grc.h:345
int m_spinner_num
Definition: grc.h:346
ePtr< gPixmap > m_pixmap
Definition: grc.h:333
ePtr< gPixmap > m_spinner_temp
Definition: grc.h:343
gRGB m_background_color_rgb
Definition: grc.h:336
int m_spinner_i
Definition: grc.h:346
virtual void enableSpinner()
Definition: grc.cpp:1032
ePoint m_current_offset
Definition: grc.h:338
std::stack< gRegion > m_clip_stack
Definition: grc.h:340
gRegion m_current_clip
Definition: grc.h:341
gRGB m_foreground_color_rgb
Definition: grc.h:336
gColor m_background_color
Definition: grc.h:335
virtual void disableSpinner()
Definition: grc.cpp:1042
virtual int islocked() const
Definition: grc.h:356
virtual void incrementSpinner()
Definition: grc.cpp:1050
virtual eSize size()
Definition: grc.h:355
gRGB getRGB(gColor col)
Definition: grc.cpp:1020
gColor m_foreground_color
Definition: grc.h:335
ePtr< gFont > m_current_font
Definition: grc.h:337
int getPixmap(ePtr< gPixmap > &pm)
Definition: grc.h:353
virtual void setSpinner(eRect pos, ePtr< gPixmap > *pic, int len)
Definition: grc.cpp:1081
virtual ~gDC()
Definition: grc.cpp:725
gRegion & getClip()
Definition: grc.h:352
ePtr< gPixmap > * m_spinner_pic
Definition: grc.h:344
A softreference to a font.
Definition: gfont.h:14
Definition: grc.h:239
void notify()
Definition: grc.cpp:616
void setFont(gFont *font)
Definition: grc.cpp:350
void setBackgroundColor(const gColor &color)
Definition: grc.cpp:298
void flip()
Definition: grc.cpp:606
void setOffset(ePoint abs)
Definition: grc.cpp:523
void setCompositing(gCompositingData *comp)
Definition: grc.cpp:626
@ BT_HALIGN_CENTER
Definition: grc.h:290
@ BT_VALIGN_BOTTOM
Definition: grc.h:293
@ BT_HALIGN_RIGHT
Definition: grc.h:291
@ BT_FIXRATIO
Definition: grc.h:289
@ BT_VALIGN_CENTER
Definition: grc.h:292
@ BT_ALPHATEST
Definition: grc.h:285
@ BT_SCALE
Definition: grc.h:287
@ BT_ALPHABLEND
Definition: grc.h:286
@ BT_KEEP_ASPECT_RATIO
Definition: grc.h:288
void clip(const gRegion &clip)
Definition: grc.cpp:574
void sendHide(ePoint point, eSize size)
Definition: grc.cpp:665
void renderText(const eRect &position, const std::string &string, int flags=0, gRGB bordercolor=gRGB(), int border=0, int markedpos=-1, int *offset=0)
Definition: grc.cpp:364
void setPalette(gRGB *colors, int start=0, int len=256)
Definition: grc.cpp:468
void fill(const eRect &area)
Definition: grc.cpp:401
gPainter(gDC *dc, eRect rect=eRect())
Definition: grc.cpp:285
void sendShow(ePoint point, eSize size)
Definition: grc.cpp:652
void clippop()
Definition: grc.cpp:586
void blit(gPixmap *pixmap, ePoint pos, const eRect &clip=eRect(), int flags=0)
Definition: grc.cpp:444
void resetOffset()
Definition: grc.cpp:549
void renderPara(eTextPara *para, ePoint offset=ePoint(0, 0))
Definition: grc.cpp:385
void blitScale(gPixmap *pixmap, const eRect &pos, const eRect &clip=eRect(), int flags=0, int aflags=BT_SCALE)
Definition: grc.cpp:439
void flush()
Definition: grc.cpp:636
void line(ePoint start, ePoint end)
Definition: grc.cpp:510
virtual ~gPainter()
Definition: grc.cpp:292
void clear()
Definition: grc.cpp:427
void waitVSync()
Definition: grc.cpp:596
@ RT_VALIGN_CENTER
Definition: grc.h:269
@ RT_HALIGN_RIGHT
Definition: grc.h:264
@ RT_VALIGN_TOP
Definition: grc.h:268
@ RT_WRAP
Definition: grc.h:272
@ RT_HALIGN_CENTER
Definition: grc.h:265
@ RT_HALIGN_LEFT
Definition: grc.h:263
@ RT_HALIGN_BLOCK
Definition: grc.h:266
@ RT_VALIGN_BOTTOM
Definition: grc.h:270
@ RT_HALIGN_BIDI
Definition: grc.h:262
void moveOffset(ePoint rel)
Definition: grc.cpp:536
void mergePalette(gPixmap *target)
Definition: grc.cpp:496
void setForegroundColor(const gColor &color)
Definition: grc.cpp:311
void resetClip(const gRegion &clip)
Definition: grc.cpp:562
Definition: gpixmap.h:188
eSize size() const
Definition: gpixmap.h:223
Definition: grc.h:188
sigc::signal0< void > notify
Definition: grc.h:229
void submit(const gOpcode &o)
Definition: grc.cpp:80
gRC()
Definition: grc.cpp:21
static gRC * getInstance()
Definition: grc.cpp:239
void setSpinnerOnOff(int onoff)
Definition: grc.h:232
void setSpinnerDC(gDC *dc)
Definition: grc.h:231
virtual ~gRC()
Definition: grc.cpp:66
Definition: region.h:9
Definition: object.h:15
fontRenderClass * font
#define MAXSIZE
Definition: grc.h:184
instance
Definition: NavigationInstance.py:2
enable
Definition: Extensions/MiniTV/plugin.py:8
size
Definition: Plugins/SystemPlugins/PositionerSetup/log.py:16
mutex
Definition: Plugins/SystemPlugins/PositionerSetup/log.py:14
target
Definition: newplugin.py:59
lock
Definition: StartEnigma.py:730
val
Definition: UnitConversions.py:88
pos
Definition: enigma_py_patcher.py:16
source
Definition: enigma_py_patcher.py:9
dictionary colors
Definition: skin.py:29
Definition: picload.cpp:163
Definition: gpixmap.h:130
Definition: grc.h:118
gPixmap * pixmap
Definition: grc.h:119
int flags
Definition: grc.h:120
eRect clip
Definition: grc.h:122
eRect position
Definition: grc.h:121
Definition: grc.h:80
eRect area
Definition: grc.h:81
Definition: grc.h:85
gRegion region
Definition: grc.h:86
Definition: grc.h:131
ePoint start
Definition: grc.h:132
ePoint end
Definition: grc.h:132
Definition: grc.h:126
gPixmap * target
Definition: grc.h:127
Definition: grc.h:102
eTextPara * textpara
Definition: grc.h:104
ePoint offset
Definition: grc.h:103
Definition: grc.h:90
gRGB bordercolor
Definition: grc.h:95
eRect area
Definition: grc.h:91
int border
Definition: grc.h:94
int scrollpos
Definition: grc.h:97
char * text
Definition: grc.h:92
int flags
Definition: grc.h:93
int * offset
Definition: grc.h:98
int markedpos
Definition: grc.h:96
Definition: grc.h:136
gRegion region
Definition: grc.h:137
Definition: grc.h:141
gColor color
Definition: grc.h:142
Definition: grc.h:146
gRGB color
Definition: grc.h:147
Definition: grc.h:108
gFont * font
Definition: grc.h:109
Definition: grc.h:151
ePoint value
Definition: grc.h:152
int rel
Definition: grc.h:153
Definition: grc.h:113
gPalette * palette
Definition: grc.h:114
Definition: grc.h:159
eSize size
Definition: grc.h:161
ePoint point
Definition: grc.h:160
Definition: grc.h:31
enum gOpcode::Opcode opcode
gDC * dc
Definition: grc.h:76
Opcode
Definition: grc.h:33
@ sendShow
Definition: grc.h:67
@ enableSpinner
Definition: grc.h:62
@ addClip
Definition: grc.h:54
@ setCompositing
Definition: grc.h:66
@ fill
Definition: grc.h:38
@ incrementSpinner
Definition: grc.h:62
@ waitVSync
Definition: grc.h:58
@ fillRegion
Definition: grc.h:38
@ flip
Definition: grc.h:59
@ setPalette
Definition: grc.h:41
@ line
Definition: grc.h:44
@ renderText
Definition: grc.h:34
@ renderPara
Definition: grc.h:35
@ setBackgroundColor
Definition: grc.h:46
@ mergePalette
Definition: grc.h:42
@ setOffset
Definition: grc.h:52
@ sendHide
Definition: grc.h:68
@ setClip
Definition: grc.h:54
@ shutdown
Definition: grc.h:64
@ setForegroundColor
Definition: grc.h:47
@ notify
Definition: grc.h:60
@ setBackgroundColorRGB
Definition: grc.h:49
@ flush
Definition: grc.h:56
@ popClip
Definition: grc.h:54
@ blit
Definition: grc.h:39
@ setForegroundColorRGB
Definition: grc.h:50
@ setFont
Definition: grc.h:36
@ disableSpinner
Definition: grc.h:62
@ clear
Definition: grc.h:38
union gOpcode::para parm
Definition: gpixmap.h:143
Definition: gpixmap.h:14
Definition: grc.h:78
struct gOpcode::para::prenderPara * renderPara
struct gOpcode::para::pmergePalette * mergePalette
gCompositingData * setCompositing
Definition: grc.h:156
struct gOpcode::para::pblit * blit
struct gOpcode::para::psetColorRGB * setColorRGB
struct gOpcode::para::pline * line
struct gOpcode::para::prenderText * renderText
struct gOpcode::para::psetClip * clip
struct gOpcode::para::psetShowHideInfo * setShowHideInfo
struct gOpcode::para::psetPalette * setPalette
struct gOpcode::para::pfillRegion * fillRegion
struct gOpcode::para::psetOffset * setOffset
struct gOpcode::para::pfillRect * fill
struct gOpcode::para::psetFont * setFont
struct gOpcode::para::psetColor * setColor