diff --git a/timeline.c b/timeline.c index c13a7c0..149ba51 100644 --- a/timeline.c +++ b/timeline.c @@ -4,6 +4,7 @@ cTimeLine::cTimeLine(cTimeManager *timeManager) { this->timeManager = timeManager; lastClock = ""; + timeBase = NULL; if (config.displayMode == eVertical) { dateViewer = new cStyledPixmap(osdManager.requestPixmap(1, cRect(0, geoManager.statusHeaderHeight + geoManager.clockHeight, @@ -16,11 +17,7 @@ cTimeLine::cTimeLine(cTimeManager *timeManager) { , cRect(0, 0, geoManager.timeLineWidth, - 1440*geoManager.minutePixel)); - timeBase = osdManager.requestPixmap(3, cRect(0, - geoManager.statusHeaderHeight + geoManager.channelGroupsHeight + geoManager.channelHeaderHeight, - geoManager.osdWidth, - geoManager.timeLineGridHeight)); + 1440 * geoManager.minutePixel)); } else if (config.displayMode == eHorizontal) { dateViewer = new cStyledPixmap(osdManager.requestPixmap(1, cRect(geoManager.clockWidth, geoManager.statusHeaderHeight, @@ -32,14 +29,9 @@ cTimeLine::cTimeLine(cTimeManager *timeManager) { geoManager.timeLineHeight) , cRect(0, 0, - 1440*geoManager.minutePixel, + 1440 * geoManager.minutePixel, geoManager.timeLineHeight)); - timeBase = osdManager.requestPixmap(3, cRect(geoManager.channelGroupsWidth + geoManager.channelHeaderWidth, - geoManager.statusHeaderHeight, - geoManager.timeLineGridWidth, - geoManager.timeLineHeight + config.channelRows * geoManager.rowHeight)); } - timeBase->Fill(clrTransparent); int clockY; int clockX; if (config.displayMode == eVertical) { @@ -57,10 +49,11 @@ cTimeLine::cTimeLine(cTimeManager *timeManager) { } cTimeLine::~cTimeLine(void) { - delete dateViewer; - osdManager.releasePixmap(timeline); if (clock) delete clock; + osdManager.releasePixmap(timeBase); + osdManager.releasePixmap(timeline); + delete dateViewer; } void cTimeLine::drawDateViewer() { @@ -207,19 +200,30 @@ void cTimeLine::drawRoundedCorners(int posX, int posY, int width, int height, in } void cTimeLine::drawCurrentTimeBase(void) { - timeBase->Fill(clrTransparent); - bool nowVisible = timeManager->NowVisible(); - if (!nowVisible) - return; - int deltaTime = (timeManager->GetNow() - timeManager->GetStart()) / 60 * geoManager.minutePixel; - if (config.displayMode == eVertical) { - timeBase->DrawRectangle(cRect(0, deltaTime - 2, timeBase->ViewPort().Width(), 4), theme.Color(clrTimeBase)); - } else { - timeBase->DrawRectangle(cRect(deltaTime-2, 0, 4, timeBase->ViewPort().Height()), theme.Color(clrTimeBase)); + if (!timeManager->NowVisible()) { + if (timeBase) + timeBase->Fill(clrTransparent); + return; } + osdManager.releasePixmap(timeBase); + int deltaTime = (timeManager->GetNow() - timeManager->GetStart()) / 60 * geoManager.minutePixel; + int x1, x2, y1, y2; + if (config.displayMode == eVertical) { + x1 = 0; + y1 = geoManager.statusHeaderHeight + geoManager.channelGroupsHeight + geoManager.channelHeaderHeight + deltaTime - 2; + x2 = geoManager.osdWidth; + y2 = 4; + } else { + x1 = geoManager.channelGroupsWidth + geoManager.channelHeaderWidth + deltaTime - 2; + y1 = geoManager.statusHeaderHeight; + x2 = 4; + y2 = geoManager.timeLineHeight + config.channelRows * geoManager.rowHeight; + } + timeBase = osdManager.requestPixmap(3, cRect(x1, y1, x2, y2)); + timeBase->Fill(clrTransparent); + timeBase->DrawRectangle(cRect(0, 0, timeBase->ViewPort().Width(), timeBase->ViewPort().Height()), theme.Color(clrTimeBase)); } - cImage *cTimeLine::createBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend) { cImage *image = NULL; if (config.style == eStyleBlendingDefault) {