summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Schirrmacher <vdr.skinflatplus@schirrmacher.eu>2018-06-24 16:09:19 +0200
committerMartin Schirrmacher <vdr.skinflatplus@schirrmacher.eu>2018-06-24 16:09:19 +0200
commit9f49ddbd7ce4969c713d850a7b17123b17f3288f (patch)
tree80983c2043d2e795b551db7e2d7f8cf874c5bc6c
parent5a8c1819d963bc78c317b98dd2e77be68bad1549 (diff)
downloadskin-flatplus-9f49ddbd7ce4969c713d850a7b17123b17f3288f.tar.gz
skin-flatplus-9f49ddbd7ce4969c713d850a7b17123b17f3288f.tar.bz2
support for MaxPixmapSize
-rw-r--r--HISTORY5
-rw-r--r--baserender.c34
-rw-r--r--baserender.h2
-rw-r--r--complexcontent.c20
-rw-r--r--complexcontent.h1
-rw-r--r--displaychannel.c12
-rw-r--r--displaymenu.c2
-rw-r--r--displayreplay.c10
-rw-r--r--displaytracks.c4
-rw-r--r--displayvolume.c14
-rw-r--r--textscroller.c18
-rw-r--r--textscroller.h3
12 files changed, 92 insertions, 33 deletions
diff --git a/HISTORY b/HISTORY
index 72b3c489..5100c9ca 100644
--- a/HISTORY
+++ b/HISTORY
@@ -5,6 +5,11 @@ VDR Plugin 'skinflatplus' Revision History
- [fix] '%' sign not shown in menu weather widget at certian font
- [update] use std::min & std::max
- [update] support for vdr 2.3.8 (thanks to nanohcv)
+- [update] support for vdr 2.4.0 - MaxPixmapSize
+ Cut Pixmaps to MaxPixmapSize (default in vdr core 2048x2048)
+ Maybe textscrolling does not work with cut off pixmaps.
+ Output device has to implement MaxPixmapSize to overwrite vdr core default value.
+- [update] weather widget update_weather.php php7 support (reported by Delekhan)
- [add] support for change color key mapping
- [add] displaychannel show event start time on the left before event title
diff --git a/baserender.c b/baserender.c
index 1e8dc316..987cb96b 100644
--- a/baserender.c
+++ b/baserender.c
@@ -117,6 +117,22 @@ void cFlatBaseRender::CreateOsd(int left, int top, int width, int height) {
return;
}
+cPixmap *cFlatBaseRender::CreatePixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort) {
+ cSize maxPixmapSize = osd->MaxPixmapSize();
+ cRect SafeDrawPort( DrawPort.X(), DrawPort.Y(), DrawPort.Width(), DrawPort.Height());
+
+ if( DrawPort.Width() > maxPixmapSize.Width() ) {
+ dsyslog("Try to create Pixmap (%d x %d) > MaxPixmapSize (%d x %d)-> cut Pixmap to MaxPixmapSize", DrawPort.Width(), DrawPort.Height(), maxPixmapSize.Width(), maxPixmapSize.Height() );
+ SafeDrawPort.SetWidth(maxPixmapSize.Width());
+ }
+ if( DrawPort.Height() > maxPixmapSize.Height() ) {
+ dsyslog("Try to create Pixmap (%d x %d) > MaxPixmapSize (%d x %d)-> cut Pixmap to MaxPixmapSize", DrawPort.Width(), DrawPort.Height(), maxPixmapSize.Width(), maxPixmapSize.Height() );
+ SafeDrawPort.SetHeight(maxPixmapSize.Height());
+ }
+
+ return osd->CreatePixmap(Layer, ViewPort, SafeDrawPort);
+}
+
void cFlatBaseRender::TopBarCreate(void) {
int fs = int(round(cOsd::OsdHeight() * Config.TopBarFontSize));
topBarFont = cFont::CreateFont(Setup.FontOsd, fs);
@@ -131,11 +147,11 @@ void cFlatBaseRender::TopBarCreate(void) {
else
topBarHeight = topBarFontSmlHeight * 2;
- topBarPixmap = osd->CreatePixmap(1, cRect(Config.decorBorderTopBarSize, Config.decorBorderTopBarSize, osdWidth - Config.decorBorderTopBarSize*2, topBarHeight));
+ topBarPixmap = CreatePixmap(1, cRect(Config.decorBorderTopBarSize, Config.decorBorderTopBarSize, osdWidth - Config.decorBorderTopBarSize*2, topBarHeight));
//dsyslog("skinflatplus: topBarPixmap left: %d top: %d width: %d height: %d", Config.decorBorderTopBarSize, Config.decorBorderTopBarSize, osdWidth - Config.decorBorderTopBarSize*2, topBarHeight);
- topBarIconBGPixmap = osd->CreatePixmap(2, cRect(Config.decorBorderTopBarSize, Config.decorBorderTopBarSize, osdWidth - Config.decorBorderTopBarSize*2, topBarHeight));
+ topBarIconBGPixmap = CreatePixmap(2, cRect(Config.decorBorderTopBarSize, Config.decorBorderTopBarSize, osdWidth - Config.decorBorderTopBarSize*2, topBarHeight));
//dsyslog("skinflatplus: topBarIconBGPixmap left: %d top: %d width: %d height: %d", Config.decorBorderTopBarSize, Config.decorBorderTopBarSize, osdWidth - Config.decorBorderTopBarSize*2, topBarHeight);
- topBarIconPixmap = osd->CreatePixmap(3, cRect(Config.decorBorderTopBarSize, Config.decorBorderTopBarSize, osdWidth - Config.decorBorderTopBarSize*2, topBarHeight));
+ topBarIconPixmap = CreatePixmap(3, cRect(Config.decorBorderTopBarSize, Config.decorBorderTopBarSize, osdWidth - Config.decorBorderTopBarSize*2, topBarHeight));
//dsyslog("skinflatplus: topBarIconPixmap left: %d top: %d width: %d height: %d", Config.decorBorderTopBarSize, Config.decorBorderTopBarSize, osdWidth - Config.decorBorderTopBarSize*2, topBarHeight);
topBarPixmap->Fill(clrTransparent);
topBarIconBGPixmap->Fill(clrTransparent);
@@ -542,7 +558,7 @@ void cFlatBaseRender::ButtonsCreate(void) {
buttonsWidth = osdWidth;
buttonsTop = osdHeight - buttonsHeight - Config.decorBorderButtonSize;
- buttonsPixmap = osd->CreatePixmap(1, cRect(Config.decorBorderButtonSize,
+ buttonsPixmap = CreatePixmap(1, cRect(Config.decorBorderButtonSize,
buttonsTop, buttonsWidth - Config.decorBorderButtonSize*2, buttonsHeight));
buttonsPixmap->Fill(clrTransparent);
//dsyslog("skinflatplus: buttonsPixmap left: %d top: %d width: %d height: %d", Config.decorBorderButtonSize, buttonsTop, buttonsWidth - Config.decorBorderButtonSize*2, buttonsHeight);
@@ -672,9 +688,9 @@ void cFlatBaseRender::MessageCreate(void) {
if( Config.MessageColorPosition == 1 )
messageHeight += 8;
int top = osdHeight - Config.MessageOffset - messageHeight - Config.decorBorderMessageSize;
- messagePixmap = osd->CreatePixmap(5, cRect(Config.decorBorderMessageSize, top, osdWidth - Config.decorBorderMessageSize*2, messageHeight));
+ messagePixmap = CreatePixmap(5, cRect(Config.decorBorderMessageSize, top, osdWidth - Config.decorBorderMessageSize*2, messageHeight));
messagePixmap->Fill(clrTransparent);
- messageIconPixmap = osd->CreatePixmap(5, cRect(Config.decorBorderMessageSize, top, osdWidth - Config.decorBorderMessageSize*2, messageHeight));
+ messageIconPixmap = CreatePixmap(5, cRect(Config.decorBorderMessageSize, top, osdWidth - Config.decorBorderMessageSize*2, messageHeight));
messageIconPixmap->Fill(clrTransparent);
//dsyslog("skinflatplus: messagePixmap left: %d top: %d width: %d height: %d", Config.decorBorderMessageSize, top, osdWidth - Config.decorBorderMessageSize*2, messageHeight);
@@ -789,8 +805,8 @@ void cFlatBaseRender::ProgressBarCreate(int Left, int Top, int Width, int Height
progressBarColorBarCurFg = Theme.Color(clrReplayProgressBarCurFg);
- progressBarPixmap = osd->CreatePixmap(3, cRect(Left, Top, Width, progressBarHeight));
- progressBarPixmapBg = osd->CreatePixmap(2, cRect(Left - progressBarMarginVer, Top - progressBarMarginHor, Width + progressBarMarginVer*2, progressBarHeight + progressBarMarginHor*2));
+ progressBarPixmap = CreatePixmap(3, cRect(Left, Top, Width, progressBarHeight));
+ progressBarPixmapBg = CreatePixmap(2, cRect(Left - progressBarMarginVer, Top - progressBarMarginHor, Width + progressBarMarginVer*2, progressBarHeight + progressBarMarginHor*2));
progressBarPixmap->Fill(clrTransparent);
progressBarPixmapBg->Fill(clrTransparent);
}
@@ -1322,7 +1338,7 @@ void cFlatBaseRender::DecorBorderDraw(int Left, int Top, int Width, int Height,
int BottomDecor = Height + Size;
if( !decorPixmap ) {
- decorPixmap = osd->CreatePixmap(4, cRect(0, 0, cOsd::OsdWidth(), cOsd::OsdHeight()));
+ decorPixmap = CreatePixmap(4, cRect(0, 0, cOsd::OsdWidth(), cOsd::OsdHeight()));
decorPixmap->Fill(clrTransparent);
}
diff --git a/baserender.h b/baserender.h
index aef2b2f8..9d8f405b 100644
--- a/baserender.h
+++ b/baserender.h
@@ -181,4 +181,6 @@ class cFlatBaseRender
int GetFontAscender(const char *Name, int CharHeight, int CharWidth = 0);
void DrawWidgetWeather(void);
+
+ virtual cPixmap *CreatePixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort = cRect::Null);
};
diff --git a/complexcontent.c b/complexcontent.c
index 7c265414..c66d6989 100644
--- a/complexcontent.c
+++ b/complexcontent.c
@@ -36,6 +36,22 @@ void cComplexContent::Clear(void) {
}
}
+cPixmap *cComplexContent::CreatePixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort) {
+ cSize maxPixmapSize = Osd->MaxPixmapSize();
+ cRect SafeDrawPort( DrawPort.X(), DrawPort.Y(), DrawPort.Width(), DrawPort.Height());
+
+ if( DrawPort.Width() > maxPixmapSize.Width() ) {
+ dsyslog("Try to create Pixmap (%d x %d) > MaxPixmapSize (%d x %d)-> cut Pixmap to MaxPixmapSize", DrawPort.Width(), DrawPort.Height(), maxPixmapSize.Width(), maxPixmapSize.Height() );
+ SafeDrawPort.SetWidth(maxPixmapSize.Width());
+ }
+ if( DrawPort.Height() > maxPixmapSize.Height() ) {
+ dsyslog("Try to create Pixmap (%d x %d) > MaxPixmapSize (%d x %d)-> cut Pixmap to MaxPixmapSize", DrawPort.Width(), DrawPort.Height(), maxPixmapSize.Width(), maxPixmapSize.Height() );
+ SafeDrawPort.SetHeight(maxPixmapSize.Height());
+ }
+
+ return Osd->CreatePixmap(Layer, ViewPort, SafeDrawPort);
+}
+
void cComplexContent::CreatePixmaps(bool fullFillBackground) {
CalculateDrawPortHeight();
FullFillBackground = fullFillBackground;
@@ -60,8 +76,8 @@ void cComplexContent::CreatePixmaps(bool fullFillBackground) {
else
PositionDraw.SetHeight(DrawPortHeight);
- Pixmap = Osd->CreatePixmap(1, Position, PositionDraw);
- PixmapImage = Osd->CreatePixmap(2, Position, PositionDraw);
+ Pixmap = CreatePixmap(1, Position, PositionDraw);
+ PixmapImage = CreatePixmap(2, Position, PositionDraw);
//dsyslog("skinflatplus: ComplexContentPixmap left: %d top: %d width: %d height: %d", Position.Left(), Position.Top(), Position.Width(), Position.Height() );
//dsyslog("skinflatplus: ComplexContentPixmap drawport left: %d top: %d width: %d height: %d", PositionDraw.Left(), PositionDraw.Top(), PositionDraw.Width(), PositionDraw.Height() );
diff --git a/complexcontent.h b/complexcontent.h
index c84704f4..f7f7c5ee 100644
--- a/complexcontent.h
+++ b/complexcontent.h
@@ -134,6 +134,7 @@ private:
cOsd *Osd;
void CalculateDrawPortHeight(void);
+ virtual cPixmap *CreatePixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort = cRect::Null);
public:
cComplexContent(void);
diff --git a/displaychannel.c b/displaychannel.c
index d6fd6945..b3dab395 100644
--- a/displaychannel.c
+++ b/displaychannel.c
@@ -48,11 +48,11 @@ cFlatDisplayChannel::cFlatDisplayChannel(bool WithInfo) {
int heightTop = fontHeight;
int height = heightBottom;
- chanInfoBottomPixmap = osd->CreatePixmap(1, cRect(Config.decorBorderChannelSize,
+ chanInfoBottomPixmap = CreatePixmap(1, cRect(Config.decorBorderChannelSize,
Config.decorBorderChannelSize+channelHeight - height, channelWidth, heightBottom));
chanInfoBottomPixmap->Fill( Theme.Color(clrChannelBg) );
- chanIconsPixmap = osd->CreatePixmap(2, cRect(Config.decorBorderChannelSize,
+ chanIconsPixmap = CreatePixmap(2, cRect(Config.decorBorderChannelSize,
Config.decorBorderChannelSize+channelHeight - height, channelWidth, heightBottom));
chanIconsPixmap->Fill( clrTransparent );
@@ -61,14 +61,14 @@ cFlatDisplayChannel::cFlatDisplayChannel(bool WithInfo) {
TVSWidth = osdWidth - 40 - Config.decorBorderChannelEPGSize*2;
TVSHeight = osdHeight - topBarHeight - heightBottom - 40 - Config.decorBorderChannelEPGSize*2;
- chanEpgImagesPixmap = osd->CreatePixmap(2, cRect(TVSLeft, TVSTop, TVSWidth, TVSHeight));
+ chanEpgImagesPixmap = CreatePixmap(2, cRect(TVSLeft, TVSTop, TVSWidth, TVSHeight));
chanEpgImagesPixmap->Fill( clrTransparent );
- chanLogoBGPixmap = osd->CreatePixmap(2, cRect(Config.decorBorderChannelSize,
+ chanLogoBGPixmap = CreatePixmap(2, cRect(Config.decorBorderChannelSize,
Config.decorBorderChannelSize+channelHeight - height, heightBottom*2, heightBottom*2));
chanLogoBGPixmap->Fill( clrTransparent );
- chanLogoPixmap = osd->CreatePixmap(3, cRect(Config.decorBorderChannelSize,
+ chanLogoPixmap = CreatePixmap(3, cRect(Config.decorBorderChannelSize,
Config.decorBorderChannelSize+channelHeight - height, heightBottom*2, heightBottom*2));
chanLogoPixmap->Fill( clrTransparent );
@@ -80,7 +80,7 @@ cFlatDisplayChannel::cFlatDisplayChannel(bool WithInfo) {
ProgressBarDrawBgColor();
height += heightTop;
- chanInfoTopPixmap = osd->CreatePixmap(1, cRect(Config.decorBorderChannelSize,
+ chanInfoTopPixmap = CreatePixmap(1, cRect(Config.decorBorderChannelSize,
Config.decorBorderChannelSize+channelHeight - height, channelWidth, heightTop));
chanInfoTopPixmap->Fill( clrTransparent );
diff --git a/displaymenu.c b/displaymenu.c
index af90ddeb..09c4ecd8 100644
--- a/displaymenu.c
+++ b/displaymenu.c
@@ -3192,7 +3192,7 @@ void cFlatDisplayMenu::SetRecording(const cRecording *Recording) {
chTop = topBarHeight + marginItem + Config.decorBorderTopBarSize*2 + Config.decorBorderMenuContentHeadSize;
chWidth = menuWidth - Config.decorBorderMenuContentHeadSize*2;
chHeight = fontHeight + fontSmlHeight*2 + marginItem*2;
- contentHeadPixmap = osd->CreatePixmap(1, cRect(chLeft, chTop, chWidth, chHeight));
+ contentHeadPixmap = CreatePixmap(1, cRect(chLeft, chTop, chWidth, chHeight));
//dsyslog("skinflatplus: contentHeadPixmap left: %d top: %d width: %d height: %d", chLeft, chTop, chWidth, chHeight );
contentHeadIconsPixmap->Fill(clrTransparent);
diff --git a/displayreplay.c b/displayreplay.c
index 42c88f8d..a9e67269 100644
--- a/displayreplay.c
+++ b/displayreplay.c
@@ -22,23 +22,23 @@ cFlatDisplayReplay::cFlatDisplayReplay(bool ModeOnly) {
int TVSWidth = osdWidth - 40 - Config.decorBorderChannelEPGSize*2;
int TVSHeight = osdHeight - topBarHeight - labelHeight - 40 - Config.decorBorderChannelEPGSize*2;
- chanEpgImagesPixmap = osd->CreatePixmap(2, cRect(TVSLeft, TVSTop, TVSWidth, TVSHeight));
+ chanEpgImagesPixmap = CreatePixmap(2, cRect(TVSLeft, TVSTop, TVSWidth, TVSHeight));
chanEpgImagesPixmap->Fill( clrTransparent );
- labelPixmap = osd->CreatePixmap(1, cRect(Config.decorBorderReplaySize, osdHeight - labelHeight - Config.decorBorderReplaySize,
+ labelPixmap = CreatePixmap(1, cRect(Config.decorBorderReplaySize, osdHeight - labelHeight - Config.decorBorderReplaySize,
osdWidth - Config.decorBorderReplaySize*2, labelHeight));
- iconsPixmap = osd->CreatePixmap(2, cRect(Config.decorBorderReplaySize, osdHeight - labelHeight - Config.decorBorderReplaySize,
+ iconsPixmap = CreatePixmap(2, cRect(Config.decorBorderReplaySize, osdHeight - labelHeight - Config.decorBorderReplaySize,
osdWidth - Config.decorBorderReplaySize*2, labelHeight));
ProgressBarCreate(Config.decorBorderReplaySize, osdHeight - labelHeight - Config.decorProgressReplaySize - Config.decorBorderReplaySize - marginItem,
osdWidth - Config.decorBorderReplaySize*2, Config.decorProgressReplaySize, marginItem, 0,
Config.decorProgressReplayFg, Config.decorProgressReplayBarFg, Config.decorProgressReplayBg, Config.decorProgressReplayType);
- labelJump = osd->CreatePixmap(1, cRect(Config.decorBorderReplaySize,
+ labelJump = CreatePixmap(1, cRect(Config.decorBorderReplaySize,
osdHeight - labelHeight - Config.decorProgressReplaySize*2 - marginItem*3 - fontHeight - Config.decorBorderReplaySize*2,
osdWidth - Config.decorBorderReplaySize*2, fontHeight));
- dimmPixmap = osd->CreatePixmap(MAXPIXMAPLAYERS-1, cRect(0, 0, osdWidth, osdHeight));
+ dimmPixmap = CreatePixmap(MAXPIXMAPLAYERS-1, cRect(0, 0, osdWidth, osdHeight));
labelPixmap->Fill(Theme.Color(clrReplayBg));
labelJump->Fill(clrTransparent);
diff --git a/displaytracks.c b/displaytracks.c
index 7e9527e1..445196fd 100644
--- a/displaytracks.c
+++ b/displaytracks.c
@@ -30,10 +30,10 @@ cFlatDisplayTracks::cFlatDisplayTracks(const char *Title, int NumTracks, const c
left /= 2;
TopBarSetTitle(Title);
- tracksPixmap = osd->CreatePixmap(1, cRect(left, osdHeight - itemsHeight - marginItem, maxItemWidth, itemsHeight));
+ tracksPixmap = CreatePixmap(1, cRect(left, osdHeight - itemsHeight - marginItem, maxItemWidth, itemsHeight));
tracksPixmap->Fill(clrTransparent);
- tracksLogoPixmap = osd->CreatePixmap(1, cRect(left, osdHeight - itemsHeight - marginItem, maxItemWidth, itemsHeight));
+ tracksLogoPixmap = CreatePixmap(1, cRect(left, osdHeight - itemsHeight - marginItem, maxItemWidth, itemsHeight));
tracksLogoPixmap->Fill(clrTransparent);
SetItem(Title, -1, false);
diff --git a/displayvolume.c b/displayvolume.c
index 1db43294..e1aff072 100644
--- a/displayvolume.c
+++ b/displayvolume.c
@@ -9,13 +9,13 @@ cFlatDisplayVolume::cFlatDisplayVolume(void) {
CreateFullOsd();
TopBarCreate();
int width = osdWidth / 4 * 3;
-
+
int top = osdHeight - 50 - Config.decorProgressVolumeSize - labelHeight - marginItem - Config.decorBorderVolumeSize*2;
int left = osdWidth - width - Config.decorBorderVolumeSize;
left /= 2;
-
- labelPixmap = osd->CreatePixmap(1, cRect(0, top, osdWidth, labelHeight));
- muteLogoPixmap = osd->CreatePixmap(2, cRect(0, top, osdWidth, labelHeight));
+
+ labelPixmap = CreatePixmap(1, cRect(0, top, osdWidth, labelHeight));
+ muteLogoPixmap = CreatePixmap(2, cRect(0, top, osdWidth, labelHeight));
ProgressBarCreate(left, osdHeight - 50 - Config.decorProgressVolumeSize, width, Config.decorProgressVolumeSize, marginItem, marginItem,
Config.decorProgressVolumeFg, Config.decorProgressVolumeBarFg, Config.decorProgressVolumeBg, Config.decorProgressVolumeType, true);
@@ -29,7 +29,7 @@ cFlatDisplayVolume::~cFlatDisplayVolume() {
void cFlatDisplayVolume::SetVolume(int Current, int Total, bool Mute) {
labelPixmap->Fill(clrTransparent);
muteLogoPixmap->Fill(clrTransparent);
-
+
cString label = cString::sprintf("%s: %d", tr("Volume"), Current);
cString maxLabel = cString::sprintf("%s: %d", tr("Volume"), 555);
int maxlabelWidth = font->Width(maxLabel) + marginItem;
@@ -38,7 +38,7 @@ void cFlatDisplayVolume::SetVolume(int Current, int Total, bool Mute) {
int DecorTop = osdHeight - 50 - Config.decorProgressVolumeSize - labelHeight - Config.decorBorderVolumeSize*2;
labelPixmap->DrawRectangle(cRect(left - marginItem, marginItem, marginItem, fontHeight), Theme.Color(clrVolumeBg));
-
+
DecorBorderClear(left - marginItem, DecorTop, maxlabelWidth + marginItem*4 + fontHeight, fontHeight, Config.decorBorderVolumeSize);
DecorBorderClear(left - marginItem, DecorTop, maxlabelWidth + marginItem, fontHeight, Config.decorBorderVolumeSize);
@@ -59,7 +59,7 @@ void cFlatDisplayVolume::SetVolume(int Current, int Total, bool Mute) {
}
ProgressBarDraw(Current, Total);
-
+
int width = (osdWidth / 4 * 3);
left = osdWidth - width - Config.decorBorderVolumeSize;
left /= 2;
diff --git a/textscroller.c b/textscroller.c
index 37cf31f0..2ee8bfdc 100644
--- a/textscroller.c
+++ b/textscroller.c
@@ -15,13 +15,29 @@ void cTextScroll::SetText(const char *text, cRect position, tColor colorFg, tCol
if( Osd && Pixmap )
Osd->DestroyPixmap(Pixmap);
- Pixmap = Osd->CreatePixmap(Layer, Position, drawPort);
+ Pixmap = CreatePixmap(Layer, Position, drawPort);
dsyslog("skinflatplus: TextScrollerPixmap left: %d top: %d width: %d height: %d", Position.Left(), Position.Top(), Position.Width(), Position.Height());
dsyslog("skinflatplus: TextScrollerPixmap drawPort left: %d top: %d width: %d height: %d", drawPort.Left(), drawPort.Top(), drawPort.Width(), drawPort.Height());
Pixmap->Fill( colorBg );
Draw();
}
+cPixmap *cTextScroll::CreatePixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort) {
+ cSize maxPixmapSize = Osd->MaxPixmapSize();
+ cRect SafeDrawPort( DrawPort.X(), DrawPort.Y(), DrawPort.Width(), DrawPort.Height());
+
+ if( DrawPort.Width() > maxPixmapSize.Width() ) {
+ dsyslog("Try to create Pixmap (%d x %d) > MaxPixmapSize (%d x %d)-> cut Pixmap to MaxPixmapSize", DrawPort.Width(), DrawPort.Height(), maxPixmapSize.Width(), maxPixmapSize.Height() );
+ SafeDrawPort.SetWidth(maxPixmapSize.Width());
+ }
+ if( DrawPort.Height() > maxPixmapSize.Height() ) {
+ dsyslog("Try to create Pixmap (%d x %d) > MaxPixmapSize (%d x %d)-> cut Pixmap to MaxPixmapSize", DrawPort.Width(), DrawPort.Height(), maxPixmapSize.Width(), maxPixmapSize.Height() );
+ SafeDrawPort.SetHeight(maxPixmapSize.Height());
+ }
+
+ return Osd->CreatePixmap(Layer, ViewPort, SafeDrawPort);
+}
+
void cTextScroll::UpdateViewPortWidth(int w) {
cRect viewPort = Pixmap->ViewPort();
viewPort.SetWidth(viewPort.Width() - w);
diff --git a/textscroller.h b/textscroller.h
index f3cab674..ac839a94 100644
--- a/textscroller.h
+++ b/textscroller.h
@@ -23,6 +23,9 @@ private:
bool isReserveStep;
bool ResetX;
int ScrollType;
+
+ virtual cPixmap *CreatePixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort = cRect::Null);
+
public:
cTextScroll(cOsd *osd, int type, int pixels, int waitsteps, int layer) {
Font = NULL;