mirror of
https://projects.vdr-developer.org/git/vdr-plugin-tvguide.git
synced 2023-10-05 15:01:48 +02:00
98 lines
3.6 KiB
C
98 lines
3.6 KiB
C
#include <algorithm>
|
|
#include "channelgroup.h"
|
|
#include "tools.h"
|
|
|
|
cChannelGroup::cChannelGroup(const char *name) {
|
|
channelStart = 0;
|
|
channelStop = 0;
|
|
this->name = name;
|
|
}
|
|
|
|
cChannelGroup::~cChannelGroup(void) {
|
|
}
|
|
|
|
void cChannelGroup::Dump(void) {
|
|
esyslog("tvguide: Group %s, startChannel %d, stopChannel %d", name, channelStart, channelStop);
|
|
}
|
|
|
|
// --- cChannelGroupGrid -------------------------------------------------------------
|
|
|
|
cChannelGroupGrid::cChannelGroupGrid(const char *name) {
|
|
this->name = name;
|
|
}
|
|
|
|
cChannelGroupGrid::~cChannelGroupGrid(void) {
|
|
}
|
|
|
|
void cChannelGroupGrid::SetBackground() {
|
|
if (isColor1) {
|
|
color = theme.Color(clrGrid1);
|
|
colorBlending = theme.Color(clrGrid1Blending);
|
|
} else {
|
|
color = theme.Color(clrGrid2);
|
|
colorBlending = theme.Color(clrGrid2Blending);
|
|
}
|
|
}
|
|
|
|
void cChannelGroupGrid::SetGeometry(int start, int end) {
|
|
int x, y, width, height;
|
|
if (config.displayMode == eVertical) {
|
|
x = geoManager.timeLineWidth + start*geoManager.colWidth;
|
|
y = geoManager.statusHeaderHeight;
|
|
width = (end - start + 1) * geoManager.colWidth;
|
|
height = geoManager.channelGroupsHeight;
|
|
} else if (config.displayMode == eHorizontal) {
|
|
x = 0;
|
|
y = geoManager.statusHeaderHeight + geoManager.timeLineHeight + start*geoManager.rowHeight;
|
|
width = geoManager.channelGroupsWidth;
|
|
height = (end - start + 1) * geoManager.rowHeight;
|
|
}
|
|
pixmap = osdManager.requestPixmap(1, cRect(x, y, width, height));
|
|
}
|
|
|
|
void cChannelGroupGrid::Draw(void) {
|
|
if (config.style == eStyleGraphical) {
|
|
drawBackgroundGraphical(bgChannelGroup);
|
|
} else {
|
|
drawBackground();
|
|
drawBorder();
|
|
}
|
|
tColor colorText = theme.Color(clrFont);
|
|
tColor colorTextBack = (config.style == eStyleFlat)?color:clrTransparent;
|
|
if (config.displayMode == eVertical) {
|
|
DrawVertical(colorText, colorTextBack);
|
|
} else if (config.displayMode == eHorizontal) {
|
|
DrawHorizontal(colorText, colorTextBack);
|
|
}
|
|
}
|
|
|
|
void cChannelGroupGrid::DrawVertical(tColor colorText, tColor colorTextBack) {
|
|
int textY = (Height() - fontManager.FontChannelGroups->Height()) / 2;
|
|
cString text = cString::sprintf("%s", CutText(name, Width() - 4, fontManager.FontChannelGroups).c_str());
|
|
int textWidth = fontManager.FontChannelGroups->Width(*text);
|
|
int x = (Width() - textWidth) / 2;
|
|
pixmap->DrawText(cPoint(x, textY), *text, colorText, colorTextBack, fontManager.FontChannelGroups);
|
|
}
|
|
|
|
void cChannelGroupGrid::DrawHorizontal(tColor colorText, tColor colorTextBack) {
|
|
std::string groupName = name;
|
|
int numChars = groupName.length();
|
|
int charHeight = fontManager.FontChannelGroupsHorizontal->Height();
|
|
int textHeight = numChars * charHeight;
|
|
int y = 5;
|
|
if ((textHeight + 5) < Height()) {
|
|
y = (Height() - textHeight) / 2;
|
|
}
|
|
for (int i = 0; i < numChars; i++) {
|
|
if (((y + 2 * charHeight) > Height()) && ((i + 1) < numChars)) {
|
|
int x = (Width() - fontManager.FontChannelGroupsHorizontal->Width("...")) / 2;
|
|
pixmap->DrawText(cPoint(x, y), "...", colorText, colorTextBack, fontManager.FontChannelGroupsHorizontal);
|
|
break;
|
|
}
|
|
cString currentChar = cString::sprintf("%s", utf8_substr(groupName.c_str(), i, 1).c_str());
|
|
int x = (Width() - fontManager.FontChannelGroupsHorizontal->Width(*currentChar)) / 2;
|
|
pixmap->DrawText(cPoint(x, y), *currentChar, colorText, colorTextBack, fontManager.FontChannelGroupsHorizontal);
|
|
y += fontManager.FontChannelGroupsHorizontal->Height();
|
|
}
|
|
}
|