summaryrefslogtreecommitdiff
path: root/common.c
blob: 2c3600864dd8e8f97f31e6f9850db6713b86c717 (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
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
/*
 * $Id: common.c,v 1.5 2004/06/01 21:02:38 lordjaxom Exp $
 */

#define __STL_CONFIG_H
#include <vdr/plugin.h>
#undef __STL_CONFIG_H
#include "data.h"
#include "common.h"

const char *SkinPath(void) {
	return cPlugin::ConfigDirectory(PLUGIN_NAME_I18N);
}

void DrawTextTransparent(cOsd *Osd, int x, int y, const char *s, tColor ColorFg, tColor ColorBg, const cFont *Font, int Width, int Height, int Alignment) {
	int w = Font->Width(s);
	int h = Font->Height();
	int limit = 0;
	if (Width || Height) {
		int cw = Width ? Width : w;
		limit = x + cw;
		if (Width) {
			 if ((Alignment & taLeft) != 0)
					;
			 else if ((Alignment & taRight) != 0) {
					if (w < Width)
						 x += Width - w;
					}
			 else { // taCentered
					if (w < Width)
						 x += (Width - w) / 2;
					}
			 }
		if (Height) {
			 if ((Alignment & taTop) != 0)
					;
			 else if ((Alignment & taBottom) != 0) {
					if (h < Height)
						 y += Height - h;
					}
			 else { // taCentered
					if (h < Height)
						 y += (Height - h) / 2;
					}
			 }
		}
	while (s && *s) {
			 const cFont::tCharData *CharData = Font->CharData(*s++);
			 if (limit && int(x + CharData->width) > limit)
					break; // we don't draw partial characters
			 if (int(x + CharData->width) > 0) {
					for (int row = 0; row < h; row++) {
							cFont::tPixelData PixelData = CharData->lines[row];
							for (int col = CharData->width; col-- > 0; ) {
									if (PixelData & 1)
										Osd->DrawRectangle(x + col, y + row, x + col, y + row, ColorFg);
									PixelData >>= 1;
									}
							}
					}
			 x += CharData->width;
			 }
}

void DrawBitmap(cOsd *Osd, int x, int y, cBitmap &Bitmap, tColor ColorFg, tColor ColorBg) {
	if (ColorFg || ColorBg) {
		Bitmap.SetColor(0, ColorBg);
		Bitmap.SetColor(1, ColorFg);
	}
	tColor fill = Bitmap.Color(*Bitmap.Data(0, 0)); // to be sure to grab a USED color
	Osd->DrawRectangle(x, y, x + Bitmap.Width() - 1, y + Bitmap.Height() - 1, fill); // to be sure the palette is reset, if the Bitmap covers an Area
 	for (int iy = 0; iy < Bitmap.Height(); iy++) {
		const tIndex *ptr = Bitmap.Data(0, iy);
		for (int ix = 0; ix < Bitmap.Width(); ix++, ptr += sizeof(tIndex)) {
			// DrawPixel is b0rked
			//Osd->DrawPixel(x + ix, y + iy, Bitmap.Color(*ptr));
			Osd->DrawRectangle(x + ix, y + iy, x + ix, y + iy, Bitmap.Color(*ptr));
		}
	}
}

const char *ChannelNumber(const cChannel *Channel, int Number) {
	static char buffer[256];
	buffer[0] = '\0';
  if (Channel) {
     if (!Channel->GroupSep())
        snprintf(buffer, sizeof(buffer), "%d%s", Channel->Number(), Number ? "-" : "");
     }
  else if (Number)
     snprintf(buffer, sizeof(buffer), "%d-", Number);
  return buffer;
}

const char *ChannelName(const cChannel *Channel, int Number) {
	static char buffer[256];
	buffer[0] = '\0';
  if (Channel) 
		 snprintf(buffer, sizeof(buffer), "%s", Channel->Name());
  else if (!Number)
     snprintf(buffer, sizeof(buffer), "%s", tr("*** Invalid Channel ***"));
  return buffer;
}

string ItemText(cText2SkinItem *Item, const string &Content) {
	string s;
	if (Item->Text() != "") {
		s = Item->Text();
		int pos;
		while ((pos = s.find('$')) != -1)
			s.replace(pos, 1, Content);
	} else
		s = Content;
	return s;
}