mirror of
				https://projects.vdr-developer.org/git/vdr-plugin-tvguide.git
				synced 2023-10-05 13:01:48 +00:00 
			
		
		
		
	Refactor Timeline
This commit is contained in:
		| @@ -35,7 +35,7 @@ bool cGeometryManager::SetGeometry(int osdWidth, int osdHeight, bool force) { | ||||
|     if (config.displayMode == eVertical) { | ||||
|         colWidth = (osdWidth - timeLineWidth) / config.channelCols; | ||||
|         rowHeight = 0; | ||||
|         minutePixel = (osdHeight - statusHeaderHeight - channelGroupsHeight - channelHeaderHeight - footerHeight) / config.displayTime; | ||||
|         minutePixel = (double)(osdHeight - statusHeaderHeight - channelGroupsHeight - channelHeaderHeight - footerHeight) / (double)config.displayTime; | ||||
|         channelLogoWidth = colWidth; | ||||
|         channelLogoHeight = channelHeaderHeight; | ||||
|         logoWidth = channelLogoWidth / 2 - 15; | ||||
| @@ -49,7 +49,7 @@ bool cGeometryManager::SetGeometry(int osdWidth, int osdHeight, bool force) { | ||||
|     } else if (config.displayMode == eHorizontal) { | ||||
|         colWidth = 0; | ||||
|         rowHeight = (osdHeight - statusHeaderHeight - timeLineHeight - footerHeight) / config.channelRows; | ||||
|         minutePixel = (osdWidth - channelHeaderWidth - channelGroupsWidth) / config.displayHorizontalTime; | ||||
|         minutePixel = (double)(osdWidth - channelHeaderWidth - channelGroupsWidth) / (double)config.displayHorizontalTime; | ||||
|         channelLogoWidth = channelHeaderWidth; | ||||
|         channelLogoHeight = rowHeight; | ||||
|         logoWidth = channelLogoHeight * config.logoWidthRatio / config.logoHeightRatio; | ||||
|   | ||||
| @@ -24,7 +24,7 @@ public: | ||||
|     //Content | ||||
|     int colWidth; | ||||
|     int rowHeight; | ||||
|     int minutePixel; | ||||
|     double minutePixel; | ||||
|     int channelLogoWidth; | ||||
|     int channelLogoHeight; | ||||
|     //Timeline | ||||
|   | ||||
							
								
								
									
										109
									
								
								timeline.c
									
									
									
									
									
								
							
							
						
						
									
										109
									
								
								timeline.c
									
									
									
									
									
								
							| @@ -5,33 +5,28 @@ cTimeLine::cTimeLine(cTimeManager *timeManager) { | ||||
|     this->timeManager = timeManager; | ||||
|     lastClock = ""; | ||||
|     timeBase = NULL; | ||||
|     int x11, x21, y11, y21, x12, x22, y12, y22; | ||||
|     if (config.displayMode == eVertical) { | ||||
|         dateViewer = new cStyledPixmap(osdManager.requestPixmap(1, cRect(0,  | ||||
|                                                                          geoManager.statusHeaderHeight + geoManager.clockHeight,  | ||||
|                                                                          geoManager.dateVieverWidth,  | ||||
|                                                                          geoManager.dateVieverHeight))); | ||||
|         timeline = osdManager.requestPixmap(2, cRect(0,  | ||||
|                                                      geoManager.statusHeaderHeight + geoManager.channelHeaderHeight + geoManager.channelGroupsHeight,  | ||||
|                                                      geoManager.timeLineWidth,  | ||||
|                                                      geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight) | ||||
|                                              , cRect(0, | ||||
|                                                      0,  | ||||
|                                                      geoManager.timeLineWidth,  | ||||
|                                                      1440 * geoManager.minutePixel)); | ||||
|         x11 = 0; | ||||
|         x21 = geoManager.dateVieverWidth; | ||||
|         y11 = geoManager.statusHeaderHeight + geoManager.clockHeight; | ||||
|         y21 = geoManager.dateVieverHeight; | ||||
|         x12 = 0; | ||||
|         x22 = geoManager.timeLineWidth; | ||||
|         y12 = geoManager.statusHeaderHeight + geoManager.channelHeaderHeight + geoManager.channelGroupsHeight; | ||||
|         y22 = geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight; | ||||
|     } else if (config.displayMode == eHorizontal) { | ||||
|         dateViewer = new cStyledPixmap(osdManager.requestPixmap(1, cRect(geoManager.clockWidth,  | ||||
|                                                                          geoManager.statusHeaderHeight,  | ||||
|                                                                          geoManager.dateVieverWidth, | ||||
|                                                                          geoManager.dateVieverHeight))); | ||||
|         timeline = osdManager.requestPixmap(2, cRect(geoManager.channelHeaderWidth + geoManager.channelGroupsWidth,  | ||||
|                                                      geoManager.statusHeaderHeight,  | ||||
|                                                      geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth, | ||||
|                                                      geoManager.timeLineHeight) | ||||
|                                              , cRect(0, | ||||
|                                                      0,  | ||||
|                                                      1440 * geoManager.minutePixel,  | ||||
|                                                      geoManager.timeLineHeight)); | ||||
|         x11 = geoManager.clockWidth; | ||||
|         x21 = geoManager.dateVieverWidth; | ||||
|         y11 = geoManager.statusHeaderHeight; | ||||
|         y21 = geoManager.dateVieverHeight; | ||||
|         x12 = geoManager.channelHeaderWidth + geoManager.channelGroupsWidth; | ||||
|         x22 = geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth; | ||||
|         y12 = geoManager.statusHeaderHeight; | ||||
|         y22 = geoManager.timeLineHeight; | ||||
|     } | ||||
|     dateViewer = new cStyledPixmap(osdManager.requestPixmap(1, cRect(x11, y11, x21, y21))); | ||||
|     timeline = osdManager.requestPixmap(2, cRect(x12, y12, x22, y22)); | ||||
|     clock = new cStyledPixmap(osdManager.requestPixmap(3, cRect(0,  | ||||
|                                                                 geoManager.statusHeaderHeight,  | ||||
|                                                                 geoManager.clockWidth,  | ||||
| @@ -43,10 +38,11 @@ cTimeLine::~cTimeLine(void) { | ||||
|        delete clock; | ||||
|     osdManager.releasePixmap(timeBase); | ||||
|     osdManager.releasePixmap(timeline); | ||||
|     if (dateViewer) | ||||
|         delete dateViewer; | ||||
| } | ||||
|  | ||||
| void cTimeLine::drawDateViewer() { | ||||
| void cTimeLine::DrawDateViewer(void) { | ||||
|     cString weekDay = timeManager->GetWeekday(); | ||||
|     cString date = timeManager->GetDate();    | ||||
|     if (config.style != eStyleGraphical) { | ||||
| @@ -80,8 +76,8 @@ void cTimeLine::drawDateViewer() { | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cTimeLine::drawTimeline() { | ||||
|     timeline->SetTile(true); | ||||
| void cTimeLine::DrawTimeline(void) { | ||||
| //    timeline->SetTile(true); | ||||
|     timeline->Fill(clrTransparent); | ||||
|     tColor colorFont, colorBackground; | ||||
|      | ||||
| @@ -93,8 +89,8 @@ void cTimeLine::drawTimeline() { | ||||
|         img1 = imgCache.GetOsdElement(oeTimeline1); | ||||
|         img2 = imgCache.GetOsdElement(oeTimeline2); | ||||
|     } else { | ||||
|         img1 = createBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline1), theme.Color(clrTimeline1Blending)); | ||||
|         img2 = createBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline2), theme.Color(clrTimeline2Blending)); | ||||
|         img1 = CreateBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline1), theme.Color(clrTimeline1Blending)); | ||||
|         img2 = CreateBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline2), theme.Color(clrTimeline2Blending)); | ||||
|     } | ||||
|     const cImage *img = NULL; | ||||
|     if (!img1 || !img2) | ||||
| @@ -102,7 +98,18 @@ void cTimeLine::drawTimeline() { | ||||
|     int textWidth, posX, posY; | ||||
|     char timetext[10]; | ||||
|      | ||||
|     for (int i=0; i<48; i++) { | ||||
|     int halfHours; | ||||
|     if (config.displayMode == eVertical) | ||||
|         halfHours = config.displayTime / 30 + 1; | ||||
|     else | ||||
|         halfHours = config.displayHorizontalTime / 30 + 1; | ||||
|  | ||||
|     time_t tStart = timeManager->GetStart(); | ||||
|     tm *t = localtime ( &tStart ); | ||||
|  | ||||
|     int x = 2 * t->tm_hour + ((t->tm_min == 0) ? 0 : 1); | ||||
|     for (int j = x; j < (x + halfHours); j++) { | ||||
|         int i = (j >= 48) ? (j - 48) : j; | ||||
|         if (i % 2 == 0) { | ||||
|             img = img1; | ||||
|             colorFont = theme.Color(clrTimeline2); | ||||
| @@ -133,30 +140,30 @@ void cTimeLine::drawTimeline() { | ||||
|             } | ||||
|         } | ||||
|         if (config.displayMode == eVertical) { | ||||
|             posY = i*geoManager.minutePixel*30; | ||||
|             posY = (j - x) * geoManager.minutePixel * 30; | ||||
|             timeline->DrawImage(cPoint(0, posY), *img); | ||||
|             if (config.style != eStyleGraphical) { | ||||
|                 decorateTile(0, posY, imgWidth+2, imgHeight); | ||||
|                 DecorateTile(0, posY, imgWidth + 2, imgHeight); | ||||
|             } | ||||
|             textWidth = fontManager.FontTimeLineTime->Width(timetext); | ||||
|             timeline->DrawText(cPoint((geoManager.timeLineWidth-textWidth) / 2, posY + 5), timetext, colorFont, colorBackground, fontManager.FontTimeLineTime); | ||||
|         } else if (config.displayMode == eHorizontal) { | ||||
|             posX = i*geoManager.minutePixel*30; | ||||
|             posX = (j - x) * geoManager.minutePixel * 30; | ||||
|             timeline->DrawImage(cPoint(posX, 0), *img); | ||||
|             if (config.style != eStyleGraphical) { | ||||
|                 decorateTile(posX, 0, imgWidth, imgHeight+2); | ||||
|                 DecorateTile(posX, 0, imgWidth, imgHeight + 2); | ||||
|             } | ||||
|             timeline->DrawText(cPoint(posX + 15, (dateViewer->Height() - fontManager.FontTimeLineTimeHorizontal->Height()) / 2), timetext, colorFont, colorBackground, fontManager.FontTimeLineTimeHorizontal); | ||||
|        } | ||||
|     } | ||||
|     setTimeline(); | ||||
|     DrawTimeIndicator(); | ||||
|     if (config.style != eStyleGraphical) { | ||||
|         delete img1; | ||||
|         delete img2; | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cTimeLine::decorateTile(int posX, int posY, int tileWidth, int tileHeight) { | ||||
| void cTimeLine::DecorateTile(int posX, int posY, int tileWidth, int tileHeight) { | ||||
|     timeline->DrawRectangle(cRect(posX,posY,tileWidth,2), clrTransparent);          //top | ||||
|     timeline->DrawRectangle(cRect(posX,posY,2,tileHeight), clrTransparent);         //left | ||||
|     timeline->DrawRectangle(cRect(posX,posY + tileHeight-2,tileWidth,2), clrTransparent);   //bottom | ||||
| @@ -169,11 +176,11 @@ void cTimeLine::decorateTile(int posX, int posY, int tileWidth, int tileHeight) | ||||
|      | ||||
|     if (config.roundedCorners) { | ||||
|         int borderRadius = 12; | ||||
|         drawRoundedCorners(posX, posY, tileWidth, tileHeight, borderRadius); | ||||
|         DrawRoundedCorners(posX, posY, tileWidth, tileHeight, borderRadius); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cTimeLine::drawRoundedCorners(int posX, int posY, int width, int height, int radius) { | ||||
| void cTimeLine::DrawRoundedCorners(int posX, int posY, int width, int height, int radius) { | ||||
|     timeline->DrawEllipse(cRect(posX+2,posY+2,radius,radius), theme.Color(clrBorder), -2); | ||||
|     timeline->DrawEllipse(cRect(posX+1,posY+1,radius,radius), clrTransparent, -2); | ||||
|  | ||||
| @@ -189,14 +196,16 @@ void cTimeLine::drawRoundedCorners(int posX, int posY, int width, int height, in | ||||
|     } | ||||
| } | ||||
|  | ||||
| void cTimeLine::drawCurrentTimeBase(void) { | ||||
| void cTimeLine::DrawTimeIndicator(void) { | ||||
|     if (!config.displayTimeBase) | ||||
|         return; | ||||
|     if (!timeManager->NowVisible()) { | ||||
|        if (timeBase) | ||||
|           timeBase->Fill(clrTransparent); | ||||
|        return; | ||||
|     } | ||||
|     int deltaTime = (time(0) - timeManager->GetStart()) / 60 * geoManager.minutePixel; | ||||
|     osdManager.releasePixmap(timeBase); | ||||
|     int deltaTime = (timeManager->GetNow() - timeManager->GetStart()) / 60 * geoManager.minutePixel; | ||||
|     int x1, x2, y1, y2; | ||||
|     if (config.displayMode == eVertical) { | ||||
|        x1 = 0; | ||||
| @@ -214,7 +223,7 @@ void cTimeLine::drawCurrentTimeBase(void) { | ||||
|     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 *cTimeLine::CreateBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend) { | ||||
|     cImage *image = NULL; | ||||
|     if (config.style == eStyleBlendingDefault) { | ||||
|         image = new cImage(cSize(width, height)); | ||||
| @@ -243,22 +252,7 @@ cImage *cTimeLine::createBackgroundImage(int width, int height, tColor clrBgr, t | ||||
|     return image; | ||||
| } | ||||
|  | ||||
| void cTimeLine::setTimeline() { | ||||
|     int offset = timeManager->GetTimelineOffset(); | ||||
|     int xNew, yNew; | ||||
|     if (config.displayMode == eVertical) { | ||||
|         xNew = 0; | ||||
|         yNew = -offset*geoManager.minutePixel; | ||||
|     } else if (config.displayMode == eHorizontal) { | ||||
|         xNew = -offset*geoManager.minutePixel; | ||||
|         yNew = 0; | ||||
|     } | ||||
|     timeline->SetDrawPortPoint(cPoint(xNew, yNew)); | ||||
|     if (config.displayTimeBase) | ||||
|         drawCurrentTimeBase(); | ||||
| } | ||||
|  | ||||
| bool cTimeLine::drawClock() { | ||||
| bool cTimeLine::DrawClock(void) { | ||||
|     cString currentTime = timeManager->GetCurrentTime(); | ||||
|     if (strcmp(currentTime, lastClock)) { | ||||
|        clock->Fill(clrTransparent); | ||||
| @@ -275,6 +269,7 @@ bool cTimeLine::drawClock() { | ||||
|        } | ||||
|        clock->DrawText(cPoint((geoManager.clockWidth - clockTextWidth) / 2, (geoManager.clockHeight - textHeight) / 2), *currentTime, theme.Color(clrFont), colorFontBack, font); | ||||
|        lastClock = currentTime; | ||||
|        DrawTimeIndicator(); | ||||
|        return true; | ||||
|     } | ||||
|     return false; | ||||
|   | ||||
							
								
								
									
										15
									
								
								timeline.h
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								timeline.h
									
									
									
									
									
								
							| @@ -14,17 +14,16 @@ private: | ||||
|     cStyledPixmap *clock; | ||||
|     cPixmap *timeBase; | ||||
|     cString lastClock; | ||||
|     void decorateTile(int posX, int posY, int tileWidth, int tileHeight); | ||||
|     void drawRoundedCorners(int posX, int posY, int width, int height, int radius); | ||||
|     cImage *createBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend); | ||||
|     void DecorateTile(int posX, int posY, int tileWidth, int tileHeight); | ||||
|     void DrawRoundedCorners(int posX, int posY, int width, int height, int radius); | ||||
|     cImage *CreateBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend); | ||||
| public: | ||||
|     cTimeLine(cTimeManager *timeManager); | ||||
|     virtual ~cTimeLine(void); | ||||
|     void setTimeline(void); | ||||
|     void drawDateViewer(void); | ||||
|     void drawTimeline(void); | ||||
|     void drawCurrentTimeBase(void); | ||||
|     bool drawClock(); | ||||
|     void DrawDateViewer(void); | ||||
|     void DrawTimeline(void); | ||||
|     void DrawTimeIndicator(void); | ||||
|     bool DrawClock(void); | ||||
| }; | ||||
|  | ||||
| #endif //__TVGUIDE_TIMELINE_H | ||||
|   | ||||
							
								
								
									
										35
									
								
								tvguideosd.c
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								tvguideosd.c
									
									
									
									
									
								
							| @@ -112,9 +112,9 @@ void cTvGuideOsd::drawOsd() { | ||||
|         statusHeader->ScaleVideo(); | ||||
|     } | ||||
|     timeLine = new cTimeLine(timeManager); | ||||
|     timeLine->drawDateViewer(); | ||||
|     timeLine->drawTimeline(); | ||||
|     timeLine->drawClock(); | ||||
|     timeLine->DrawDateViewer(); | ||||
|     timeLine->DrawTimeline(); | ||||
|     timeLine->DrawClock(); | ||||
|     channelGroups = new cChannelGroups(); | ||||
|     channelGroups->ReadChannelGroups(); | ||||
|     footer = new cFooter(channelGroups); | ||||
| @@ -374,12 +374,12 @@ void cTvGuideOsd::ScrollForward() { | ||||
|     timeManager->AddStep(config.stepMinutes); | ||||
|     if (config.useHWAccel) { | ||||
|         drawGridsTimeJump(true); | ||||
|         timeLine->drawDateViewer(); | ||||
|         timeLine->drawClock(); | ||||
|         timeLine->setTimeline(); | ||||
|         timeLine->DrawDateViewer(); | ||||
|         timeLine->DrawClock(); | ||||
|         timeLine->DrawTimeline(); | ||||
|     } else { | ||||
|         timeLine->drawDateViewer(); | ||||
|         timeLine->setTimeline(); | ||||
|         timeLine->DrawDateViewer(); | ||||
|         timeLine->DrawTimeline(); | ||||
|         for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) { | ||||
|             column->AddNewGridsAtEnd(); | ||||
|             column->ClearOutdatedStart(); | ||||
| @@ -413,12 +413,12 @@ void cTvGuideOsd::ScrollBack() { | ||||
|     timeManager->DelStep(config.stepMinutes); | ||||
|     if (config.useHWAccel) { | ||||
|         drawGridsTimeJump(); | ||||
|         timeLine->drawDateViewer(); | ||||
|         timeLine->drawClock(); | ||||
|         timeLine->setTimeline(); | ||||
|         timeLine->DrawDateViewer(); | ||||
|         timeLine->DrawClock(); | ||||
|         timeLine->DrawTimeline(); | ||||
|     } else { | ||||
|         timeLine->drawDateViewer(); | ||||
|         timeLine->setTimeline(); | ||||
|         timeLine->DrawDateViewer(); | ||||
|         timeLine->DrawTimeline(); | ||||
|         for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) { | ||||
|             column->AddNewGridsAtStart(); | ||||
|             column->ClearOutdatedEnd(); | ||||
| @@ -672,9 +672,9 @@ void cTvGuideOsd::TimeJump(int mode) { | ||||
|             return; | ||||
|     } | ||||
|     drawGridsTimeJump(); | ||||
|     timeLine->drawDateViewer(); | ||||
|     timeLine->drawClock(); | ||||
|     timeLine->setTimeline(); | ||||
|     timeLine->DrawDateViewer(); | ||||
|     timeLine->DrawClock(); | ||||
|     timeLine->DrawTimeline(); | ||||
|     osdManager.flush(); | ||||
| } | ||||
|  | ||||
| @@ -786,8 +786,7 @@ eOSState cTvGuideOsd::ProcessKey(eKeys Key) { | ||||
|             case kNone:     if (channelJumper) CheckTimeout(); break; | ||||
|             default:        break; | ||||
|         } | ||||
|         if (timeLine->drawClock()) { | ||||
|             timeLine->drawCurrentTimeBase(); | ||||
|         if (timeLine->DrawClock()) { | ||||
|             osdManager.flush(); | ||||
|         } | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user