diff options
author | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2019-07-11 11:07:13 +0200 |
---|---|---|
committer | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2019-07-11 11:07:13 +0200 |
commit | 7a79059414ea2f10cba1710de0e37dcbbdfbfa42 (patch) | |
tree | 3300a2389ae07acbe21561e6f1fe78ea28674054 /statusheader.c | |
parent | ceadc0bbfe5a82ebdb961a15e2bb3669197551ad (diff) | |
download | vdr-plugin-tvguide-7a79059414ea2f10cba1710de0e37dcbbdfbfa42.tar.gz vdr-plugin-tvguide-7a79059414ea2f10cba1710de0e37dcbbdfbfa42.tar.bz2 |
Change files to unix
Diffstat (limited to 'statusheader.c')
-rw-r--r-- | statusheader.c | 286 |
1 files changed, 143 insertions, 143 deletions
diff --git a/statusheader.c b/statusheader.c index f5db056..0ef5562 100644 --- a/statusheader.c +++ b/statusheader.c @@ -1,143 +1,143 @@ -#include "tools.h"
-#include "services/scraper2vdr.h"
-#include "imageloader.h"
-#include "statusheader.h"
-
-cStatusHeader::cStatusHeader(void) {
- color = theme.Color(clrStatusHeader);
- colorBlending = theme.Color(clrStatusHeaderBlending);
- height = geoManager.statusHeaderHeight;
- width = geoManager.headerContentWidth;
- tvFrameWidth = geoManager.tvFrameWidth;
- pixmap = osdManager.requestPixmap(1, cRect(0, 0, width, height));
- pixmapText = osdManager.requestPixmap(2, cRect(0, 0, width, height));
- pixmapTVFrame = osdManager.requestPixmap(1, cRect(width, 0, tvFrameWidth, height));
-}
-
-cStatusHeader::~cStatusHeader(void) {
- osdManager.releasePixmap(pixmapText);
- osdManager.releasePixmap(pixmapTVFrame);
- if (tvguideConfig.scaleVideo) {
- cRect vidWin = cDevice::PrimaryDevice()->CanScaleVideo(cRect::Null);
- cDevice::PrimaryDevice()->ScaleVideo(vidWin);
- }
-}
-
-void cStatusHeader::Draw(void) {
- pixmapText->Fill(clrTransparent);
- pixmapTVFrame->Fill(clrTransparent);
- if (tvguideConfig.style == eStyleGraphical) {
- if (tvguideConfig.scaleVideo) {
- drawBackgroundGraphical(bgStatusHeaderWindowed);
- cImage *tvFrameBack = imgCache.GetOsdElement(oeStatusHeaderTVFrame);
- if (tvFrameBack)
- pixmapTVFrame->DrawImage(cPoint(0,0), *tvFrameBack);
- } else {
- drawBackgroundGraphical(bgStatusHeaderFull);
- }
- } else {
- if (tvguideConfig.decorateVideo) {
- DecorateVideoFrame();
- }
- drawBackground();
- drawBorder();
- }
-}
-
-void cStatusHeader::ScaleVideo(void) {
- if (tvguideConfig.scaleVideo) {
- int width = height * 16 / 9;
- int x = osdManager.Left() + geoManager.osdWidth - width;
- int y = osdManager.Top();
- cRect availableRect(x, y, width, height);
- cRect vidWin = cDevice::PrimaryDevice()->CanScaleVideo(availableRect);
- cDevice::PrimaryDevice()->ScaleVideo(vidWin);
- }
-}
-
-void cStatusHeader::DrawInfoText(cGrid *grid) {
- int border = 10;
- int textWidth = 0;
- textWidth = width - 2 * border;
- tColor colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent;
- pixmapText->Fill(clrTransparent);
- int x = border;
- int y = border;
- if (!grid->isDummy()) {
- const cEvent *event = grid->GetEvent();
- int newX = DrawPoster(event, x, y, height-2*border, border);
- if (newX > 0) {
- textWidth -= (newX - x);
- x += newX;
- }
- cString time = grid->getTimeString();
- cString title("");
- title = cString::sprintf(": %s", event->Title());
- cString header = cString::sprintf("%s%s", *time, *title);
- header = CutText(*header, textWidth, fontManager.FontStatusHeaderLarge).c_str();
- pixmapText->DrawText(cPoint(x,y), *header, theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeaderLarge);
- y += fontManager.FontStatusHeaderLarge->Height() + border;
- int heightText = pixmapText->ViewPort().Height() - y;
- cTextWrapper description;
- description.Set(event->Description(), fontManager.FontStatusHeader, textWidth);
- int lineHeight = fontManager.FontStatusHeader->Height();
- int textLines = description.Lines();
- int maxLines = heightText / lineHeight;
- int lines = std::min(textLines, maxLines);
- for (int i = 0; i < lines-1; i++) {
- pixmapText->DrawText(cPoint(x,y), description.GetLine(i), theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeader);
- y += lineHeight;
- }
- cString lastLine = description.GetLine(lines-1);
- if (textLines > maxLines) {
- lastLine = cString::sprintf("%s...", *lastLine);
- }
- pixmapText->DrawText(cPoint(x,y), *lastLine, theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeader);
- } else {
- int heightText = pixmapText->ViewPort().Height() - y;
- y += (heightText - fontManager.FontStatusHeaderLarge->Height() - 2*border)/2;
- pixmapText->DrawText(cPoint(x,y), *grid->getText(), theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeaderLarge);
- }
-}
-
-int cStatusHeader::DrawPoster(const cEvent *event, int x, int y, int height, int border) {
- bool hasPoster = false;
- ScraperGetPoster posterScraper2Vdr;
- int posterWidth = 0;
- int posterHeight = 0;
- static cPlugin *pScraper = GetScraperPlugin();
- if (pScraper) {
- posterScraper2Vdr.event = event;
- posterScraper2Vdr.recording = NULL;
- if (pScraper->Service("GetPoster", &posterScraper2Vdr)) {
- hasPoster = true;
- int posterWidthOrig = posterScraper2Vdr.poster.width;
- int posterHeightOrig = posterScraper2Vdr.poster.height;
- posterHeight = height;
- posterWidth = posterWidthOrig * ((double)posterHeight / (double)posterHeightOrig);
- } else {
- hasPoster = false;
- }
- }
- if (hasPoster) {
- cImageLoader imgLoader;
- if (imgLoader.LoadPoster(posterScraper2Vdr.poster.path.c_str(), posterWidth, posterHeight)) {
- pixmapText->DrawImage(cPoint(x, y), imgLoader.GetImage());
- return posterWidth + border;
- }
- }
- return 0;
-}
-
-void cStatusHeader::DecorateVideoFrame(void) {
- int radius = 16;
- int frame = 2;
- pixmapTVFrame->DrawRectangle(cRect(0, 0, tvFrameWidth, frame), theme.Color(clrBackgroundOSD));
- pixmapTVFrame->DrawEllipse(cRect(frame,frame,radius,radius), theme.Color(clrBackgroundOSD), -2);
- pixmapTVFrame->DrawRectangle(cRect(tvFrameWidth - frame, frame, frame, height - 2*frame), theme.Color(clrBackgroundOSD));
- pixmapTVFrame->DrawEllipse(cRect(tvFrameWidth - radius - frame, frame, radius, radius), theme.Color(clrBackgroundOSD), -1);
- pixmapTVFrame->DrawRectangle(cRect(0, frame, frame, height - 2*frame), theme.Color(clrBackgroundOSD));
- pixmapTVFrame->DrawEllipse(cRect(frame, height - radius - frame, radius, radius), theme.Color(clrBackgroundOSD), -3);
- pixmapTVFrame->DrawRectangle(cRect(0, height - frame, tvFrameWidth, frame), theme.Color(clrBackgroundOSD));
- pixmapTVFrame->DrawEllipse(cRect(tvFrameWidth - radius - frame, height - radius - frame, radius, radius), theme.Color(clrBackgroundOSD), -4);
-}
+#include "tools.h" +#include "services/scraper2vdr.h" +#include "imageloader.h" +#include "statusheader.h" + +cStatusHeader::cStatusHeader(void) { + color = theme.Color(clrStatusHeader); + colorBlending = theme.Color(clrStatusHeaderBlending); + height = geoManager.statusHeaderHeight; + width = geoManager.headerContentWidth; + tvFrameWidth = geoManager.tvFrameWidth; + pixmap = osdManager.requestPixmap(1, cRect(0, 0, width, height)); + pixmapText = osdManager.requestPixmap(2, cRect(0, 0, width, height)); + pixmapTVFrame = osdManager.requestPixmap(1, cRect(width, 0, tvFrameWidth, height)); +} + +cStatusHeader::~cStatusHeader(void) { + osdManager.releasePixmap(pixmapText); + osdManager.releasePixmap(pixmapTVFrame); + if (tvguideConfig.scaleVideo) { + cRect vidWin = cDevice::PrimaryDevice()->CanScaleVideo(cRect::Null); + cDevice::PrimaryDevice()->ScaleVideo(vidWin); + } +} + +void cStatusHeader::Draw(void) { + pixmapText->Fill(clrTransparent); + pixmapTVFrame->Fill(clrTransparent); + if (tvguideConfig.style == eStyleGraphical) { + if (tvguideConfig.scaleVideo) { + drawBackgroundGraphical(bgStatusHeaderWindowed); + cImage *tvFrameBack = imgCache.GetOsdElement(oeStatusHeaderTVFrame); + if (tvFrameBack) + pixmapTVFrame->DrawImage(cPoint(0,0), *tvFrameBack); + } else { + drawBackgroundGraphical(bgStatusHeaderFull); + } + } else { + if (tvguideConfig.decorateVideo) { + DecorateVideoFrame(); + } + drawBackground(); + drawBorder(); + } +} + +void cStatusHeader::ScaleVideo(void) { + if (tvguideConfig.scaleVideo) { + int width = height * 16 / 9; + int x = osdManager.Left() + geoManager.osdWidth - width; + int y = osdManager.Top(); + cRect availableRect(x, y, width, height); + cRect vidWin = cDevice::PrimaryDevice()->CanScaleVideo(availableRect); + cDevice::PrimaryDevice()->ScaleVideo(vidWin); + } +} + +void cStatusHeader::DrawInfoText(cGrid *grid) { + int border = 10; + int textWidth = 0; + textWidth = width - 2 * border; + tColor colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent; + pixmapText->Fill(clrTransparent); + int x = border; + int y = border; + if (!grid->isDummy()) { + const cEvent *event = grid->GetEvent(); + int newX = DrawPoster(event, x, y, height-2*border, border); + if (newX > 0) { + textWidth -= (newX - x); + x += newX; + } + cString time = grid->getTimeString(); + cString title(""); + title = cString::sprintf(": %s", event->Title()); + cString header = cString::sprintf("%s%s", *time, *title); + header = CutText(*header, textWidth, fontManager.FontStatusHeaderLarge).c_str(); + pixmapText->DrawText(cPoint(x,y), *header, theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeaderLarge); + y += fontManager.FontStatusHeaderLarge->Height() + border; + int heightText = pixmapText->ViewPort().Height() - y; + cTextWrapper description; + description.Set(event->Description(), fontManager.FontStatusHeader, textWidth); + int lineHeight = fontManager.FontStatusHeader->Height(); + int textLines = description.Lines(); + int maxLines = heightText / lineHeight; + int lines = std::min(textLines, maxLines); + for (int i = 0; i < lines-1; i++) { + pixmapText->DrawText(cPoint(x,y), description.GetLine(i), theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeader); + y += lineHeight; + } + cString lastLine = description.GetLine(lines-1); + if (textLines > maxLines) { + lastLine = cString::sprintf("%s...", *lastLine); + } + pixmapText->DrawText(cPoint(x,y), *lastLine, theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeader); + } else { + int heightText = pixmapText->ViewPort().Height() - y; + y += (heightText - fontManager.FontStatusHeaderLarge->Height() - 2*border)/2; + pixmapText->DrawText(cPoint(x,y), *grid->getText(), theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeaderLarge); + } +} + +int cStatusHeader::DrawPoster(const cEvent *event, int x, int y, int height, int border) { + bool hasPoster = false; + ScraperGetPoster posterScraper2Vdr; + int posterWidth = 0; + int posterHeight = 0; + static cPlugin *pScraper = GetScraperPlugin(); + if (pScraper) { + posterScraper2Vdr.event = event; + posterScraper2Vdr.recording = NULL; + if (pScraper->Service("GetPoster", &posterScraper2Vdr)) { + hasPoster = true; + int posterWidthOrig = posterScraper2Vdr.poster.width; + int posterHeightOrig = posterScraper2Vdr.poster.height; + posterHeight = height; + posterWidth = posterWidthOrig * ((double)posterHeight / (double)posterHeightOrig); + } else { + hasPoster = false; + } + } + if (hasPoster) { + cImageLoader imgLoader; + if (imgLoader.LoadPoster(posterScraper2Vdr.poster.path.c_str(), posterWidth, posterHeight)) { + pixmapText->DrawImage(cPoint(x, y), imgLoader.GetImage()); + return posterWidth + border; + } + } + return 0; +} + +void cStatusHeader::DecorateVideoFrame(void) { + int radius = 16; + int frame = 2; + pixmapTVFrame->DrawRectangle(cRect(0, 0, tvFrameWidth, frame), theme.Color(clrBackgroundOSD)); + pixmapTVFrame->DrawEllipse(cRect(frame,frame,radius,radius), theme.Color(clrBackgroundOSD), -2); + pixmapTVFrame->DrawRectangle(cRect(tvFrameWidth - frame, frame, frame, height - 2*frame), theme.Color(clrBackgroundOSD)); + pixmapTVFrame->DrawEllipse(cRect(tvFrameWidth - radius - frame, frame, radius, radius), theme.Color(clrBackgroundOSD), -1); + pixmapTVFrame->DrawRectangle(cRect(0, frame, frame, height - 2*frame), theme.Color(clrBackgroundOSD)); + pixmapTVFrame->DrawEllipse(cRect(frame, height - radius - frame, radius, radius), theme.Color(clrBackgroundOSD), -3); + pixmapTVFrame->DrawRectangle(cRect(0, height - frame, tvFrameWidth, frame), theme.Color(clrBackgroundOSD)); + pixmapTVFrame->DrawEllipse(cRect(tvFrameWidth - radius - frame, height - radius - frame, radius, radius), theme.Color(clrBackgroundOSD), -4); +} |